CH341的串口方式支持WINDOWS 98/ME/2000/XP/Vista/Linux,提供相關驅動程序,
CH341的USB轉串口支持大多數常用的串口監控及調試工具程序。
驅動安裝方法:
1. 標準INF文件安裝方法
WINDOWS提示找到新硬件,指定驅動程序所在目錄DRIVER,自動安裝驅動,
如果WINDOWS沒有提示找到新硬件,那么在設備管理器的硬件列表中,
選擇帶問號的USB設備,更新驅動程序并指定目錄。
2. 使用驅動程序安裝工具
直接使用CH341SER.EXE安裝包,可以安裝/升級/卸載驅動程序,
該方法更適用于最終用戶。
CH341串口使用方法:
CH341實現USB轉串口,在邏輯功能方面的使用方法與普通計算機串口相同。
與普通計算機串口的區別:
CH341提供的是仿真串口,所以不支持串口本身的純硬件操作,例如I/O操作,
普通計算機串口是靜態設備,而CH341串口是動態設備,理論上隨時會斷開,
CH341的附加功能(下面有介紹):讀取外部串行EEPROM,支持更高波特率。
提供“模塊調試”工具,啟動后將“類型”選擇為“手工輸入發送”,
打開串口后就可以用于CH341串口或者普通串口的輸入輸出監控及收發調試。
注意事項:
CH341串口是即插即用的USB設備,正在使用CH341串口進行數據傳輸的過程中,
不可以將其斷開(斷開是指從USB插座中取出CH341或者關閉CH341的電源),
也就是說,必須在應用程序關閉該串口后,CH341串口才可以從USB插座中拔出。
如果在應用程序使用CH341串口的過程中,CH341串口設備從USB插座中斷開,
那么應用程序應該盡快關閉CH341串口并退出(關閉及退出可能需要數秒時間)。
如果在CH341串口通訊過程中發生錯誤,極有可能是CH341串口已經物理斷開,
所以在檢測到錯誤后建議關閉CH341串口,稍等兩秒后再重新打開串口通訊。
采用設備事件通知的方法可以及時了解CH341串口設備的連接與斷開,
從而使串口應用程序能夠及時打開和關閉CH341串口。
串口動態鏈接庫CH341PT.DLL提供了API,可以監視CH341串口插拔事件,
可以搜索和識別CH341串口等,具體需參考CH341PT.H文件。
如果通訊波特率較高,建議設置較大的緩沖區,尤其在WINDOWS 98/ME下,
線程調度能力和USB實時性都比WINDOWS 2000/XP差,如果串口接收緩沖區較小,
那么在通訊波特率較高時,接收大量數據會導致串口緩沖區溢出而丟棄數據。
由于底層的USB是將多個字節組成數據包后安插到各個1mS幀中進行傳輸,
所以有可能將串口收發的緊靠著的兩個字節實際分割在兩個USB數據包甚至
兩個USB幀中,在最壞情況下這兩個字節在時間上有可能相隔1mS甚至2mS。
*******************************************************************************
如果需要速率控制(流控制),建議不要使用MODEM信號控制,因為其效率較低,
建議用CH341的TEN#和RDY#實現純硬件的速率控制,其中TEN#為輸入,RDY#為輸出,
當TEN#輸入為低電平時允許CH341從串口發送數據,高電平時CH341將暫停發送數據,
當RDY#輸出為低電平時說明CH341可以接收串口數據,高電平說明CH341正忙而不能接收。
如果計算機及單片機不忙,或者波特率在115200bps以下時,通常不需要速率控制,
如果波特率再高或者計算機及單片機較忙,才需要考慮采用TEN#和RDY#進行速率控制。
CH341用于串口時,其硬件最簡單時只需要三根線:GND,TXD,RXD,
可以直接與單片機相連,波特率支持從50bps到2Mbps,例如MCS51單片機:
CH341引腳 MCS51單片機引腳
GND <=> GND
TXD <=> RXD
RXD <=> TXD
TEN接GND
與單片機相連時,通常將CH341的TEN#引腳直接接地,總是允許CH341發送數據,
如果預算單片機可能會來不及接收串口數據,那么應該將TEN#連接到單片機的I/O引腳,
當單片機不忙時,由單片機將CH341的TEN#置為低電平,允許CH341從串口發出數據,
當單片機較忙時,由單片機將CH341的TEN#置為高電平,CH341將暫停從串口發出數據
CH341的TNOW引腳是收發狀態,可以用于半雙工通訊的收發切換,例如RS485的收發切換。
*******************************************************************************
如何識別CH341串口,如何知道CH341的串口號COM?
在首次安裝CH341串口驅動時,CH341串口號由WINDOWS自動分配(通常從COM3開始分配),
安裝完成后可以在設備管理中點其屬性修改串口號。由于應用程序事先無法知道CH341的
實際串口號,所以必須使用一些特殊方法識別出CH341串口,然后才能使用。
在WINDOWS 98/ME系統下,CH341串口號與當前硬件資源配置有關,默認為自動分配資源,
從而排在當前實際串口號之后,可以在串口屬性中選擇CH341資源配置來指定串口號。
在WINDOWS 2000/XP系統下,CH341串口號與當前所在USB端口有關,由首次安裝時分配,
WINDOWS記憶各USB端口CH341的串口號,可以在串口屬性中通過高級選項指定串口號。
比較簡單但很費事的方法是,在首次安裝CH341串口后,用程序修改注冊表或者點其屬性,
人為將CH341的串口號修改為COM5,避開常用的COM1到COM4,該方法簡單但是有可能沖突。
常規的識別方法是采用軟件查詢方法:
嘗試以串口名稱逐個打開,打開成功后通過該串口收發特殊字符串識別CH341串口,
該方法是從“COM1”開始,接著“COM2”逐個嘗試打開串口。如果某個串口打開成功,
那么在300bps波特率下向該串口發出特殊字符串“CH341Ser?”,如果在約200毫秒之內
收到應答字符“W”,那么該串口就是當前已經連接的CH341串口。軟件設計方法是:
從COM1開始依次打開每個串口,如果打開串口失敗則跳過(串口不存在或正在使用),
如果打開成功則設置該串口波特率為300,然后向該串口寫入ASCII字符串"$CH341Ser?",
注意大小寫,共10個字符一次寫入,如果該串口是普通串口,那么通常沒有任何返回,
如果該串口是CH341串口,那么應用程序將能接收到一個ASCII字符"W",以此識別CH341。
例如,用串口監控/調試工具軟件演示:
將串口的波特率選擇為300bps(有些工具軟件在選擇波特率后必須重新打開串口),
發出特征字符串,為10個ASCII碼數據: $CH341Ser?
發送成功后,普通串口沒有返回,而CH341串口將返回1個ASCII碼: W
建議使用CH341PT.DLL動態庫,應用程序可以直接調用DLL中相應的API識別CH341串口,
識別速度快,效率高。注意,CH341PT.DLL在INF中定義為可選安裝,默認是安裝的
*******************************************************************************
關于讀取外部串行EEPROM
CH341可以外接I2C接口的器件,例如常用的24系列串行非易失存儲器EEPROM,
支持24C01A,24C02,24C04,24C08,24C16等,以及與之時序兼容的器件,
24系列EEPROM既可以用于配置CH341,也可以用于斷電期間保存重要數據。
例如保存產品序列號等識別信息,應用程序可以讀出用于識別產品功能等。
如果需要支持24C64、24C256、24C512以及更大容量的EEPROM,請參考CH341評估板資料。
應用程序可以按串口方式讀寫CH341所連接的24系列EEPROM,方法是:
設置CH341串口波特率為300,然后以4字節為一組的命令包寫串口,
命令包的首字節必須是@,地址符,對應的十六進制數為40H,
命令包的第二字節是24系列EEPROM的設備地址,位0是方向標志,0為寫,1為讀,
命令包的第三字節是24系列EEPROM的單元地址,
命令包的第四字節是準備寫入24系列EEPROM的一個數據,如果是讀操作則指定為00H,
如果是寫操作,那么命令發送成功就說明寫成功,對于EEPROM還要延時10mS才能下一個操作,
如果是讀操作,那么命令發送成功后,可以從串口接收到一個字節的數據,就是讀出的數據
例如,CH341連接24C0X,A2=A1=A0=GND,將仿真串口的波特率選擇為300bps,
可以用串口監控/調試工具軟件演示:
1、發出命令包,為4個十六進制數據: 40 A1 01 00
將24C0X中地址為01H的數據讀出,可以從串口接收到一個字節的數據
2、發出命令包,為4個十六進制數據: 40 A0 2A 69
將一個字節的數據69H寫到24C0X中地址為2AH的單元,通常等待10mS后才能進行下一個操作
3、發出命令包,為4個十六進制數據: 40 A5 E7 00
將24C0X中地址為02E7H的數據讀出,可以從串口接收到一個字節的數據
注意,只有24C08和24C16中有地址為02E7H的數據單元
*******************************************************************************
關于支持非標準波特率或者更高通訊波特率
對于一些非標準波特率或者常規方法無法設置的高速波持率,CH341驅動程序提供特殊方法,
應用程序可以按串口寫數據的方式間接設置CH341的串口通訊波特率,方法是:
設置CH341串口波特率為300,然后以ASCII碼字符串的命令包寫串口,
命令包的首字節必須是#,井字符,對應的十六進制數為23H,
命令包的中間為不超過7個數字表示的波特率,例如字符串9600或者921600等,
命令包的尾字節必須是_,下劃線,對應的十六進制數為5FH,
也就是說,將要設置的波特率以字符串的形式置于#字符和_字符之間,作為一個命令包,
在300bps下發送到CH341的串口,那么將被CH341驅動程序解釋為修改CH341的波特率,
而不會被作為數據從串口真正發出,當該操作成功返回后,
CH341實際工作于指定的新波特率,當然,計算機系統及串口控件仍然以為是工作于300bps,
如果需要再次以這種方法改變波特率,那么首先要用常規方法將CH341的波特率置為300bps。
例如,用串口監控/調試工具軟件演示:
1、將CH341串口的波特率選擇為300bps(有些工具軟件在選擇波特率后必須重新打開串口),
發出字符串命令包,為6個ASCII碼數據: #9600_
發送成功后,CH341將實際工作于9600bps
2、將CH341串口的波特率選擇為300bps(有些工具軟件在選擇波特率后必須重新打開串口),
發出字符串命令包,為8個ASCII碼數據: #460800_
發送成功后,CH341將實際工作于460800bps
3、將CH341串口的波特率選擇為300bps(有些工具軟件在選擇波特率后必須重新打開串口),
發出字符串命令包,為9個ASCII碼數據: #1000000_
發送成功后,CH341將實際工作于1000000bps
CH341串口支持50bps到2Mbps的波特率,當應用程序請求CH341改變串口通訊波特率時,
CH341驅動程序將波特率換算為波特率除數,然后修改CH341芯片內部的波特率除數寄存器,
所以設置CH341串口的通訊波特率實際上是設置CH341芯片內部的波特率除數寄存器,
由于CH341內部的串口基準位時鐘為48/8=6MHz(或12MHz),并且波特率除數只支持整數,
所以在指定波特率時,應該考慮實際換算誤差,在波特率大于19200bps時的計算方法是:
X = 6000000 除以波特率后的值
Y = X 四舍五入后的值
誤差 = ( Y - X ) / X
以下為CH341支持的常用波特率,未注明的基準位時鐘為6MHz,未注明的誤差小于0.16%
921600 (12MHz), 460800, 307200 (12MHz),
230400, 153600, 128000 (0.27%), 115200,
76800, 57600, 56000, 38400, 33600,
28800, 19200, 14400, 9600, 7200,
4800, 3600, 2400, 1800, 1200,
900, 600, 300, 150, 134.5,
110, 100, 75, 50, 2000000,
1500000, 1200000, 1000000, 750000, 500000,
375000, 250000, 200000, 187500, 100000,
93750, 75000, 50000, 25000, 10000
其它波特率只要誤差小于2.5%,CH341都可以支持,計算誤差時要考慮兩端的誤差之和。
但是為了可靠進行通訊,建議不要使用誤差大于1%的波特率。
*******************************************************************************
USB設備驅動程序與仿真串口驅動程序
CH341串口硬件的默認驅動程序是仿真串口驅動程序,
即在計算機端多出一個串口,并且在下位機端CH341芯片也使用串口通訊。
計算機端應用程序通過操作仿真串口實現USB數據傳輸,其用法與普通串口相同。
如果不希望在計算機端仿真為串口,那么可以使用USB設備驅動程序,
即在計算機端多出一個USB設備,但是在下位機端CH341芯片仍然使用串口通訊。
計算機端應用程序通過調用DLL提供的API實現USB數據傳輸,
其用法與CH341并口、CH372、CH375類似,可以參考相關的應用程序的源程序。
CH341串口硬件的USB設備驅動與并口硬件的USB設備驅動CH341PAR完全相同,
區別僅在于驅動安裝信息文件INF中的PID不同(參考CH341PAR的INF中的注釋行說明)。
*******************************************************************************
- PC官方版
- 安卓官方手機版
- IOS官方手機版