PCIe轉串口芯片CH382/CH384以及PCI轉串口芯片CH351/CH352/CH353/CH355/CH356/CH357/CH358/CH359以及使用如上芯片外加CH432/CH438的組合串口轉接方案均支持Windows和Linux操作系統,在系統下會(huì )生成多個(gè)獨立的串口,各虛擬串口分別對應一個(gè)硬件串口。各串口獨立工作,互不影響。本文主要介紹Linux操作系統如何為設備加載廠(chǎng)商串口驅動(dòng)。


廠(chǎng)商驅動(dòng)下載鏈接:?CH38XDRV.ZIP - 南京沁恒微電子股份有限公司

廠(chǎng)商驅動(dòng)Github鏈接:https://github.com/WCHSoftGroup/ch35_38x_linux

步驟一:解綁系統內置串口驅動(dòng)1、使能root權限

因如下各操作均需要root權限,可以在終端下通過(guò)"sudo su"或“sudo -i”命令開(kāi)啟該權限。當然也可以在后續操作時(shí)每條命令前單獨加上sudo關(guān)鍵字。

2、確定串口卡狀態(tài)

Linux內核中,系統啟動(dòng)時(shí)會(huì )自動(dòng)加載內置的8250_pci驅動(dòng)。該驅動(dòng)包含各廠(chǎng)家PCI/PCIe產(chǎn)品,可以通過(guò)lspci命令確認當前硬件的工作狀態(tài)以及驅動(dòng)匹配情況。CH35x和CH38x芯片使用的VID有2種:0x1C00和0x4348,命令為:

lspci?-vd?1c00:*

lspci?-vd?4348:*

運行如上命令后,若設備存在,則會(huì )顯示如下設備信息:

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”信息中會(huì )顯示當前已經(jīng)為該設備加載的驅動(dòng)。注:系統內置的可以滿(mǎn)足設備基礎串口通信的需求,該驅動(dòng)為串口卡創(chuàng )建的設備名稱(chēng)為:/dev/ttySn,也可以通過(guò)dmesg | grep ttyS 通過(guò)對比ttyS的IO地址和lspci的地址來(lái)確定具體的ttyS通道。

如果需要使用擴展功能,如:支持串口高波特率通訊,開(kāi)啟半雙工功能支持RS485串口通訊等,則務(wù)必使用廠(chǎng)商單獨提供的串口驅動(dòng)。

3、解綁本地8250_pci串口驅動(dòng)

執行如下命令:

ls?/sys/bus/pci/drivers/serial

如上命令返回內容如下所示:

0000:07:00.0?bind?new_id?remove_id?uevent?unbind

使用如下命令完成驅動(dòng)和設備的解綁:

echo?-n?“0000:07:00.0”?>?/sys/bus/pci/drivers/serial/unbind

步驟二:加載廠(chǎng)商串口驅動(dòng)

1、從開(kāi)頭的鏈接地址下載驅動(dòng)到本地,也可以通過(guò)git clone。

2、參考驅動(dòng)文件夾中的README.md文檔完成驅動(dòng)的編譯和移植工作。

3、設備存在且工作正常的情況下,驅動(dòng)會(huì )為設備生成名稱(chēng)為“/dev/ttyWCH”開(kāi)頭的串口節點(diǎn)。

若驅動(dòng)加載時(shí)出錯,可能原因有:

1、系統當前未發(fā)現任何CH35x和CH38x串口卡。

2、系統默認為CH35x和CH38x串口卡分配的IO地址不可用,導致驅動(dòng)無(wú)法成功訪(fǎng)問(wèn)硬件,甚至造成系統Crash。原因:CH35x和CH38x串口卡的相關(guān)串口寄存器均位于IO空間內,部分非X86和X64的架構不支持獨立編址或者支持分配地址但地址無(wú)法通過(guò)原生IO地址操作直接訪(fǎng)問(wèn),此時(shí)可聯(lián)系相應CPU或系統廠(chǎng)商咨詢(xún)解決方法。

3、若使用CH35x和CH38x與CH43x的組合芯片方案,當主芯片和CH43x的硬件通訊異常,驅動(dòng)加載也會(huì )報錯,此時(shí)可以更換其他系統平臺進(jìn)行驗證以排除原因2的問(wèn)題。若其他系統上如Windows可以正常工作,則硬件正常,僅檢查原因2即可。