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