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