摘要:為便捷上位機(jī)訪問(wèn)工業(yè)現(xiàn)場(chǎng)CAN總線,提出了一種便攜式即插即用的USBCAN適配器設(shè)計(jì)方案。該適配器采用CH341作為USB總線轉(zhuǎn)接芯片,直接把USB總線協(xié)議轉(zhuǎn)化為并口協(xié)議;選用SJA1000芯片作為CAN控制器,支持CAN2.0B協(xié)議,以適應(yīng)不同的CAN總線需求。系統(tǒng)從USB端口取電,且無(wú)需MCU/DSP介入,簡(jiǎn)化了電路結(jié)構(gòu);利用CH341主動(dòng)并口功能,經(jīng)相應(yīng)的控制時(shí)序邏輯轉(zhuǎn)換,上位機(jī)即可驅(qū)動(dòng)SJA1000,進(jìn)行CAN總線訪問(wèn)。該適配器支持上位機(jī)自主配置,靈活強(qiáng),可靠性高。經(jīng)實(shí)驗(yàn)測(cè)試,適配器支持訪問(wèn)不同的CAN總線網(wǎng),速率可達(dá)1Mb/s。
關(guān)鍵詞:CH341;USBCAN;適配器;SJA1000
中圖分類號(hào):TN91934文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1004373X(2012)18005003
19CAN總線以其突出的可靠性、實(shí)時(shí)性和靈活性,在控制領(lǐng)域獲得廣泛的應(yīng)用。當(dāng)上位計(jì)算機(jī)訪問(wèn)CAN總線終端設(shè)備時(shí),一般采用基于PCI總線的CAN接口卡,但是該方法不支持即插即用,且需配備專用的計(jì)算機(jī);或是借助MCU,DSP等CPU模塊進(jìn)行數(shù)據(jù)中轉(zhuǎn)處理。若CAN適配器通過(guò)USB接口驅(qū)動(dòng)CAN控制器直接訪問(wèn)CAN總線網(wǎng),則支持熱插拔和通用上位機(jī),為測(cè)試和訪問(wèn)CAN總線網(wǎng),提供了一種便捷的解決方案。
1設(shè)計(jì)目標(biāo)
適配器支持即插即用,上位機(jī)可自主配置、訪問(wèn)CAN總線;適配器無(wú)需MCU,DSP等CPU介入,體積小巧,便攜式設(shè)計(jì),有廣泛的適應(yīng)性;提供Windows平臺(tái)下適配器驅(qū)動(dòng)的API函數(shù)。
2硬件實(shí)現(xiàn)
適配器選用SJA1000芯片作為CAN控制器,該芯片支持CAN2.0B協(xié)議,有BasicCAN和PeliCAN兩種工作模式,分別支持11位和29位地址識(shí)別碼,通信速率可達(dá)到1Mb/s,可滿足不同CAN網(wǎng)接入需求[12]。選用南京沁恒公司的CH341作為USB總線的轉(zhuǎn)接芯片,該芯片通過(guò)USB總線不僅提供異步串口、打印口、并口,還提供常用的2線和4線等同步串行接口[3]。尤其是CH341工作在主動(dòng)式并口模式下,僅憑主機(jī)的程序控制,即可直接從外部電路輸入/輸出數(shù)據(jù),而無(wú)需外接單片機(jī)DSP/MCU。因此系統(tǒng)置SDA低電平,SCL懸空,配置CH341工作于USB總線轉(zhuǎn)并口模式,實(shí)現(xiàn)對(duì)SJA1000的直接控制。
圖1為適配器設(shè)計(jì)原理圖,兩者AD0~AD7相連,構(gòu)成雙向地址/數(shù)據(jù)總線;RST和INT與對(duì)應(yīng)的引腳相連,則可通過(guò)EPP對(duì)SJA1000復(fù)位,而SJA1000的中斷也可通過(guò)EPP映射到主機(jī)。在EPP工作模式下,雖然CH341主動(dòng)并口地址和數(shù)據(jù)的讀寫(xiě)時(shí)序見(jiàn)(圖2)與SJA1000的工作時(shí)序并非完全一致,但是可通過(guò)相應(yīng)邏輯轉(zhuǎn)換而相匹配。SJA1000的ALE是高電平地址輸入,低電平地址鎖存,AS反向后則與之等效。SJA1000的RD、WD為低電平有效信號(hào),且應(yīng)在數(shù)據(jù)讀/寫(xiě)周期時(shí)有效而地址讀/寫(xiě)周期時(shí)無(wú)效,以負(fù)邏輯形式表示則RD=WR·DS,WD=WR·DS#。
圖2CH341并口(EPP)讀寫(xiě)時(shí)序系統(tǒng)直接從USB端口取電,無(wú)需外接電源。C3,C2用于外部電源退耦,C1則用于內(nèi)部電源節(jié)點(diǎn)退耦,均為獨(dú)石或鉭電容。SJA1000工作時(shí)鐘頻率16MHz,Intel模式,CS引腳接地,上電后直接處于選通的工作狀態(tài)。
以TJA1040作為CAN總線的驅(qū)動(dòng)器,該芯片EMC性能出色,采用分離終端設(shè)計(jì),提高了總線的抗電磁干擾性能[3]。STB(P8)腳接地,設(shè)置驅(qū)動(dòng)器工作于高速通信模式。CANH,CANL分別對(duì)地接30nF的電容,用于濾掉總線上的高頻干擾。為防止靜電和外部強(qiáng)干擾損壞適配器,CAN總線輸出接口端并聯(lián)NUP2105L總線保護(hù)器。
CH341主動(dòng)并口除了EPP模式還有MEN和BUS模式,其BUS模式與SJA1000的工作時(shí)序最為匹配,控制信號(hào)無(wú)需邏輯轉(zhuǎn)換,可直接連接,其7位地址總線也滿足SJA1000寄存器地址的需求[4]。但由于該功能尚未經(jīng)廠方完全測(cè)試,且不提供API函數(shù),因此適配器選取EPP模式,編程更為簡(jiǎn)潔,可靠。
3軟件設(shè)計(jì)
在Windows操作系統(tǒng)下,CH341的并口驅(qū)動(dòng)程序和動(dòng)態(tài)鏈接庫(kù)DLL向應(yīng)用程序提供了應(yīng)用層接口,這包括設(shè)備管理API、并口數(shù)據(jù)傳輸API以及中斷處理API[45]。并在CH341DLL.H文件中給出了API參數(shù)說(shuō)明。主機(jī)程序調(diào)用這些API函數(shù),則可便捷地驅(qū)動(dòng)CH341完成USB協(xié)議到并口協(xié)議的轉(zhuǎn)換,進(jìn)而驅(qū)動(dòng)CAN控制器SJA1000。
3.1CAN總線API設(shè)計(jì)
適配器軟件設(shè)計(jì)的關(guān)鍵就是重新封裝CH341驅(qū)動(dòng)中的并口API,以實(shí)現(xiàn)適配器CAN總線接口的API。驅(qū)動(dòng)SJA1000進(jìn)入目標(biāo)總線狀態(tài),主要是對(duì)其功能寄存器進(jìn)行合理配置,包括控制、命令、驗(yàn)收代碼、驗(yàn)收屏蔽、總線時(shí)序等寄存器。這些操作均需要對(duì)指定地址進(jìn)行字節(jié)數(shù)據(jù)讀寫(xiě)的API函數(shù)[69]。依據(jù)SJA1000的讀寫(xiě)時(shí)序,其讀寫(xiě)API編寫(xiě)如下(0號(hào)設(shè)備):