PCIe转串口芯片CH382/CH384以及PCI转串口芯片CH351/CH352/CH353/CH355/CH356/CH357/CH358/CH359以及使用如上芯片外加CH432/CH438的组合串口转接方案均支持Windows和Linux操作系统,在系统下会生成多个独立的串口,各虚拟串口分别对应一个硬件串口。各串口独立工作,互不影响。本文主要介绍Linux操作系统如何为设备加载厂商串口驱动。
厂商驱动下载链接:
厂商驱动Github链接:
步骤一:解绑系统内置串口驱动1、使能root权限
因如下各操作均需要root权限,可以在终端下通过"sudo su"或“sudo -i”命令开启该权限。当然也可以在后续操作时每条命令前单独加上sudo关键字。
2、确定串口卡状态
Linux内核中,系统启动时会自动加载内置的8250_pci驱动。该驱动包含各厂家PCI/PCIe产品,可以通过lspci命令确认当前硬件的工作状态以及驱动匹配情况。CH35x和CH38x芯片使用的VID有2种:0x1C00和0x4348,命令为:
lspci -vd 1c00:* lspci -vd 4348:*
运行如上命令后,若设备存在,则会显示如下设备信息:
07:00.0 Serial controller: Device 1c00:3470 (rev 10) (prog-if 05 [16850]) Subsystem: Device 1c00:3470 Flags: fast devsel, IRQ 41 I/O ports at 1000 [size=256] Memory at 58700000 (32-bit, prefetchable) [size=32K] I/O ports at 1100 [size=4] Expansion ROM at 58700000 [size=32K] Capabilities: [60] Power Management version 3 Capabilities: [68] MSI: Enable- Count=1/32 Maskable+ 64bit+ Capabilities: [80] Express Legacy Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Kernel driver in use: serial Kernel modules: 8250_pci
如上所示,在“Kernel modules”信息中会显示当前已经为该设备加载的驱动。注:系统内置的可以满足设备基础串口通信的需求,该驱动为串口卡创建的设备名称为:/dev/ttySn,也可以通过dmesg | grep ttyS 通过对比ttyS的IO地址和lspci的地址来确定具体的ttyS通道。
如果需要使用扩展功能,如:支持串口高波特率通讯,开启半双工功能支持RS485串口通讯等,则务必使用厂商单独提供的串口驱动。
3、解绑本地8250_pci串口驱动
执行如下命令:
ls /sys/bus/pci/drivers/serial
如上命令返回内容如下所示:
0000:07:00.0 bind new_id remove_id uevent unbind
使用如下命令完成驱动和设备的解绑:
echo -n “0000:07:00.0” > /sys/bus/pci/drivers/serial/unbind
步骤二:加载厂商串口驱动
1、从开头的链接地址下载驱动到本地,也可以通过git clone。
2、参考驱动文件夹中的README.md文档完成驱动的编译和移植工作。
3、设备存在且工作正常的情况下,驱动会为设备生成名称为“/dev/ttyWCH”开头的串口节点。
若驱动加载时出错,可能原因有:
1、系统当前未发现任何CH35x和CH38x串口卡。
2、系统默认为CH35x和CH38x串口卡分配的IO地址不可用,导致驱动无法成功访问硬件,甚至造成系统Crash。原因:CH35x和CH38x串口卡的相关串口寄存器均位于IO空间内,部分非X86和X64的架构不支持独立编址或者支持分配地址但地址无法通过原生IO地址操作直接访问,此时可联系相应CPU或系统厂商咨询解决方法。
3、若使用CH35x和CH38x与CH43x的组合芯片方案,当主芯片和CH43x的硬件通讯异常,驱动加载也会报错,此时可以更换其他系统平台进行验证以排除原因2的问题。若其他系统上如Windows可以正常工作,则硬件正常,仅检查原因2即可。