ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CH340驱动安装全攻略:Windows与Linux串口调试指南

CH340驱动安装全攻略:Windows与Linux串口调试指南 1. 为什么CH340这颗小芯片值得单独写一篇安装攻略搞嵌入式、玩单片机、做串口调试的人手里大概率都躺着几根USB转串口线或者几块开发板而CH340几乎是这些设备里出现频率最高的USB转串口芯片。它便宜、外围电路简单、兼容性好从几十块的Arduino兼容板到各种ESP8266、ESP32、STM32最小系统板到处都能见到它的身影。但就是这么一颗不起眼的小芯片却让无数人在驱动安装这一步卡住——插上电脑没反应、设备管理器里出现黄色感叹号、串口工具里找不到端口、Linux下权限不够打不开设备这些问题几乎每个新手都要踩一遍。这篇内容就是把我这些年折腾CH340驱动安装的经验完整梳理一遍覆盖Windows和Linux两大平台把安装步骤、原理说明、常见问题排查都讲清楚。不管你是刚拿到第一块开发板的新手还是换了新电脑、新系统之后发现串口用不了的老手都能在这里找到可以直接抄作业的方案。我会尽量把每一步为什么这么做讲明白而不是只丢几个命令让你照敲——因为只有理解了原理遇到变种问题的时候你才能自己判断。先明确一个核心概念CH340是USB转串口芯片它负责把电脑的USB信号转换成单片机能识别的TTL串口信号。电脑要跟它通信就必须有对应的驱动程序让操作系统知道“这个USB设备是一个串口应该用串口的方式跟它对话”。Windows和Linux对这个事情的处理方式完全不同这也是为什么同一个设备在两个系统下表现差异巨大的根本原因。2. Windows平台CH340驱动安装全流程2.1 先搞清楚你的设备到底是不是CH340很多人一插上设备发现没反应就默认是CH340然后开始装驱动结果装了半天发现芯片其实是CP2102或者FT232白忙一场。所以第一步永远是确认芯片型号。最直接的办法是看设备管理器。右键“此电脑”或者“开始菜单”里的计算机图标选择“管理”然后点“设备管理器”。插上你的USB转串口设备观察设备管理器里有没有新出现的条目。如果驱动没装好通常会出现在两个位置一个是“其他设备”下面显示为“USB2.0-Serial”或者带黄色感叹号的未知设备另一个是在“端口”下面但可能显示为“USB-SERIAL CH340”后面带感叹号。如果设备管理器里显示的是“USB2.0-Serial”那基本可以确定是CH340或者它的兼容型号。如果显示的是“Silicon Labs CP210x”那就是CP2102显示“FTDI”那就是FT232这些芯片的驱动完全不同不要混装。还有一个办法是看设备本身的丝印。很多USB转串口线的小板子上会直接印芯片型号开发板的话可以看原理图或者商品页面。CH340的封装通常是SOP-16引脚比较密集旁边一般会有一个12MHz的晶振。注意市面上有一些CH340的兼容芯片比如CH341、CH9102等它们的驱动跟CH340是同一套或者兼容的但CH341在并口模式下用法不同CH9102则需要更新的驱动版本。如果装完CH340驱动还是不能用可以查一下芯片具体型号。2.2 驱动下载官网和第三方渠道怎么选确认是CH340之后下一步就是找驱动。最靠谱的来源是芯片原厂的官方网站搜索“CH340驱动”就能找到下载页面。官网驱动的好处是版本最新、没有捆绑、数字签名完整缺点是下载速度有时候比较慢而且页面全是中文对不熟悉的人可能有点懵。第三方渠道比如各种开发板商家的网盘、论坛附件、驱动精灵之类的工具优点是方便缺点是版本参差不齐有些甚至是好几年前的旧版本装上去可能跟新系统不兼容。更麻烦的是有些第三方驱动包会捆绑其他软件装完发现多了一堆没用的东西。我的建议是优先从官网下载。如果官网实在下不动可以找信誉好的开发板商家提供的驱动包但装之前最好看一下文件日期和版本号。CH340驱动目前的版本号一般是3.x开头如果看到1.x或者2.x的版本那基本是十年前的老古董了在Windows 10/11上大概率出问题。下载下来通常是一个压缩包解压之后会看到几个文件夹分别对应不同的系统版本。32位系统选x86文件夹64位系统选x64文件夹。现在绝大多数电脑都是64位了直接选x64就行。2.3 安装步骤从手动安装到自动安装CH340驱动的安装方式有两种一种是运行安装程序自动安装另一种是通过设备管理器手动指定驱动。两种方式各有适用场景我一般推荐先试自动安装不行再手动。自动安装很简单解压后找到SETUP.EXE或者类似的安装程序双击运行一路下一步就行。安装程序会把驱动文件复制到系统目录并且注册到驱动库里。装完之后重新插拔一下设备正常情况下设备管理器里就会出现“USB-SERIAL CH340”的端口了。但自动安装有时候会失败尤其是在Windows 10/11上因为系统的驱动签名策略越来越严格。如果自动安装之后设备管理器里还是黄色感叹号那就需要手动安装。手动安装的步骤稍微多一点在设备管理器里右键那个带感叹号的设备选择“更新驱动程序”然后选“浏览我的电脑以查找驱动程序”接着指向你解压出来的驱动文件夹。注意这里要选到具体的文件夹比如x64文件夹而不是压缩包的根目录。系统会自动搜索匹配的inf文件找到之后点击安装。安装过程中可能会弹出“Windows无法验证此驱动程序软件的发布者”的警告这是因为驱动没有微软的WHQL签名。CH340的官方驱动通常是有签名的但如果用的是旧版本或者第三方修改版就可能遇到这个提示。这时候选择“始终安装此驱动程序软件”就行。实操心得如果手动安装时系统提示“找不到适用于你设备的驱动程序”大概率是inf文件选错了。CH340的驱动包里通常有多个inf文件对应不同的芯片型号比如CH341SER.INF是给CH340/CH341用的CH343SER.INF是给CH343用的。选错了就装不上。2.4 Windows 11下的特殊问题和解决办法Windows 11对驱动签名的要求比Windows 10更严格而且默认开启了“内存完整性”等安全功能这些都会影响CH340驱动的安装。我实测下来Windows 11上最常见的问题是驱动装上了设备管理器里也显示正常但串口工具就是打不开端口或者打开之后立刻报错。这个问题的根源通常是驱动版本太旧。Windows 11需要3.8以上版本的CH340驱动如果你用的是开发板商家送的驱动包很可能是3.5甚至更早的版本。解决办法就是去官网下载最新驱动重新安装。另一个常见问题是Windows 11的“快速启动”功能会导致串口设备在系统休眠后无法唤醒。表现是电脑休眠再唤醒之后串口工具里找不到端口了必须重新插拔USB线才行。这个问题的解决办法是在控制面板的电源选项里关闭“快速启动”或者干脆不让电脑休眠。还有一个比较隐蔽的问题某些Windows 11的更新会重置驱动签名策略导致之前装好的CH340驱动突然失效。表现是设备管理器里设备变成黄色感叹号属性里显示“该设备的驱动程序未被安装代码28”。遇到这种情况重新手动安装一遍驱动就行不需要卸载重装。2.5 验证驱动是否真正安装成功驱动装完不代表就能用了还需要验证一下。最直接的办法是打开设备管理器看“端口COM和LPT”下面有没有“USB-SERIAL CH340COMx”。如果有而且没有黄色感叹号那基本就是成功了。记下这个COM号后面串口工具里要选这个端口。然后可以用串口调试助手之类的工具测试一下。打开工具选择对应的COM口波特率一般选115200或者9600打开串口。如果工具没有报错说明驱动和端口都正常。如果报错“拒绝访问”或者“端口不存在”那说明驱动还有问题。更彻底的验证方法是做一次回环测试把USB转串口模块的TX和RX短接然后用串口工具发送数据如果收到的数据和发送的一样说明整个链路都通了。这个测试能排除串口工具本身的问题确认驱动和硬件都没毛病。3. Linux平台CH340驱动安装与配置3.1 Linux内核自带驱动好消息和坏消息Linux跟Windows最大的不同在于CH340的驱动是集成在内核里的。也就是说绝大多数现代Linux发行版Ubuntu、Debian、CentOS、Fedora等都不需要你手动安装驱动插上设备就能识别。这个驱动模块叫ch341因为CH340和CH341共用一套驱动代码。好消息是不用装驱动坏消息是“能用”和“好用”之间还有距离。Linux下CH340最常见的问题不是驱动缺失而是权限问题。普通用户默认没有权限访问串口设备所以串口工具会报“Permission denied”或者“无法打开端口”。验证驱动是否加载很简单插上设备之后在终端里运行lsmod | grep ch341如果输出里有ch341和usbserial说明驱动已经加载了。再用dmesg | tail -20看一下内核日志应该能看到类似“ch341-uart converter now attached to ttyUSB0”的信息。这里的ttyUSB0就是设备节点相当于Windows下的COM口。如果lsmod没有输出说明驱动没加载。可以手动加载sudo modprobe ch341然后再插拔设备试试。如果还是不行可能是内核编译时没有包含这个模块需要重新编译内核或者安装对应的内核模块包。不过这种情况在主流发行版上很少见。3.2 权限配置让普通用户也能用串口Linux下串口设备的默认权限是root用户可读写普通用户只能看不能碰。每次用串口都要sudo不仅麻烦而且很多串口工具用sudo运行会有其他问题比如图形界面工具用sudo会报错。解决办法是把你的用户加到dialout组里。dialout组是Linux下专门管理串口设备的用户组加入这个组之后就有权限访问串口了。命令是sudo usermod -aG dialout $USER注意这里的$USER是你的用户名直接复制这条命令就行shell会自动替换。执行完之后需要注销重新登录或者重启电脑组权限才会生效。有些发行版比如Arch Linux用的是uucp组而不是dialout组可以先看一下/dev/ttyUSB0的所属组ls -l /dev/ttyUSB0输出里会显示所属的用户和组把你自己加到对应的组里就行。还有一种临时方案是直接改设备权限sudo chmod 666 /dev/ttyUSB0但这种方法每次插拔设备都会失效因为设备节点是动态创建的所以只适合临时用一下。注意有些Linux发行版默认没有dialout组或者组名不一样。如果usermod报错说组不存在可以先创建组sudo groupadd dialout然后再加用户。3.3 用udev规则固定设备名Linux下串口设备的命名是动态的今天插上是ttyUSB0明天可能就变成ttyUSB1了。如果你同时用多个串口设备或者经常插拔这个命名变化会很烦人——脚本里写死了ttyUSB0结果设备变成ttyUSB1脚本就挂了。解决办法是用udev规则给设备起一个固定的名字。udev是Linux的设备管理器可以根据设备的属性比如序列号、厂商ID、产品ID来创建自定义的设备节点。先查一下设备的属性udevadm info --attribute-walk --name/dev/ttyUSB0输出里会有一大堆信息重点关注ID_VENDOR_ID和ID_MODEL_ID。CH340的厂商ID通常是1a86产品ID是7523。如果多个CH340设备同时使用还需要看序列号ATTRS{serial}来区分。然后创建一个udev规则文件sudo nano /etc/udev/rules.d/99-ch340.rules内容如下SUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, SYMLINKttyCH340_0这条规则的意思是当系统检测到厂商ID为1a86、产品ID为7523的tty设备时创建一个名为ttyCH340_0的符号链接。以后不管系统分配的是ttyUSB0还是ttyUSB1你都可以用/dev/ttyCH340_0来访问。如果有多个CH340设备可以用序列号区分SUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, ATTRS{serial}ABCD1234, SYMLINKttyCH340_A保存之后重新加载udev规则sudo udevadm control --reload-rules sudo udevadm trigger然后重新插拔设备用ls /dev/ttyCH340*看一下符号链接有没有创建成功。3.4 Linux下常用串口工具和配置Linux下的串口工具选择比Windows多常用的有minicom、picocom、screen、cu等。我个人最推荐picocom因为它轻量、简单、退出方便。安装picocomsudo apt install picocom使用picocom -b 115200 /dev/ttyUSB0-b参数指定波特率后面跟设备路径。退出picocom的快捷键是CtrlA然后CtrlQ这个组合键跟screen有点像但更简单。minicom功能更全但配置稍微复杂一点第一次用需要先配置串口参数sudo minicom -s进入配置界面选择“Serial port setup”设置设备路径和波特率保存退出。之后用sudo minicom直接打开。screen也可以用来做串口终端screen /dev/ttyUSB0 115200退出是CtrlA然后K再按Y确认。如果只是临时发几条命令用echo和cat也行echo hello /dev/ttyUSB0 cat /dev/ttyUSB0但这种方式不能交互只适合脚本里用。4. 常见问题排查与速查表4.1 Windows下设备管理器有感叹号怎么办这是最常见的问题原因有好几种可能。先看感叹号设备的属性里面会有一个错误代码根据代码来判断错误代码含义解决办法代码10设备无法启动卸载设备后重新插拔让系统重新枚举代码28驱动未安装手动指定驱动文件夹安装代码43设备报告故障换USB线或换USB口可能是硬件问题代码52驱动签名验证失败下载最新官方驱动或临时禁用驱动签名强制代码10通常是因为驱动装了一半没装完或者设备状态卡住了。解决办法是在设备管理器里右键卸载设备勾选“删除此设备的驱动程序软件”然后拔掉USB线重新插上让系统重新识别。代码28就是驱动没装好按照前面手动安装的步骤重新装一遍。代码43比较麻烦可能是USB线质量差、供电不足、或者芯片本身坏了。先换一根线试试再换一个USB口最好插在主板后面的USB口不要用前面板或者USB Hub。代码52是Windows 10/11特有的因为驱动没有微软签名。CH340官方驱动是有签名的如果遇到这个错误说明你用的驱动版本太旧或者被修改过。去官网下载最新版就行。4.2 串口工具找不到端口怎么排查驱动装好了设备管理器里也显示正常但串口工具里就是找不到端口。这个问题通常有几个原因第一串口工具本身的问题。有些老版本的串口助手不支持Windows 11或者需要以管理员身份运行。试试换一个工具比如SSCOM、XCOM、或者VS Code的串口插件。第二端口被其他程序占用了。Windows下同一个COM口只能被一个程序打开如果之前打开串口的程序没有正常关闭端口就会被占用。解决办法是关掉所有可能用串口的程序或者在设备管理器里禁用再启用设备。第三COM口号冲突。有些虚拟串口软件会占用COM号导致CH340分配不到可用的COM号。可以在设备管理器的端口属性里手动指定一个没被占用的COM号。第四USB线只有充电功能没有数据功能。这种线插上之后设备能供电但电脑识别不到USB设备。换一根确定能传数据的线试试。4.3 Linux下Permission denied的几种解法Linux下打开串口报“Permission denied”是最常见的问题根本原因就是权限不够。解决办法前面已经说了把用户加到dialout组。但有时候加了组还是不行那可能是以下几个原因一是组权限没生效。usermod加组之后必须重新登录才生效如果只是关掉终端再打开组信息还是旧的。可以运行groups命令看一下当前用户所属的组确认dialout在列表里。二是设备节点的组不对。有些发行版或者自定义的udev规则会把设备节点的组设成别的比如root或者uucp。用ls -l /dev/ttyUSB0看一下实际的组然后把用户加到对应的组里。三是SELinux或者AppArmor的限制。某些安全增强的Linux发行版会限制普通用户访问设备文件即使权限对了也会被安全模块拦截。可以临时禁用SELinux测试一下sudo setenforce 0。如果禁用之后能用了就需要配置SELinux策略而不是简单改权限。四是ModemManager在捣乱。ModemManager是Linux下管理移动宽带设备的服务它会自动扫描串口设备有时候会把CH340当成调制解调器然后占用端口。表现是插上设备之后ttyUSB0出现又消失或者打开串口时报“Device or resource busy”。解决办法是卸载或者禁用ModemManagersudo systemctl stop ModemManager sudo systemctl disable ModemManager或者加一条udev规则让ModemManager忽略CH340设备SUBSYSTEMtty, ATTRS{idVendor}1a86, ENV{ID_MM_DEVICE_IGNORE}14.4 CH340预安装成功但设备不能用“预安装成功”是Windows驱动安装程序的一个提示意思是驱动文件已经复制到系统里了但还没有跟具体的设备关联。这个提示本身不代表安装完成还需要插上设备让系统实际加载驱动。如果预安装成功之后插上设备还是不能用可能是以下几个原因一是设备根本没被识别。换USB线、换USB口试试确认设备本身是好的。可以在另一台电脑上测试或者用USB电流表看一下设备有没有正常供电。二是驱动版本跟系统不匹配。预安装的驱动可能是32位的但系统是64位的或者反过来。去官网下载对应系统架构的驱动重新安装。三是系统里有多个版本的CH340驱动冲突。Windows会优先加载版本号高的驱动但如果旧版本驱动残留了注册表项可能会导致加载失败。解决办法是在设备管理器里卸载设备时勾选“删除驱动程序软件”然后重新安装。四是USB Selective Suspend导致的。Windows的USB选择性暂停功能会在设备空闲时切断供电导致设备掉线。可以在电源选项里禁用USB选择性暂停控制面板→电源选项→更改计划设置→更改高级电源设置→USB设置→USB选择性暂停设置→禁用。4.5 常见问题速查表现象可能原因排查步骤解决办法设备管理器无反应USB线或接口问题换线换口测试更换数据线或USB口黄色感叹号代码28驱动未安装查看设备属性手动安装官方驱动黄色感叹号代码52驱动签名问题查看驱动版本下载最新签名驱动串口工具找不到端口端口被占用或驱动异常检查设备管理器关闭占用程序或重装驱动Linux Permission denied用户不在dialout组运行groups命令加入dialout组并重新登录Linux设备名变化动态分配ttyUSBx查看dmesg日志配置udev规则固定名称打开串口报Resource busyModemManager占用查看系统服务禁用ModemManager数据传输乱码波特率不匹配检查两端波特率统一波特率设置设备频繁掉线USB供电不足换USB口测试用主板后置USB口或带供电Hub5. 跨平台经验总结与进阶技巧5.1 不同系统下的驱动策略差异Windows和Linux对CH340的处理方式反映了两个系统在驱动模型上的根本差异。Windows采用“驱动与设备分离”的模式驱动需要单独安装系统通过INF文件来匹配设备和驱动。这种模式的好处是驱动可以独立更新不依赖系统内核版本坏处是驱动管理复杂容易出现版本冲突和签名问题。Linux采用“驱动集成在内核”的模式CH340驱动是内核源码的一部分随内核一起编译和发布。好处是即插即用不需要单独安装驱动坏处是驱动版本跟内核版本绑定老内核可能不支持新芯片新内核可能改了接口导致老工具不兼容。理解这个差异之后遇到问题的排查思路就清晰了。Windows下出问题优先查驱动版本和签名Linux下出问题优先查权限和内核模块。5.2 虚拟机环境下的CH340使用很多人会在虚拟机里用CH340比如在Windows主机上跑Linux虚拟机做开发。虚拟机环境下CH340的问题又不一样因为USB设备需要从主机透传给虚拟机。VMware和VirtualBox都支持USB透传但默认可能没有开启。在VMware里需要在虚拟机设置里添加USB控制器然后选择“显示所有USB输入设备”。插上CH340之后虚拟机会弹窗问你是连接到主机还是虚拟机选择虚拟机。如果没弹窗可以在虚拟机菜单里手动选择“可移动设备”→CH340→连接。VirtualBox类似需要在虚拟机设置里启用USB控制器然后添加USB设备过滤器。过滤器的厂商ID填1a86产品ID填7523这样插上CH340就会自动透传给虚拟机。虚拟机下CH340的常见问题是透传之后主机就看不到设备了这是正常的因为USB设备同一时间只能被一个系统占用。如果需要主机和虚拟机同时用只能插两个CH340设备。还有一个坑是虚拟机休眠或者挂起之后USB透传会断开恢复之后需要重新连接设备。如果虚拟机里跑着长时间运行的串口任务建议关闭虚拟机的自动挂起功能。5.3 用Python和pyserial做自动化测试如果你需要批量测试CH340设备或者做自动化串口通信Python的pyserial库是最方便的选择。安装很简单pip install pyserial基本用法import serial import time ser serial.Serial(/dev/ttyUSB0, 115200, timeout1) time.sleep(2) # 等待设备初始化 ser.write(bhello\n) response ser.readline() print(response) ser.close()Windows下把设备路径换成COM口就行比如COM3。pyserial会自动处理不同系统的差异。做回环测试的话把TX和RX短接然后import serial ser serial.Serial(COM3, 115200, timeout1) test_data btest123 ser.write(test_data) received ser.read(len(test_data)) print(发送:, test_data) print(接收:, received) print(结果:, 通过 if received test_data else 失败) ser.close()这个脚本可以直接用来验证驱动和硬件是否正常。如果发送和接收一致说明整个链路没问题如果不一致或者超时说明驱动、线序、或者硬件有问题。5.4 硬件层面的排查技巧软件层面排查完了还是不行就要看硬件了。CH340的典型电路很简单USB接口的D和D-接到芯片的UD和UD-VCC和GND供电TXD和RXD接单片机的串口XI和XO接12MHz晶振。用万用表测一下几个关键点VCC对GND应该是5V或者3.3V取决于模块设计晶振两端应该有1V左右的直流偏置电压用示波器能看到12MHz正弦波TXD在空闲状态应该是高电平3.3V或5V。如果VCC正常但晶振不起振可能是晶振坏了或者负载电容不匹配。CH340的晶振负载电容通常是20pF到30pF如果电容太大或太小晶振可能不起振。表现是设备插上电脑完全没反应设备管理器里连未知设备都不出现。如果TXD空闲时是低电平可能是芯片坏了或者单片机把TXD拉低了。先断开单片机的连接单独测CH340模块如果TXD还是低电平那芯片大概率坏了。USB线的问题也很常见。有些线只有充电功能D和D-根本没接。用万用表测一下USB线的D和D-通断或者直接换一根确定能传数据的线。实操心得我遇到过好几次CH340时好时坏的问题最后发现是USB接口松动导致的。特别是开发板上的Micro USB或者Type-C接口插拔次数多了之后焊盘容易开裂表现就是动一下线就掉线。这种问题只能重新焊接或者换接口。5.5 驱动安装的自动化脚本如果你经常需要在新电脑上装CH340驱动可以写一个自动化脚本省事。Windows下可以用PowerShell# 以管理员身份运行 $driverPath C:\drivers\CH340\x64 pnputil /add-driver $driverPath\CH341SER.INF /installpnputil是Windows自带的驱动管理工具/add-driver添加驱动到驱动库/install立即安装。这个命令比手动点设备管理器快多了适合批量部署。Linux下更简单因为驱动是内核自带的只需要配置权限#!/bin/bash # 添加当前用户到dialout组 sudo usermod -aG dialout $USER # 创建udev规则 echo SUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, SYMLINKttyCH340, MODE0666 | sudo tee /etc/udev/rules.d/99-ch340.rules # 重新加载udev规则 sudo udevadm control --reload-rules sudo udevadm trigger echo 配置完成请重新登录使组权限生效这个脚本做了两件事把用户加到dialout组创建udev规则让设备节点自动创建符号链接并设置权限为0666所有用户可读写。MODE0666这一条其实有点粗暴因为它让所有用户都能访问串口安全性稍差但在开发环境下很方便。5.6 关于CH340的选型和替代方案CH340虽然便宜好用但也有一些局限性。比如它的最高波特率是2Mbps对于高速通信场景可能不够用它的USB协议实现是软件模拟的CPU占用率比硬件实现的芯片高它在某些系统上的兼容性不如FT232和CP2102稳定。如果项目对稳定性要求高可以考虑FT232RL或者CP2102。FT232的驱动成熟度最高几乎不会出问题但价格是CH340的好几倍。CP2102介于两者之间性能和价格比较平衡。如果只是做普通的串口调试CH340完全够用。它的性价比无可替代而且经过这么多年的迭代驱动已经相当成熟了。只要按照正确的步骤安装驱动遇到问题知道怎么排查CH340可以很稳定地工作。我个人在实际操作中的体会是CH340的问题90%都出在驱动安装和权限配置上真正硬件损坏的比例很低。所以遇到问题不要急着换芯片先把驱动和权限排查一遍大概率能解决。另外手边常备一根确定能用的USB数据线和一块确定能用的CH340模块排查问题的时候可以用来交叉验证能省很多时间。
返回列表