简介:一套围绕CH341芯片USB转并行接口的完整资料包,面向电子工程师、嵌入式爱好者及需要让老式并行设备接入现代电脑的用户。压缩包共90个文件,约6.71MB,包含CH341芯片说明书、驱动/配置程序、VC++工程源码(cpp/h文件)、已编译的exe与dll,以及dsp/dsw/mak/rc等工程配置和pch/idb/pdb/bsc等调试信息,资源目录层次清晰,代码结构完整,便于直接阅读与编译调试,适合快速了解芯片驱动框架并进行二次开发。程序基于MFC对话框实现,内容预览中可见并行口控制、I2CSPage、EeprPage、MemPage等多个功能页签,可辅助理解CH341在SPP/EPP/ECP工作模式下的数据转换流程,以及USB串行数据与并行设备之间的交互机制。它能帮助修复缺乏USB接口的老式打印机、扫描仪,也能为数据采集、仪器仪表连接等应用提供软硬件参考;使用时需正确安装驱动并在设备管理器中完成配置。目前已有341人学习浏览,对研究USB转并口方案或维护老旧并行外设的读者而言,是难得的实践素材。
1. CH341PAR 是什么:一个驱动包,为什么总在“老设备续命”话题里出现
CH341PAR 是沁恒微电子 CH341 芯片在并口(Parallel Port)模式下的 Windows 驱动/工具包,常见打包名就是“CH341PAR.rar”。它的价值很直接:现代主板基本不配并口了,但很多老烧录器、并口 JTAG 调试器、老式打印机、甚至某些实验室治具还在用 LPT 并口,CH341 芯片通过 USB 转出一个“可编程的并口”,而 CH341PAR 驱动就是让系统认到这个转换结果的那座桥。注意它和更常见的 CH340 串口驱动不是一回事,和 CH341A 编程器用的 SPI 模式也不是一回事,很多人在这里翻车。适合谁?BIOS 维修、老外设玩家、嵌入式调试工程师,以及手里还攥着一堆并口工具的从业者。
2. 先分清 CH341 的三种工作模式:为什么并口模式要单独装 CH341PAR
2.1 同一个芯片,三种身份
CH341 是一颗 USB 总线转接芯片,但它不是只干一件事。硬件上,这颗芯片可以通过引脚配置工作在几种不同模式,系统侧看到的设备类型也完全不同。
第一种是串口模式。芯片被枚举成一个 USB 转串口设备,系统里多出一个 COM 口,对应驱动一般是 CH340/CH341 串口驱动。很多 USB 转 TTL 下载线、老旧单片机的 ISP 下载器用的是这个模式。
第二种是并口模式。芯片被枚举成一个并口设备,CH341PAR 驱动就是为这个模式准备的。系统里会出现一个带“CH341”或“并口”字样的端口,应用层通过厂商提供的 CH341DLL 来读写它的数据总线和控制线。
第三种不是标准系统端口,而是让应用层直接通过 DLL 控制芯片的引脚时序,常见于 CH341A 编程器做 SPI Flash 读写。这种情况下系统里可能只看到一个“未知 USB 设备”或者一个 COM 口,真正干活的是编程器软件和 CH341DLL,CH341PAR 根本不需要管。
所以问题来了:你拿到一个 CH341 模块,不能默认装 CH341PAR 就行。先确认它处于并口模式,否则驱动装了也匹配不上。
2.2 CH341PAR 和 CH340 驱动为什么总被搞混
CH340 和 CH341 是两颗不同的芯片,但包装、丝印、模块外观都经常撞脸。很多商家把 CH341 芯片也画成和 CH340 一样的开发板,引脚兼容性又做得差不多,用户插上电脑后习惯性地找“CH340 驱动”,结果设备确实能识别成 COM 口,于是以为搞定了。
但 CH341PAR.rar 里的东西和串口驱动完全不同。CH341PAR 的驱动文件是 CH341PAR.SYS,安装描述文件是 CH341PAR.INF,匹配的是并口模式的硬件 ID;而串口驱动匹配的是串口模式的硬件 ID。硬件 ID 对不上,系统直接拒绝安装。
更隐蔽的是第三种情况。很多廉价 CH341A 编程器,默认模式就是让应用层通过 DLL 直接访问 SPI 引脚,系统里不出现标准并口,也不会出现标准串口,只有插上后设备管理器冒出一个“CH341”或者干脆是未知设备。这时候你拿 CH341PAR.rar 去装,大概率只能得到一个黄色感叹号。
判断方法不复杂:只要设备管理器里出现的是 COM 口,说明当前是串口模式;出现带 CH341 字样的并口/打印机端口,说明是并口模式;出现未知设备或厂商自定义名,多半是应用层模式。只有第二种情况才轮到 CH341PAR。
2.3 拿到一个未知模块,怎么快速判断该装哪个驱动
我一般按下面四个步骤来,能省掉至少半小时的试错:
一看芯片丝印。CH341A、CH341B 这类丝印是 CH341;CH340G、CH340C 是 CH340。两者虽然功能有交叉,但并口模式只有 CH341 才有。
二看模块引出的接口。如果板子上有明显的 DB25 并口头,或者排针标注了 D0-D7、WR、RD、CS 这类总线信号,多半是并口模式板。只引出 TX、RX、VCC、GND 的,基本是串口模式。
三插电脑看设备管理器。不用装驱动,先看识别成什么。Windows 自带驱动库偶尔能认到 CH341 并口,更多时候显示带感叹号的未知设备。这时右键看“硬件 ID”,里面 VID_1A86 是沁恒的供应商 ID,但具体 PID 要自己记下来,回头和 CH341PAR.INF 里写的 ID 对比。
四查随机资料。CH341PAR.rar 里有说明文件的概率很高,尤其是老版本,说明里一般会写明支持的系统版本和硬件 ID。
这套流程走下来,能区分 90% 的情况。剩下 10% 是那种把模式引脚焊死、丝印模糊、资料丢失的裸板,只能靠示波器看引脚时序来判断,但那种板子不值得投入。
3. 装 CH341PAR 驱动:从解压 rar 到设备管理器里出现并口
3.1 解压后先看文件,不要急着双击
很多人的第一反应是双击里面的 setup.exe,但 CH341PAR.rar 里可能根本没有 setup.exe,而是一堆驱动文件。我见过太多次因为随手双击某个 exe 导致设备管理器状态更混乱的情况。
CH341PAR.rar 里常见文件大致是这样:
| 文件 | 作用 |
|---|---|
| CH341PAR.SYS | 并口模式内核驱动,x64 系统需要 64 位版本 |
| CH341PAR.INF | 安装描述文件,定义了硬件 ID 和安装动作 |
| CH341DLL.DLL | 应用层访问并口的动态库 |
| CH341DLL.H | DLL 的头文件,写程序时用 |
| 说明.txt | 版本和安装注意事项 |
拿到压缩包,先看里面有没有 x64 或者 x86 子目录。Windows 10/11 上,32 位驱动在 64 位系统里装不上,这是最基础的一条。再看 INF 文件里的硬件 ID 段,确认它包含你刚才记下的 PID。如果没有,这个包和你手上的板子不匹配,强行安装只会得到错误。
3.2 Win10/Win11 下的安装步骤(含禁用签名)
旧版 CH341PAR 驱动没有新系统认可的签名,直接装会被 Windows 拦下来。需要临时禁用驱动签名验证,装完再恢复。
先说一步到位的操作路径:
- 把 CH341PAR.rar 解压到一个干净目录,比如
C:\CH341PAR。 - 按住 Shift 点“重启”,进入高级启动。
- 依次点:疑难解答 → 高级选项 → 启动设置 → 重启。
- 重启后按数字键 7 或 F7,选择“禁用驱动程序强制签名”。
- 系统进入桌面后,右键开始菜单,打开设备管理器。
- 找到带感叹号的 CH341 设备,右键“更新驱动程序”,选“浏览我的电脑以查找驱动程序”,指向
C:\CH341PAR。 - 如果提示选择具体驱动,直接选 CH341 Parallel Port 那一项。
如果高级启动走得不顺手,也可以用命令行切测试模式。以管理员身份打开 CMD,执行:
bcdedit /set testsigning on shutdown /r /t 0说明一下:bcdedit是 Windows 的启动配置数据编辑工具,testsigning on作用是让系统允许加载未签名驱动。重启后桌面右下角会出现“测试模式”水印,这是正常的。装完驱动后建议关闭这个状态:
bcdedit /set testsigning off注意shutdown /r /t 0里的 0 是延时秒数,意思是立刻重启。别在没保存文件时执行。测试模式会降低系统安全性,只适合在专用电脑上临时开,不要长期挂着。
3.3 Win7/XP 的安装路径
Windows 7 系统下,开机时按 F8 进高级启动菜单,选择“禁用驱动程序签名强制”,然后进系统手动更新驱动,原理和 Win10 那条路一样。Windows XP 则要省心得多,直接右键 INF 文件选“安装”,或者手动指定到解压目录即可。
如果你同时装了串口驱动和并口驱动,设备管理器里可能同时出现 COM 口和 CH341 并口设备,这不算冲突,前提是硬件 ID 分得开。真正冲突的是两个驱动包抢同一个硬件 ID,这种情况通常来自乱装绿色版驱动,解压后直接替换了系统目录里的同名文件。
3.4 验证驱动是否真的生效
装完之后别急着拔线,用几个方法确认到位。
设备管理器里,展开“端口”或“打印机端口”分类,找到带 CH341 字样的设备,状态栏显示“这个设备工作正常”。如果还带感叹号,说明驱动没真正匹配上。
命令行也可以用 PowerShell 查:
Get-PnpDevice | Where-Object { $_.FriendlyName -match 'CH341|并口|Parallel' } | Format-Table Status, Class, FriendlyName -AutoSize这条命令的作用是列出所有名字里带 CH341、并口或 Parallel 的即插即用设备,Status列显示OK就是正常。Class列可以看到它被分到哪一类,常见是Ports或Printer。
如果状态仍是错误,去C:\Windows\INF\setupapi.dev.log里搜设备名,能看到安装过程中具体在哪一步失败。日志很长,但直接搜错误码更高效,比如Error 0x...后面跟着的代码,去网上按码查原因。
3.5 装完还是未知设备
最常见的两个原因:INF 里的硬件 ID 不匹配,或者驱动文件本身位数不对。右键未知设备看“硬件 ID”,对照 INF 文件里的DeviceList段。如果 ID 不一样,要么换驱动包,要么手动编辑 INF 添加上这个 ID。
我不推荐新手改 INF。一旦改错,系统可能把驱动强制绑定到错误的设备上,卸载时还会留下残留。更稳妥的做法是拿着硬件 ID 去网上搜对应驱动,而不是硬凑 CH341PAR。
4. 用 CH341 并口模式读写:接线、DLL 调用与老软件适配
4.1 接线:这是最容易被“标准并口”误导的地方
CH341 的并口模式并不是标准 SPP/ECP 并口,它的数据总线和控制线更像一个被 USB 包裹的 8 位并行总线。模块上通常引出 D0-D7、WR、RD、CS/ADR 这些信号,而不是打印机标准 DB25 里的 Pin1~Pin17。
所以接老设备时,不要把 CH341 模块直接插到标准并口打印机线上,除非你用的是成品“CH341 USB 转并口”转接板,板子上已经做好信号映射。自己飞线时,要先去查目标设备手册里每个信号的时序要求,再对应到 CH341 引脚。
我踩过最典型的坑:把 WR 和 RD 接反,设备瞬间有反应,但数据全是乱的,读回来的字节像被“搅碎”一样。用示波器一测才发现控制信号时序完全反了。并口这种低速总线,看起来随便接也能动,实际上每一根线的方向和时序都有严格定义。
4.2 用 CH341DLL 在应用层读写并口
驱动装好只是第一步。传统并口程序直接用outportb(0x378, data)就能写寄存器,但 CH341 并口不行,它没有固定映射到某个 I/O 地址,所有读写都要经过 CH341DLL 里的函数转发到 USB 总线。
这个限制让很多老软件无法直接跑在 CH341 上。你要写自己的测试程序,基本套路是先打开设备,再初始化并口模式,然后读写数据。用 C 写一个最小框架:
#include "CH341DLL.H" #include <stdio.h> int main(void) { // 打开第 0 个 CH341 设备;多设备同时插入时按 0,1,2 编号 if (CH341OpenDevice(0) == -1) { printf("open failed\n"); return 1; } // 初始化并口模式,让各引脚进入已知电平状态 CH341ParallelInit(0); // 具体读写调用按 CH341DLL.H 里声明为准,这里不展开 CH341CloseDevice(0); return 0; }代码逻辑很直白:CH341OpenDevice(0)负责建立 USB 会话,失败返回 -1;CH341ParallelInit(0)必须在读写前调用,否则引脚状态不确定;结束前CH341CloseDevice(0)释放设备。不同版本的 DLL 函数名可能有小差异,比如有的版本把读写函数叫CH341ParallelRead/Write,有的版本带更多参数,以你手里的头文件为准。
如果你更习惯 Python,用 ctypes 调同一个 DLL 也可以:
import ctypes # 加载与 Python 进程位数一致的 DLL,32位进程配32位DLL dll = ctypes.WinDLL("CH341DLL.dll") # 声明函数返回值和参数类型,不声明容易读到错位返回值 dll.CH341OpenDevice.argtypes = [ctypes.c_ulong] dll.CH341OpenDevice.restype = ctypes.c_ulong # 打开设备 0 dev = dll.CH341OpenDevice(0) if dev == 0 or dev == 0xFFFFFFFF: raise RuntimeError("CH341 open failed") print("opened", dev) dll.CH341CloseDevice(0)这段 Python 里最容易出错的是没写restype。Windows DLL 默认返回 32 位整数,但 CH341 的打开函数返回一个句柄或设备号,类型不对会让返回值看起来像乱码。先声明argtypes和restype,再调用,这是 ctypes 调第三方 DLL 的基本功。
4.3 老软件只能认 LPT 时怎么办
这是 CH341 并口方案最大的边界。软件如果写死要传统 LPT1、LPT2 地址,CH341PAR 基本救不了它,因为系统里根本没有一个可分配的 0x378 端口。你看到的是“CH341 并口设备”,但 Windows 不会把它映射成传统 I/O 端口。
有两种例外情况可以继续用。第一种是软件本身就支持 CH341,很多国产编程器软件会在设置里列出一个“CH341 并口”或“USB 并口”选项,选上就能用。第二种是软件通过使用 DLL 方式调用 CH341,这种情况和驱动已经没有直接关系了。
反过来,如果你手里的软件只认标准打印口,建议直接换 PCI 并口卡或者带并口的老主板,不要在 CH341 上死磕。这不是驱动的问题,是架构不兼容。
5. CH341PAR 使用避坑:5 个让你白忙一下午的常见问题
5.1 想装 CH341PAR,设备管理器却出现 COM 口
现象:板子插上后直接多了一个 COM3,没有并口设备,CH341PAR 驱动怎么装都是感叹号。
原因:芯片当前工作在串口模式。可能是模块设计时把模式引脚配置成了串口,也可能是之前装过的 CH340/CH341 串口驱动抢先占了设备。
解决:先确认硬件侧有没有模式跳线或焊盘。有跳线的,按丝印切换到并口模式再重插;没有跳线的,看芯片数据手册里的模式配置引脚,自己飞线改电平。如果板子已经固定为串口模式,那 CH341PAR 永远装不上,只能放弃并口方案。
5.2 驱动签名校验失败,安装到一半回滚
现象:Windows 提示“无法验证驱动程序发布者”,安装进度条走到一半自动回滚,设备管理器里还是未知设备。
原因:CH341PAR 是很早的驱动,没有微软新的签名认证,部分版本的 INF 还会触发 SmartScreen 拦截。
解决:用 3.2 节里的高级启动“禁用驱动程序强制签名”方式安装。注意这个方式只对当次启动有效,下一次重启就恢复,所以装完驱动不要马上重启,先用 3.4 节的方法确认状态。测试模式也可以,但装完必须关掉。
5.3 并口设备有反应,但数据全是乱的
现象:设备能枚举,软件能打开,但读回来的字节和写进去的完全对不上,偶尔还会多出几个 0xFF。
原因:多半是接线问题。WR/RD 方向反了,或者 D0-D7 某一位虚接,甚至 CH341 模块供电不足导致数据线上的电平低于设备识别阈值。
解决:先把 D0-D7 和数据目标端断开,用万用表量每一根线到地是否有稳定电平。再用示波器看 WR/RD 的时序宽度,确认符合目标设备手册要求。CH341 并口的电平一般是 3.3V,如果目标设备是 5V 逻辑,中间需要电平转换,直接硬接很容易出现“能通但全错”的诡异现象。
5.4 用 CH341DLL 时返回错误,设备读取不到
现象:自己写的测试程序调用CH341OpenDevice返回失败,或者返回了看似正常的数字,但后续读写没有任何反应。
原因:最常见是进程位数和 DLL 位数不匹配。Python 是 32 位进程,却加载了 64 位 DLL,调用直接失效。还有一种情况是打开设备前没有初始化并口模式,DLL 默认按上次状态驱动,引脚处于高阻,读写自然没结果。
解决:先确认设备管理器里设备状态正常,再确认 DLL 位数。python 用 32 位的或 64 位的要根据 DLL 选。然后按“打开 → 初始化并口 → 读写 → 关闭”的顺序调用,不要跳步。
5.5 接上 USB Hub 后设备反复掉线
现象:CH341 直接插电脑背板 USB 口一切正常,一插 Hub 就周期性断开重连,甚至烧录大文件时掉线。
原因:USB Hub 供电不足是最大的嫌疑。CH341 并口模式下,如果外部设备从并口反向拉电流,USB 口本身的 5V 可能不够,Hub 分压后更容易触发 USB 过流保护。
解决:优先插电脑主机后置 USB 口,不要用无源 Hub。如果必须用 Hub,选带独立供电的型号,并确认 CH341 模块和外部设备是否共地。共地问题会让信号参考电位差过大,轻则数据错,重则设备反复复位。
6. 把 CH341PAR 用在老系统与虚拟机:最后的低成本方案
6.1 在虚拟机里给老系统挂 CH341
如果你有 Win98、WinXP 时代的老并口编程软件,可以试试把 CH341 设备直接分配给虚拟机。VMware 和 VirtualBox 都支持 USB 设备直通,操作路径类似:先在虚拟机设置里开启 USB 2.0 控制器,再添加一个 USB 设备过滤器,VID 选择沁恒的1A86,这样虚拟机一启动就会把 CH341 捕获过去,物理机不再占用。进虚拟机后照第 3 章的步骤装 CH341PAR。这个办法能让那些只支持老系统、又离了并口就死的软件继续工作,比买二手老主板便宜得多。
6.2 用 CH341 并口做 GPIO 小控制
就算不接老设备,CH341 并口模式本身也是一组可编程 IO。D0-D7 可以当 8 位双向 IO 用,引脚置高、置低、读输入电平都走同一个 DLL。做一个简单治具,比如用 8 路 IO 控制继电器或读取按钮状态,CH341 比 USB 转串口更紧凑,因为它没有串口协议那一层,时序更可控。唯一要注意的是电平范围,CH341 并口 IO 一般工作在 3.3V,驱动 5V 继电器必须加三极管或光耦,别直接怼。
6.3 该不该继续投入,我的判断标准
我给的判断很简单:如果你手里的软件已经支持 CH341,那这套方案值得留;如果软件只认传统 LPT 且没有替代版本,那就别再买“USB 转并口”类产品了,直接找 PCI 并口卡或老工控机更现实。CH341PAR 解决的是“系统没有并口但设备还能用”的问题,不是万能转接器。
最后说一个我自己的习惯:拿到 CH341PAR.rar 先别急着解压,先看 INF 里有没有你硬件的 VID/PID,再看 DLL 是不是对应系统位数。这两点能挡掉一半的坑。用 CH341 这类老芯片做抢救性方案,耐心比运气重要,希望帮到你。
本文还有配套的精品资源,点击获取