ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CH340驱动安装全攻略:Windows与Linux双平台避坑指南

CH340驱动安装全攻略:Windows与Linux双平台避坑指南 插上一块ESP32开发板电脑“叮咚”一声设备管理器里却跳出一个带黄色感叹号的未知设备——这个场景做过嵌入式开发的人估计十有八九都遇到过。更让人抓狂的是运行完驱动安装包后感叹号还在甚至直接变成了“代码10”或者“代码43”。这个报错对象十有八九就是CH340这颗USB转串口芯片。CH340几乎承包了市面上大部分低成本Arduino兼容板、ESP32开发板、3D打印机主板和USB转TTL模块的串口通信工作价格便宜、稳定可靠唯一的痛点就是驱动安装。Windows下容易翻车Linux下则是权限问题。这篇文章把我多年实战中踩过的坑和验证过的方案全部整理出来Windows和Linux双平台都覆盖照着做基本能一次搞定。1. 先弄清楚CH340是干什么的为什么安装驱动总会翻车1.1 一颗USB转串口芯片几乎处处可见CH340是南京沁恒WCH推出的一款USB转串口芯片。它的核心工作是把电脑USB接口的协议信号翻译成单片机开发板上常用的UART串口信号。你可以把它理解成一个“翻译官”电脑只会说USB单片机只会说串口两边想沟通中间必须有CH340这种人帮忙传话。正因为它太常见所以你会在这些设备上看到它Arduino Nano、Arduino UNO的兼容版大部分国产板子都用CH340G各种ESP32、ESP8266开发板DevKit类板载CH340C尤其多3D打印机主板很多用CH340做USB通信单独出售的USB转TTL模块比如那种几块钱的“CH340下载器”路由器刷机用的串口调试线CH340也不是唯一的选择市面上常见的USB转串口芯片还有CP2102、FT232、PL2303等。我做了一个对比表方便你看清各家特点芯片型号厂商是否内置晶振常见封装常见设备典型问题CH340G南京沁恒需要外置12MHz晶振SOP-16 / DIP-8Arduino Nano兼容板、老款ESP32板晶振虚焊会导致乱码或无法识别CH340C南京沁恒内置SOP-16ESP32 DevKit、新款开发板驱动基本一致更省心CP2102Silicon Labs内置QFN-28部分ESP32 DevKit、调试器驱动需要单独下载但也很稳FT232FTDI需要外置SOP-28高端调试器、USB转TTL模块价格贵市场上打磨片多容易触发FTDI“假冒检测”PL2303Prolific需要外置SOP-16老设备、老模块Win10以上新版驱动对旧款芯片不友好从这张表能看出CH340的优势主要体现在价格和易用性上。但“易用”并不等于“免折腾”接下来我们看驱动到底翻车在哪。1.2 驱动装不上的三个常见根源驱动包、签名策略、硬件先说第一个根源**驱动包本身就没选对。**不少朋友习惯用驱动精灵、360驱动大师这类工具一键安装但这类工具给CH340匹配的驱动版本很杂有时会给你的64位系统装个32位驱动有时会因为缓存原因装个老版本反而把系统搞乱。我不能说第三方工具完全没有用但遇到CH340这类芯片直接从官网下载驱动包手动安装是最干净、最可控的方式。第二个根源是Windows驱动程序签名策略。CH340官方发布的驱动包在正常情况下是经过数字签名的但有些场景下比如你的Windows 7没有开启自动更新、系统缺少“Microsoft根证书更新”组件或者你下载到的驱动包是网上转存下来的修改版系统可能弹出“Windows无法验证此驱动程序软件的发布者”。更麻烦的是新版的Windows会直接拦截未签名的驱动导致驱动虽然“安装成功”但设备管理器里依然是感叹号。第三个根源是硬件本身的问题这一条很多人没意识到。CH340芯片市场占有率太高市面上也存在不少兼容芯片、打磨片这些芯片虽然在硬件PIN脚上是兼容的但内部ID或配置信息和原厂有差异装原厂驱动时可能出现识别异常。另外开发板上CH340周边的晶振、电容虚焊或者板子的USB口DP/DM走线异常也会出现“驱动装上却用不了”的情况。所以驱动装不上时不能只盯着软件还得回头看看硬件。2. Windows平台下的完整安装流程下载、安装、验证一条龙2.1 驱动下载认准官网避开第三方驱动工具CH340的官方Windows驱动包叫“CH341SER.ZIP”在沁恒官网wch.cn的“下载中心”页面搜索CH340就能找到。这个压缩包名字看着叫CH341SER其实CH340和CH341是共用驱动包的不要以为下错了。下载后解压到本地你会看到这些主要内容CH341SER.INF、CH341SER.SYS、SETUP.EXE等文件还有DRIVER和x64两个子目录。DRIVER目录里是32位系统驱动x64里是64位系统驱动。这里顺便说一个我的习惯驱动包一定要存放在一个不会动的路径下再安装。我之前遇到过有人把压缩包放在桌面安装到一半他顺手清理桌面文件结果驱动装了一半停在“找不到文件”上。解压后放在D:\drivers\CH341SER这种位置装完先别删方便后面排查时再次使用。提示如果你的系统是Windows 11或新版Windows 10微软可能会在安装时提示“Windows已保护你的电脑”这是SmartScreen的拦截。点击“仍要运行”即可前提是你确认这个驱动包来自沁恒官网。2.2 设备管理器手动更新5个步骤装好CH340驱动我把整个手动安装流程总结成5个步骤亲测稳定适合在驱动自动安装失败后使用。第一步先插上设备打开设备管理器。把开发板或USB转TTL模块插到电脑的USB口推荐插主板后置USB口避开前置面板延长线和USB HUB。然后按Win X选择“设备管理器”或者按Win R输入devmgmt.msc回车。此时你应该能在“其他设备”下看到一个“USB2.0-Serial”或“未知设备”也可能直接在“端口(COM和LPT)”下看到带感叹号的“USB-SERIAL CH340”。第二步右键更新驱动选择手动浏览。在这个设备上右键选择“更新驱动程序”然后选择“浏览我的电脑以查找驱动程序”。第三步从磁盘安装。在下一个页面点击“让我从计算机上的可用驱动程序列表中选取”然后点“从磁盘安装”再点“浏览”定位到你解压的CH341SER目录。64位系统进入x64子目录32位系统进入DRIVER子目录选中CH341SER.INF文件点确定。注意不要直接在列表里找“USB-SERIAL CH340”因为这个列表只有在INF文件被正确加载后才会显示。如果选完INF后列表为空请检查你进入的子目录里是否有CH341SER.INF这个文件或者重新解压一次驱动包。第四步确认安装。系统会提示“Windows无法验证此驱动程序软件的发布者”这是正常的。如果你确认驱动来自官网点“仍要安装”。安装过程很快大概几秒钟。第五步刷新设备管理器检查端口。安装完成后设备管理器里的“端口(COM和LPT)”下应该出现“USB-SERIAL CH340 (COMx)”这里的COMx就是你的串口号。需要注意的是有些系统在安装完成后需要重新拔插一次USB线设备才会从未知设备变成正常的COM口。2.3 装完之后如何确认COM口正确出现才算成功很多人装完驱动看到设备管理器里没有感叹号就觉得万事大吉了但其实还有一个关键动作——确认串口号是否可用。状态说明处理方式设备管理器正常出现“USB-SERIAL CH340 (COM3)”安装成功直接可用进入下一步开发设备管理器无异常但Arduino IDE / Mixly / 串口助手里看不到端口可能是COM口号过大或被其他虚拟串口占用手动修改固定一个较小的COM号设备管理器出现感叹号或错误代码安装不完整或系统签名策略拦截按第5部分的方法排查设备管理器里完全看不到任何新设备USB物理连接有问题换线、换USB口或换一台电脑交叉验证手动修改COM号的方法是在设备管理器中右键“USB-SERIAL CH340 (COMx)”选择“属性”切到“端口设置”选项卡点“高级”在“COM端口号”下拉列表里选一个没冲突、数字也不太大的编号比如COM3、COM4然后确定。修改后重新拔插设备即可生效。之所以建议把COM号固定下来是因为不同USB口插入同一个设备时Windows可能给它分配不同的COM号导致你的上位机软件、烧录工具下次找不到串口。固定COM号以后插哪个口都稳定在同一个号上能省掉很多莫名其妙的问题。3. Linux平台内核自带驱动真正的坑在权限和设备名3.1 确认内核模块加载与设备节点生成Linux对CH340的支持其实非常成熟。从2.6.24内核开始驱动里就加入了ch341这个模块使用的设备节点名是/dev/ttyUSB0、/dev/ttyUSB1这种。很多发行版的内核还会同时使用cdc_acm模块所以插上CH340设备后一般不需要额外安装任何驱动。但这并不意味着插上就能用至少在你的程序能以非root身份访问它之前还差关键的几步。先把设备插上打开终端执行dmesg | tail -20正常情况下你会看到类似这样的输出usb 1-6: new full-speed USB device number 5 using xhci_hcd usb 1-6: New USB device found, idVendor1a86, idProduct7523 usb 1-6: New USB device strings: Mfr1, Product2, SerialNumber0 usb 1-6: Product: USB Serial ch341 1-6:1.0: ch341-uart converter detected usb 1-6: ch341-uart converter now attached to ttyUSB0其中idVendor1a86是沁恒的USB厂商IDidProduct7523是CH340芯片的默认产品ID。看到“now attached to ttyUSB0”就说明设备节点已经生成。如果dmesg里没有任何新输出可能是模块没有自动加载执行lsmod | grep ch341没结果的话就手动加载sudo modprobe ch341再通过ls -l /dev/ttyUSB*确认节点是否存在。如果节点存在说明驱动层面已经OK下一步解决权限。提示如果你用的是比较老的发行版内核版本低于2.6.24那么“免驱”就不成立了。这种系统建议直接升级内核或者手动编译驱动但说实话2025年还运行这么老内核的场景已经非常少了。3.2 dialout组权限一劳永逸解决读写权限刚插上设备时你可能发现ls -l /dev/ttyUSB0的权限是crw-rw---- root dialout也就是说只有root用户和dialout组成员才能读写。普通用户直接打开会遇到Permission denied。处理方法有两种先用临时的再用永久的。临时方法适合只测试一次sudo chmod 666 /dev/ttyUSB0这样当前用户马上就能读写但如果重新拔插设备权限会恢复原样。永久方法把你自己加入dialout组sudo usermod -aG dialout $USER执行完后必须注销重新登录或者重启电脑组权限才会生效。重新登录后可以用groups命令查看自己是否已经在dialout组里。加入组后重新拔插一次设备普通用户就能直接打开/dev/ttyUSB0了。这个dialout组的机制很多人第一次接触会踩坑我见过不少新手在Arduino IDE里看不到串口折腾半天其实是没加组、没重新登录。Linux的权限系统就是这么严格搞清楚它的规则以后反而会觉得安心。3.3 用udev规则固定串口名给设备发“身份证”解决了权限问题还有一个很实际的需求当你同时插着多个USB转串口设备时Linux分配ttyUSB0、ttyUSB1的顺序是不固定的有可能这次是ttyUSB0下次重启后变成ttyUSB1。对于PlatformIO这类需要固定设备路径的工具来说这就很影响自动化流程。解决办法是写一条udev规则根据USB设备的VID/PID给它固定一个符号链接比如/dev/ttyCH340。创建一个规则文件sudo nano /etc/udev/rules.d/99-ch340.rules写入下面这行内容KERNELttyUSB*, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, MODE0666, GROUPdialout, SYMLINKttyCH340解释一下每条字段的意思KERNELttyUSB*匹配所有ttyUSB设备ATTRS{idVendor}1a86校验USB厂商IDATTRS{idProduct}7523校验产品IDMODE0666表示权限对所有人可读写GROUPdialout把设备组归属到dialoutSYMLINKttyCH340则创建一个名为/dev/ttyCH340的符号链接。保存后重新加载规则并触发sudo udevadm control --reload-rules sudo udevadm trigger重新拔插设备执行ls -l /dev/ttyCH340看到链接指向ttyUSB0就成功了。以后不管串口号怎么变你的程序只需要打开/dev/ttyCH340就行。我自己在调试多块开发板时会针对每块板子写一条独立的udev规则有的板子用CH340有的是CP2102VID/PID各不相同但通过符号链接/dev/ttyESP32、/dev/ttyNano就能轻松区分再也不用反复看dmesg去猜哪个口是哪个设备了。4. 涉及自动下载和RTS/DTR从“装好驱动”到“能烧录”4.1 为什么ESP32/ESP8266串口烧录总卡在连接阶段驱动装好、串口也认出来了但烧录固件时依然可能失败最常见的报错是Failed to connect to ESP32: Timed out waiting for packet header这个问题和CH340驱动没关系但很多人会误以为是驱动问题所以我在这里一起说清楚。ESP32、ESP8266这类模组要进入下载模式需要在复位瞬间把IO0引脚拉低。为了让用户免去手动按按键的麻烦开发板厂商设计了一个自动下载电路利用CH340的DTR和RTS两个串口控制信号经过三极管反相后分别控制模组的EN复位引脚和IO0引脚。具体工作原理是PC端烧录工具先通过USB控制CH340的DTR/RTS电平翻转CH340将DTR/RTS引脚输出对应的电平信号再经过三极管反相和电平转换形成“先让IO0拉低、再给EN一个复位脉冲”的时序从而让模组进入下载模式。如果这个过程中某个环节断了——驱动没有正常配置DTR/RTS、三极管焊点虚焊、IO0上拉电阻缺失——那么就会一直卡在“connecting”状态。所以当你遇到烧录失败时除了检查接线TXD接RXD、RXD接TXD还要确认驱动是否真正支持并正确传递了DTR/RTS信号。大多数官方驱动是没问题的但如果你用的是“精简版”驱动或者通过第三方工具安装的驱动就可能出现DTR/RTS信号无法正常翻转的情况这时候请回到第2部分用官网驱动重装一遍。4.2 用代码和串口工具控制RTS/DTR电平验证自动下载电路很多人搜索“CH340如何置RTS电平”本质是想手动控制CH340的RTS引脚去验证自动下载电路是否正常。这里分两种情况说明。如果是在Python里通过串口库控制可以这样写import serial import time ser serial.Serial(/dev/ttyUSB0, 115200, timeout1) # DTR/RTS默认状态可能是False也可以单独设置 ser.setDTR(False) ser.setRTS(True) time.sleep(0.1) ser.setDTR(True) ser.setRTS(False) time.sleep(0.1) ser.close()用pyserial时setDTR()和setRTS()方法传入True或False控制的就是CH340芯片DTR和RTS引脚的实际电平输出。这个信号就是板子上自动下载电路的输入信号。另一种方式是用图形化串口工具。打开常见的串口调试助手界面上一般都会有DTR和RTS两个勾选框。你先勾选RTS观察板子对应引脚的电平是否变化再勾选DTR观察另一个引脚的变化。用万用表量一下就能确认三极管前的信号是否正常进而定位是驱动控制问题还是硬件电路问题。提示在操作时CH340芯片的DTR和RTS引脚是TTL电平默认空闲时高电平有效时低电平和USB端软件里勾选框的状态是联动关系。不同串口工具对勾选框状态的定义可能略有差异建议以万用表实测为准。4.3 回环测试1分钟定位串口收发是否正常有时候驱动安装没问题串口设备也显示正常但串口收发就是不对。比如你发字符串给设备设备没回应或者你短接TXD和RXD发送窗口发出去的数据收不回来。这种情况可能是线序接错、波特率不对也可能就是CH340本身有问题。最简单有效的验证方法是回环测试具体操作非常短平快先把USB转TTL模块或开发板上CH340的TXD和RXD引脚短接注意别短接VCC和GND只短接TXD和RXD。在电脑上用串口工具Windows用串口助手Linux用minicom或screen打开对应串口。发送一串测试数据比如“hello ch340”看接收区是否能收到同样的内容。如果能收到回显说明链路是通的电脑能发出去、CH340能正确转换、TXD/RXD短接后数据又原路返回。收不到回显的话就要逐段排查先检查驱动是否把波特率、数据位这些参数正确下发到CH340再检查物理连接是否牢固有条件时可以直接量TXD和RXD之间的通断。在Linux下用minicom做回环测试一条命令就能搞定minicom -D /dev/ttyUSB0 -b 115200打开minicom后直接敲几个字符屏幕上如果能看到自己敲的字符说明回环正常。退出minicom时按CtrlA松开后再按X选择退出即可。5. 安装失败排查实录设备管理器报错与硬件陷阱速查5.1 从代码10到代码43典型报错与处理思路Windows设备管理器里CH340相关设备最常见的错误代码就那么几个我把它们整理成一张速查表方便你遇到问题时直接对照处理错误代码常见含义处理思路代码28设备的驱动程序未安装手动指向CH341SER驱动位置重新安装代码10设备无法启动卸载设备勾选删除驱动软件后重启换USB口再重装驱动代码43Windows已停止这个设备因为它报告了问题优先怀疑供电不足、线材故障、USB控制器异常换线换口先行验证代码56Windows仍在设置此设备的类配置卸载其他虚拟串口驱动清理系统后再试代码10和代码43是两个最容易反复出现的问题。代码10多数发生在“驱动文件安装成功但底层初始化失败”时常见原因包括主板USB控制器驱动异常、电脑处于省电模式导致USB端口供电异常、驱动版本和芯片不匹配。处理步骤可以按这个顺序来在设备管理器里右键设备卸载设备并勾选“删除此设备的驱动程序软件”。重启电脑这一步比你想的重要很多驱动底层服务需要重启才能恢复。换一个USB口尽量插USB 2.0口很多USB 3.0控制器的兼容性问题会在这一步被排除。重新按第2部分的流程安装驱动。代码43就要特别注意“供电”两个字。CH340本身工作电流不大但如果板子上还带着其他外设USB口供电一旦不稳就容易触发代码43。处理方法是拔掉板上所有不相关的外设把板子单独插到主板后置USB口再试一次。如果问题依旧换一根短一点的数据线很多劣质线材的内阻大插上去电压就被拉低了。5.2 其他容易被忽略的硬件层面问题除了报错代码还有几个硬件层面的坑我单独列出来因为它们很容易被误判为驱动问题。数据线问题有些Type-C线是纯充电线里面根本没有数据线芯有些Micro-B线老化后数据线芯断了。插上设备后系统毫无反应十有八九是这种线。你可以换一根支持数据传输出名的线最好是手机自带的那种品牌原装线。USB HUB问题不带独立供电的USB HUB在连接多个设备时供电能力下降明显CH340设备插在HUB上很可能出现时好时坏的情况。遇到疑难杂症尽量把设备直插主机USB口。静电问题冬天干燥环境下手碰到USB金属外壳可能导致静电放电设备枚举失败表现就是插上后系统“叮咚”一声又“叮咚”一声反复识别失败。解决办法是关掉电脑电源按住开机键几秒钟放掉残余电荷再重新开机。晶振虚焊老款CH340G芯片需要外置12MHz晶振和两个谐振电容如果开发板在运输过程中被磕碰晶振虚焊就会导致CH340完全无法枚举或者虽然枚举成功但串口数据全是乱码。你可以观察晶振旁边的两个小电容是否完好或者用放大镜看焊点但最直接的测试还是回环收发测试。第三方驱动残留如果你之前用驱动精灵等工具装过CH340而后又手动装官方驱动系统里可能残留了两套驱动文件导致设备管理器里出现两个带感叹号的设备。处理方式是先用设备管理器把所有带感叹号的CH340相关设备全部卸载勾选删除驱动程序软件然后重启电脑再重新安装官方驱动。兼容芯片打磨片市面上有部分CH340兼容芯片在VID/PID上和原厂一致但固件配置有差异装上官方驱动后可能显示正常但打开串口就崩溃。这种问题几乎无法通过软件手段完全解决建议更换一块口碑较好的开发板交叉验证一下别在原板上死磕。最后再分享一个小技巧我在实际使用中养成的习惯是把CH341SER这个驱动压缩包同时保存一份在自己的网盘和本地目录里不要只依赖官网链接。官网有时候会调整下载中心的结构或者你手头正好是一台断网的新电脑这时候本地备份就能应急。另外装驱动时我习惯先插设备、再打开设备管理器看未知设备然后手动指向驱动位置而不是先双击运行安装包再插设备。虽然两条路径都能成功但手动指向这个方式能让你清楚看到系统识别硬件的完整过程一旦出问题排查起来会更直观。驱动问题的本质其实是操作系统、芯片厂商和硬件板卡三方协作的产物。你理解了这层关系以后再遇到任何USB转串口芯片的驱动问题都不会再慌乱了——无非是驱动包对不对、签名过不过、硬件通不通这三件事罢了。
返回列表