CH340N这颗芯片,凡是玩单片机、折腾串口调试的人,大概率都见过。最近两年USB Type-C接口普及之后,基于CH340N做的Type-C转TTL小模块越来越多,体积比过去CH340G加晶振的方案小了一大截,插上电脑就能识别成一个串口,给STM32下载程序、给ESP32看日志、跟传感器模块通信都非常顺手。这篇文章我围绕CH340N这颗芯片,把从选型、USB Type-C接口电路、原理图、PCB布局到焊接调试的完整流程梳理一遍,如果你正准备画一块自己的USB转串口模块,或者只是想把CH340N用进现有产品里,这份内容可以直接拿来当参考。
我最早接触CH340系列是CH340G,那个SOP16封装配12MHz晶振,还得加两个负载电容,画板子占地方,调试时也容易因为晶振没起振而找不到设备。后来CH340C内置晶振,少焊两个电容;再到CH340N,直接缩到SOT23-6,六只引脚,芯片本体比一粒米还小,外围几乎什么都不用加,接上USB的D+/D-和电源就能工作。这篇博文不讨论那些花哨的扩展功能,就是老老实实讲清楚,把一个CH340N的Type-C USB转串口模块从零画出来、焊出来、用起来,会经历哪些环节,以及每个环节我实际踩过的坑。
1. 为什么选CH340N:从CH340系列选型说起
1.1 CH340家族型号对比
很多人一上来就搜“CH340N”,但其实CH340下面有好几颗芯片,长得都不一样,选错了引脚定义直接翻车。我把常见的几颗放到一起对比一下:
| 型号 | 封装 | 外部晶振 | 串口信号 | 典型应用 |
|---|---|---|---|---|
| CH340G | SOP16 | 需要12MHz晶振+2个负载电容 | TXD/RXD/RTS#/CTS#/DTR#/DSR#/DCD#/RI# | 老式开发板、全功能串口扩展 |
| CH340C | SOP16 | 内置 | 同上 | 免晶振的全功能方案,替代CH340G |
| CH340N | SOT23-6 | 内置 | TXD/RXD | 极小体积、USB转TTL最小系统 |
| CH340E | MSOP10 | 内置 | TXD/RXD/RTS#/CTS# | 需要硬件流控的紧凑型方案 |
从表里能看出来,CH340N是CH340家族里最精简的一颗,引脚砍到只剩6个,串口信号只保留TXD和RXD。这意味着它没有硬件流控,没有DTR和RTS,很多ESP32开发板上那种“一键下载电路”依赖的就是RTS和DTR这两个信号,所以CH340N做不到真正的硬件自动下载。但反过来讲,对于绝大多数调试场景,我们需要的只是把USB变成一个虚拟串口,跟MCU的UART收发数据而已,TXD和RXD完全够用。
选择CH340N的第一个理由就是封装小,SOT23-6的封装尺寸大约2.9mm×1.6mm,焊盘之间间距不到1mm,放在Type-C母座旁边非常省空间。第二个理由是内置晶振,CH340G需要外部12MHz晶振和两个负载电容,晶振本身占面积,两个电容也占位置,而CH340N把这些全集成进去了,外围电路少到极点。第三个理由是供电灵活,VCC可以接5V也可以接3.3V,串口电平跟着VCC走,适配不同电压的逻辑系统很方便。
1.2 什么场景该选CH340N,什么场景别选
我用CH340N做过好几块小模块,总结下来这些场景最适合它:
- USB转TTL调试模块,给STM32、GD32、NXP等MCU下载程序或打印日志。
- 给ESP8266或ESP32做简单的串口透传,但能接受手动按键进下载模式。
- 跟各种TTL电平传感器、GPS模块、蓝牙模块通信。
- 嵌入式设备里需要预留一个调试串口,板子空间又很紧张。
- 做Type-C接口的USB转串口小工具,随身携带。
反过来,下面这几个场景我不建议用CH340N:
- 需要硬件流控的RS232/RS485转换器,因为CH340N没有RTS/CTS引脚。
- ESP32或ESP8266需要一键自动下载,没有RTS/DTR信号就很麻烦。
- 目标设备是1.8V或2.5V电平的FPGA、新式传感器,CH340N的IO电平无法直接匹配。
- 对静电防护、工业环境可靠性要求很高的场合,需要额外加保护器件,还可能有更好的芯片选择。
简单说,CH340N就是一颗“安安静静做串口”的芯片,别指望它干太多事,在它擅长的领域里,它就是最优解。
1.3 CH340N核心参数与引脚定义
CH340N的引脚是SOT23-6,从丝印上看一共6个引脚,定义如下:
| 引脚号 | 名称 | 方向 | 功能说明 |
|---|---|---|---|
| 1 | GND | 电源 | 接地 |
| 2 | VCC | 电源 | 电源正,3.3V~5V |
| 3 | RXD | 输入 | 串口接收,接目标设备TXD |
| 4 | TXD | 输出 | 串口发送,接目标设备RXD |
| 5 | UD+ | USB | USB D+信号 |
| 6 | UD- | USB | USB D-信号 |
TXD和RXD这两个名字特别容易搞反。CH340N的TXD是芯片往外发数据的引脚,所以要接目标设备的RXD;RXD是芯片接收外部数据的引脚,要接目标设备的TXD。串口通信里“交叉连接”这个基本规则,新手最容易在这里翻车,我第一次画模块就是TXD和RXD画反了,结果回环测试怎么都不通。
除了引脚,还有几个参数值得记住:CH340N支持USB 2.0全速,理论速率12Mbps;UART波特率范围50bps到2Mbps,覆盖了常用下载和调试波特率;芯片内置12MHz晶振,启动时不需要额外配置。驱动方面,Windows、Linux、macOS都有官方驱动或系统自带驱动,插上电脑一般就能识别,这个后面调试部分再细说。
2. USB Type-C接口设计的关键细节
2.1 Type-C母座引脚与USB 2.0连接
做USB转串口模块,接口现在都优先选Type-C,Type-C母座的引脚比老式USB-A要复杂许多,但真正用到的其实就那么几根。
常见的Type-C母座是16Pin贴片式,引脚分布包括:A1/B1是GND,A4/B4是VBUS,A5/B5是CC1/CC2,A6/B6是D+,A7/B7是D-,A8/B8是SBU1/SBU2,还有一圈外壳屏蔽脚。对于USB 2.0应用,SBU引脚完全不用接,我们只需要VBUS、GND、D+、D-、CC1、CC2这6组信号。
D+和D-在Type-C母座上是双面的,A6和B6都是D+,A7和B7都是D-。画PCB时需要在母座下面把同名信号短接在一起,也就是说A6和B6连起来接到CH340N的UD+,A7和B7连起来接到CH340N的UD-。如果不连,插反方向的时候设备就会不识别,因为其中一面悬空了。
Type-C的电源脚VBUS其实是A4和B4并联的,GND是A1和B1并联的,这两个一般也比较直观。需要注意的是,Type-C母座的外壳屏蔽脚,我建议通过一个0Ω电阻或者直接用铜箔连到GND,如果系统对EMI敏感,也可以串联一个1nF电容再接地,但不管怎么接,不要让屏蔽脚悬空,否则热插拔的时候静电很容易窜进电路。
2.2 CC1/CC2下拉电阻:最容易忽略的环节
这是我见过最多人踩的坑,也是自制Type-C设备跟老式USB-A设计最大的区别。Type-C接口里有一对CC引脚(Configuration Channel),用于检测插入方向和供电协商。当你的设备作为USB从设备(UFP,比如USB转串口模块)时,CC1和CC2必须各接一个5.1kΩ电阻下拉到GND,主机端才能正确检测到设备插入,然后才会打开VBUS电源输出5V。
如果没有这两个下拉电阻,会出现什么现象?插上Type-C线后,模块完全没电,测量VBUS引脚电压是0V,电脑也没有任何“叮咚”的插入提示。很多新手以为是芯片坏了,其实是CC引脚没做下拉。
具体接法很简单:CC1引脚接一个5.1kΩ电阻到GND,CC2引脚再接一个5.1kΩ电阻到GND,两个电阻各自独立,不要共用一个,除非你把两个CC脚先短接再共用一个电阻,但更规范的做法是两个各接一个。电阻精度用5%的就行,1%的也没问题,封装一般用0402或0603,靠近Type-C母座放置。
我试过在某些引脚定义的Type-C母座上把CC1和CC2直接短接,再通过一个5.1kΩ电阻接地,这样做大多数情况下也能工作,但不推荐,因为Type-C规范里CC1和CC2是独立的,需要分别检测插入方向。直接短接在某些支持双角色切换的主控方案上可能引起混乱,规范做法还是每个CC引脚独立下拉。
2.3 D+/D-走线与外壳接地
USB全速信号速率只有12Mbps,对差分阻抗的要求没有高速USB那么严格,但走线依然不能随便来。D+和D-最好从Type-C母座出来后直接连到CH340N的UD+和UD-,尽量保持等长,不要绕远路,不要在线上打过孔。如果必须走两层板,优先让D+/D-在同一层完整走完,另一层做完整的地平面。
两条线之间也不要靠得太近,建议间距不小于线宽的2倍,避免相互串扰。同时,D+/D-线上不要加不必要的过孔、测试点,如果实在要加测试点,选择小焊盘并且避开主线。
Type-C母座的外壳接地处理也直接影响抗静电能力。外壳的屏蔽脚最好直接大面积连到GND,让静电有低阻抗泄放路径。如果板子设计允许,Type-C母座下方铺上地铜皮,并打几个过孔到背面地平面,这样热插拔时的ESD能量能更快散掉。
如果产品要经常在户外、工业现场拔插,建议在D+/D-线上并联一个ESD保护器件,比如USBLC6-2或者便宜的ESD二极管阵列,放在母座和CH340N之间。VBUS上也加一个TVS管到GND,防止电压浪涌。自己做着玩可以省略,产品化一定不要省,这几十颗电容电阻的代价能避免很多售后问题。
3. 完整电路设计:从原理图到BOM
3.1 最小系统电路拆解
CH340N的最小系统外围非常简单,我直接把原理图的核心连接方式描述一遍。
- 电源:Type-C母座的VBUS接到板上的5V电源网络。这个5V网络一方面给CH340N的VCC供电,另一方面也可以引到排针上给外部目标板供电。GND公共地连成一片。
- 去耦电容:在CH340N的VCC引脚旁边放一个0.1μF陶瓷电容,电容的一脚接VCC,一脚接GND,尽量靠近引脚放置。这是所有数字芯片都需要的电源去耦,能让芯片工作更稳定。
- Type-C连接:母座的D+(A6/B6短接后)接CH340N的UD+,D-(A7/B7短接后)接CH340N的UD-。
- CC下拉:CC1接5.1kΩ到GND,CC2接5.1kΩ到GND。
- 串口引出:CH340N的TXD接排针TXD,RXD接排针RXD,GND接排针GND。如果有需要,也可以把VCC引到排针。
这里特别说明一下,CH340N不需要外接复位电路,也不需要启动配置引脚,UD+/UD-芯片内部已经集成了USB终端电阻,无需外围上拉或下拉。这一点比很多需要外部1.5kΩ上拉的全速USB设备省心得多。
3.2 电平匹配与外围扩展电路
串口电平匹配是整个设计里最需要动脑子的地方。CH340N的VCC如果接5V,TXD输出的高电平接近5V;如果VCC接3.3V,TXD输出的高电平就是3.3V。RXD输入能容忍5V电平,所以5V单板机直接接也没有问题。
我画模块时的习惯是:如果主要给3.3V MCU用,就单独加一颗LDO,比如ME6211或XC6206,把VBUS的5V降到3.3V,然后给CH340N的VCC供电。这样TXD输出是3.3V,直接接ESP32、STM32的RX引脚非常安全。如果主要给5V系统用,比如老式AVR、51单片机,VBUS直接加滤波电容后接到VCC就行。
如果想做一个“通吃”模块,可以在板上留一个跳线或跳帽,把VCC供电来源做成可选:跳线接5V直接用VBUS,跳线接3.3V用LDO输出。这样同一个模块既能调试3.3V板子也能调试5V板子。但要注意,切换电平时别忘了目标板的参考电平,两边电压不一致时通信容易乱码甚至损伤引脚。
对于TXD/RXD指示灯,这个不是必须的,但调试时很有用。做法是在TXD和GND之间串一个LED和1kΩ限流电阻,RXD同样处理。串口空闲时TXD是高电平,LED不亮或微亮,通信时电平翻转LED会闪,能直观看到有没有数据在跑。注意LED方向不要接反,接反了不仅不亮,还可能影响信号。
3.3 完整BOM表与PCB布局思路
下面是一个带Type-C接口的CH340N模块的完整BOM,我实际打样用的就是这套料:
| 序号 | 器件 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|---|
| U1 | USB转串口芯片 | CH340N SOT23-6 | 1 | 核心芯片 |
| J1 | Type-C母座 | 16Pin 贴片,带外壳脚 | 1 | 尽量选焊脚宽的 |
| C1 | 陶瓷电容 | 0.1μF 0603 | 1 | VCC去耦,靠近引脚 |
| C2 | 陶瓷电容 | 10μF 0805 | 1 | VBUS输入滤波,可选 |
| R1 | 电阻 | 5.1kΩ 0603 | 1 | CC1下拉 |
| R2 | 电阻 | 5.1kΩ 0603 | 1 | CC2下拉 |
| R3 | 电阻 | 1kΩ 0603 | 1 | LED限流 |
| D1 | LED | 0805绿色 | 1 | 电源指示,可选 |
| P1 | 排针 | 2.54mm 4Pin | 1 | VCC/TXD/RXD/GND |
| ESD1 | TVS管 | USBLC6-2或等效 | 1 | D+/D-保护,可选 |
PCB布局顺序我一般是这样的:先把Type-C母座放在板子一端,CH340N紧挨着母座放,这样D+/D-走线最短。CC下拉电阻放在母座和芯片之间,靠近母座的CC引脚。0.1μF电容放在CH340N的VCC引脚正对面,距离越近越好。排针放在板子另一端,VCC、TXD、RXD、GND的顺序按习惯排列,GND放边上方便夹子夹。
板子层数方面,2层板完全够用。顶层走信号,底层大面积铺地。如果空间允许,板子做成5cm以内的小长条,宽度12mm左右,非常便携。打样时用常规FR4、1.6mm板厚、1oz铜厚就行,不需要特殊工艺。
4. 焊接、驱动与调试实战
4.1 SOT23-6焊接技巧
很多人看到SOT23-6这种小封装就发怵,其实掌握了技巧比SOP16好焊多了,因为引脚少,反而更容易控制。
我的焊接方法是用烙铁拖焊。先在PCB的焊盘上涂一点助焊剂,把CH340N按丝印方向放上去,芯片的1脚要和丝印的圆点或缺口对齐。用烙铁先固定对角线的两个引脚,也就是1脚和4脚,焊上后芯片就不会跑了。然后在这一侧的剩下引脚上补锡,用烙铁头把锡拖过去,让锡均匀覆盖引脚和焊盘,借助助焊剂的表面张力,多余的锡会自然分开。拖完一侧再拖另一侧,最后用放大镜检查有没有连锡。
如果拖焊后引脚之间有锡桥,不用着急,加助焊剂后再用干净烙铁头拖一次,锡桥就会被带走。实在搞不定,可以用吸锡带把多余的锡吸掉。还有一个办法是热风枪焊接:焊盘上均匀涂一层薄锡膏,放上芯片,热风枪温度调到300到320度,风速调小,对着芯片吹十几秒,看到锡膏熔化、芯片微微下沉就完成了。这个方法对新手更友好,但需要热风枪设备。
焊完之后,先用万用表蜂鸣档测一下VCC和GND是否短路,再测一下UD+、UD-对GND是否短路,确认没有短路再上电。我第一次焊SOT23-6就遇到过VCC和GND连锡,一上电芯片就发烫,赶紧断电拆下来重焊,从此养成了上电前必测短路的习惯。
4.2 驱动安装与设备识别
CH340N用的驱动和CH340系列一样,官方叫CH341SER。Windows 10、Windows 11系统一般插上就自动识别,不需要手动安装。老一点的Windows 7或XP需要去沁恒官网下载驱动,或者用驱动精灵之类的工具装一下。
Linux系统大部分发行版内核自带ch341驱动,插上模块后用lsusb命令能看到一行设备信息,VID是1a86,PID是7523,系统会在/dev目录下生成ttyUSB0节点。如果没有生成,可以执行dmesg | tail看内核日志,定位是枚举失败还是驱动没加载。
macOS新版本对CH340的支持也越来越好,大部分情况插上就能识别成USB-SERIAL CH340,在终端里ls /dev/cu.*就能看到对应设备。
识别之后,Windows下需要看一下设备管理器里的端口号,比如COM3或者COM5。如果端口号被其他程序占用,可以右键属性里手动改掉。经常调试多个设备的话,建议给不同模块分别设置固定的端口号,省得每次插拔都要重新看。
4.3 回环测试:验证收发功能
模块焊好、驱动装好之后,别急着接目标板,先做一个回环测试,这一步能排除掉绝大多数硬件问题。
回环测试的操作很简单:用一根杜邦线把模块的TXD和RXD短接起来,然后在电脑上打开串口调试助手,选择对应的COM口,波特率随便设一个,比如115200。发送一串字符,比如“hello”,如果模块工作正常,你会立刻在接收区收到同样的“hello”。这是因为数据从TXD发出去之后,通过杜邦线直接灌进RXD,芯片自己收回了自己发出去的数据,形成回环。
如果没有串口助手,用Python也可以。装好pyserial库后运行:
pip install pyserial python -m serial.tools.miniterm COM3 115200打开终端窗口后输入字符,能回显就说明通路没问题。
回环测试通过,说明USB枚举、芯片工作、TXD/RXD引脚都正常。这时候再接入目标MCU,把模块的TXD接MCU的RX1,模块的RXD接MCU的TX1,GND接GND,两边波特率设置一致,就能正常通信了。如果回环都不通,先别接设备,回头检查焊接和CC下拉。
5. 常见问题与排查速查
5.1 插上电脑完全没反应
这个问题的排查顺序非常重要,我按照概率从高到低排列:
| 现象 | 可能原因 | 检查方法 |
|---|---|---|
| 插上后电脑无插入提示,模块无电源灯 | CC下拉电阻缺失或没焊好 | 用万用表量Type-C母座CC1/CC2对地电阻,应该是5.1kΩ左右 |
| 同上 | Type-C线只有充电功能,没有数据线芯 | 换一根确定能传数据的Type-C线再试 |
| 同上 | 母座虚焊,特别是D+/D- | 补焊母座引脚,用放大镜逐个确认 |
| 出现“未知USB设备”或“设备描述符请求失败” | D+/D-接反或短路 | 对比原理图核对D+/D-走线,量UD+和UD-对地阻抗 |
| 枚举成功但打开COM口提示被占用 | 多个串口工具同时打开 | 关掉所有串口助手再重试 |
这里最坑的就是“纯充电线”。市面上很多Type-C线只接了电源和地,没有D+/D-或者接了但质量很差,插上模块电脑完全没反应。判断方法很简单:用这根线插一个标准U盘试试,如果电脑读不到U盘,那这根线就不能用来调试模块。
5.2 DTR/RTS缺失对自动下载的影响
CH340N没有DTR和RTS引脚,这对STM32用户影响不大,因为STM32的ISP下载只需要手动设置BOOT0到高电平,再复位一下就能进入Bootloader。但对于ESP32和ESP8266用户就麻烦了。
ESP32经典的一键下载电路是这样的:USB转串口芯片的RTS控制EN引脚,DTR控制GPIO0引脚,配合三极管和电容的时序,实现“自动复位并进入下载模式”。CH340N只有TXD和RXD,没有RTS/DTR,所以这个方案直接做不了。
解决方案有几种:
- 换用CH340C或CH340E,它们有RTS和DTR引脚,能做经典自动下载电路。
- 换用CH343系列芯片,CH343是沁恒更新的USB转UART芯片,自带DTR/RTS,封装也从SOP16到QFN都有,性能更强。
- 模块上手动加两个按键,一个BOOT(控制GPIO0),一个EN(复位),下载时按住BOOT再按一下EN,也能进下载模式。
- 直接用ESP32-C3或ESP32-S3这类自带USB的芯片,本身就是原生USB接口,不需要外部USB转串口芯片。
如果你是给ESP32做开发板,我个人建议直接选CH340C或者CH343,而不是CH340N。CH340N虽然体积小,但为了自动下载要额外加电路的话,反而省不了多少事。
5.3 通信乱码、丢包与稳定性优化
串口通信乱码的排查点也很典型。第一步检查波特率,发送端和接收端必须完全一致,最好用115200、9600这类标准波特率。第二步检查共地,模块和目标板之间除了TXD/RXD,一定要有一根GND线连接,否则电平参考点不一致,数据就是乱的。第三步检查供电,如果模块和目标板不是同一个电源,用万用表量一下两边GND之间的电压差,理论上应该是0V,如果超过0.3V就要考虑改善供电。
关于高波特率下的稳定性,我做了一块CH340N模块在921600波特率下长时间传输压力测试,发现USB线长度和Hub质量影响很大。不超过20cm的短线基本稳定,但如果用了劣质USB Hub或者2米以上的延长线,会出现偶发丢包。因此我的建议是:模块的排针尽量短,调试线尽量用带屏蔽的优质杜邦线,USB线优先选1米以内的数据线。
如果模块的供电纹波偏大,可以在VBUS上并联一个10μF陶瓷电容,然后在芯片VCC引脚对地再放一个0.1μF电容,这两个电容能显著改善稳定性。虽然CH340N对电源要求不算苛刻,但该给的去耦电容一定不能省。
5.4 设计层面的后续优化方向
如果这个模块不只是自己玩玩,而是要做成小批量或产品,有几点优化建议:
第一,在VBUS输入端加自恢复保险丝,额定电流500mA左右就够了,防止外部短路烧坏电脑USB口。第二,D+/D-上加ESD/TVS管,推荐USBLC6-2,这颗器件专门保护USB数据线,响应速度快,结电容低,不会影响信号。第三,在Type-C母座外壳处单独铺一小块PAD,通过过孔连到GND,增强静电泄放。第四,如果空间允许,把模块的四角做成邮票孔或者加定位孔,方便将来嵌进外壳。
做产品的朋友还会考虑CH340N的供货和价格。这颗芯片目前货源充足,零售价几块钱,批量价格更低,性价比非常高。京东、淘宝、立创商城都能买到,尽量在正规渠道买,避免买到翻新或打磨片。芯片丝印上会有型号和生产批次,可以简单核对一下。
我个人在产品设计上的一个建议是:如果目标板电压只有3.3V,CH340N的VCC就固定接3.3V,不要接5V。这样TXD输出的高电平就是标准的3.3V,不会给目标芯片带来任何压力。如果是给5V系统用,VCC接5V,RXD输入端能容忍5V,整体兼容性反而更好。把这个“跟随VCC”的特性用好了,CH340N几乎可以无缝对接市面上绝大多数MCU。
最后再分享一个我的小习惯:CH340N因为体积太小,引脚间距很密,打样回来我习惯先不焊排针,直接飞线接Type-C母座测试,确认PC能识别到COM口之后,再把排针焊上。这样万一芯片本身有问题或者焊错方向,拆起来损失小。另外,如果是做产品而不是自己做着玩,尽量把ESD和自恢复保险丝加上,热插拔场景下这几十颗元件的成本能帮你省下一堆售后。CH340N本身便宜、好买、驱动成熟,把外围电路做扎实,它就是一块非常省心的USB转串口“小钢炮”。