周建斌, 萬文杰, 趙 祥, 劉 易, 周 偉, 王 敏
(成都理工大學 核技術與自動化工程學院,成都 610059)
基于ARM實現(xiàn)高速CAN轉USB
周建斌, 萬文杰, 趙 祥, 劉 易, 周 偉, 王 敏
(成都理工大學 核技術與自動化工程學院,成都 610059)
設計了一款體積小、成本低、可靠性高的具有普適性的高速CAN轉USB適配器。以STM32F107系列微處理器作為核心,USB接口部分采用STM32內部USB控制器,CAN接口采用STM32內部的CAN控制器并且外接帶隔離的CAN收發(fā)器CTM1050。開發(fā)過程中創(chuàng)建了數(shù)據(jù)傳輸協(xié)議,對需傳輸?shù)臄?shù)據(jù)有固定的傳輸格式,進行數(shù)據(jù)甄別后再傳輸數(shù)據(jù),保證了數(shù)據(jù)傳輸?shù)恼_性和可靠性。設計中,ID并不是固定值,而是獲取對方發(fā)送過來的ID。對CAN接收的數(shù)據(jù)進行打包成標準格式幀,以便傳入上位機后了解傳輸數(shù)據(jù)特性。經過多次現(xiàn)場實驗測試表明:該設備可以實現(xiàn)USB和CAN協(xié)議的數(shù)據(jù)轉換,完成CAN側數(shù)據(jù)收發(fā),CAN側具有不同的ID以及不同的幀類型都可進行傳輸。該系統(tǒng)能以500 Kb/s長時間穩(wěn)定運行。
通用串行總線; 控制器局域網; 數(shù)據(jù)傳輸協(xié)議
CAN總線因具有傳輸距離遠、傳輸速率高、抗干擾能力強、易于組網等獨特優(yōu)越性能具有越來越廣闊的發(fā)展前景[1-2]。CAN總線在數(shù)據(jù)通信方面具有可靠性高、靈活性和實時性強優(yōu)點,但是一直缺乏與主機進行高速通信且易于使用的接口,此時就需通過一種適配器進行轉換。USB作為一種方便、靈活、簡單且即插即用的通用串行總線[3-4],可使CAN總線方便高速的與主機進行連接,因此,USB轉CAN 得到了迅速的發(fā)展及應用[5-10]。
本文設計的USB轉CAN的轉換器,基于Keil在STM32F107開發(fā)板上采用C語言開發(fā)固件程序;基于C#開發(fā)上位機程序。對于現(xiàn)在大多工業(yè)上的應用由于元器件性能的限制,CAN的波特率還比較低,此設計大大提高了CAN傳輸?shù)牟ㄌ芈剩€具有較高的普適性,可適用于多種儀器設備。而且數(shù)據(jù)在傳輸過程中因通信系統(tǒng)本身或環(huán)境等干擾易造成傳輸數(shù)據(jù)出錯,故對信息進行檢錯很有必要[11]。本設計提出了數(shù)據(jù)傳輸協(xié)議,即滿足了信息傳遞的實時性,又提高了數(shù)據(jù)傳輸?shù)恼_性。
1.1 主控芯片選擇
本系統(tǒng)主控部分采用STM32F107作為核心處理器。STM32F107是意法半導體公司根據(jù)ARM公司最新推出的Cortex-M3來生產的一款高性能ARM微處理器。以其低成本、低功耗、高性能獲得廣泛應用。內部集成1個USB控制器和2個CAN控制器,芯片內部可以通過RAM來通信。不會出現(xiàn)如STM32F103因具有1個USB控制器和1個CAN控制器,在同一個應用中不能同時使用而需增加外部模塊的問題[12]。STM32F107的外設已經滿足設計需求。這樣既避免了使用外部模塊帶來的額外通信損耗,又節(jié)約了制作成本。其工作頻率為72 MHz,運行速度比一般的單片機快得多,其性能足夠完成數(shù)據(jù)轉換。
1.2 CAN收發(fā)器芯片選擇
集成于STM32F107內的CAN控制器主要是解析CAN物理層上的數(shù)據(jù)幀將其還原成數(shù)據(jù)鏈路層上的數(shù)據(jù),不能直接驅動CAN物理總線[13]。CTM1050是一款帶隔離的高速CAN收發(fā)芯片,為標準CAN控制器接口,支持各種CAN控制器。該芯片內部集成了所有必須的CAN隔離及CAN收、發(fā)器件。它的主要功能是將CAN控制器的邏輯電平轉換為CAN總線的差分電平,并且具有對CAN控制器與CAN總線之間的隔離。通信速率最高可達1 Mb/s。
1.3 電路設計
基于ARM的USB轉CAN設計以STM32F107單片機為核心,外加CAN電平轉換。其硬件模塊組合如圖1所示。整個轉換器不設外接電源,直接從USB接口取電,USB供電電路設計如圖2所示。
圖1 硬件模塊示意圖
經過2個Π型濾波電路,將USB提供的5 V電壓轉換為3.3 V電壓供給芯片使用,保證了電路在工作過程中穩(wěn)定運行。
2.1 數(shù)據(jù)傳輸協(xié)議
現(xiàn)有的在USB轉CAN中數(shù)據(jù)傳輸大多都是透明傳輸[14-16],在保證傳輸質量的前提下,只負責將需要傳送的業(yè)務傳送到目的節(jié)點。這種傳輸因不會對傳輸?shù)臉I(yè)務進行處理,一旦傳輸線受到環(huán)境干擾引起數(shù)據(jù)改變,則可能將錯誤的數(shù)據(jù)進行傳輸。為此,本文提出創(chuàng)建數(shù)據(jù)傳輸協(xié)議,有固定的傳輸格式,先對傳來的數(shù)據(jù)進行頭甄別,若滿足本設計所約定的格式則認為數(shù)據(jù)有效,然后才進行相關數(shù)據(jù)傳輸,保證了數(shù)據(jù)傳輸?shù)恼_性和可靠性。其具體內容如下。
將一幀數(shù)據(jù)定義為:①數(shù)據(jù)頭 AA 55(2 byte);②幀信息 08(1 byte);③數(shù)據(jù)ID號 0020(2 byte);④數(shù)據(jù)BODY XX…XX(8 byte)。
圖2 USB供電電路設計
一幀數(shù)據(jù)有13 byte,每個字節(jié)有8 bit。字節(jié)分配情況如圖3所示。第0個和第1個字節(jié)為數(shù)據(jù)頭,第2個字節(jié)為獲取信息,該字節(jié)的第7位為判斷數(shù)據(jù)為擴展幀還是標準幀的標識,為擴展幀則置為1,標準幀則置為0;第6位為判斷數(shù)據(jù)為遠程幀還是標準幀的標識,為遠程幀置為1,數(shù)據(jù)幀置為0;第3到0位存放數(shù)據(jù)長度。第3、4字節(jié)用于存放獲取的數(shù)據(jù)ID。第5到12位則用于存放獲取的數(shù)據(jù)。
圖3 一幀數(shù)據(jù)的完整解析
2.2 STM32內核固件設計
STM32內核部分固件主要工作就是初始化模塊和數(shù)據(jù)處理。在STM32F107內部,有分別屬于CAN模塊和USB模塊的FIFO。其功能模塊可如圖4所示。
圖4 STM32功能模塊圖
一旦CAN接受到數(shù)據(jù)后先將其存入CAN的FIFO中,然后再通過USB模塊讀取傳至上位機。當USB接受到數(shù)據(jù)后先將其存入USB的FIFO中,然后再通過CAN模塊讀取傳至下位機。
固件應用程序流程圖如圖5所示,固件首先初始化系統(tǒng)時鐘,保證系統(tǒng)運行在72 MHz實時時鐘上,然后初始化CAN模塊,初始完成后初始化USB模塊。判斷CAN模塊的FIFO中是否有數(shù)據(jù),若有數(shù)據(jù)則通過USB模塊傳出;判斷USB的FIFO中是否有數(shù)據(jù),若有數(shù)據(jù)則通過CAN模塊發(fā)送至下位機。在固件程序主循環(huán)中只要工作就是將隊列中的數(shù)據(jù)取出來,通過CAN或USB發(fā)送出來。
圖5 固件應用程序流程圖
固件應用程序中斷服務子程序如圖6、7所示。
USB接收中斷實現(xiàn)過程為:USB將當前已讀的字節(jié)讀出來,找出開頭為AA的數(shù)據(jù),再找出下一個為55的數(shù)據(jù),滿足這兩個條件說明找到數(shù)據(jù)頭,表明下一個到來的字節(jié)即為q.data[2],此時可直接將q.data[2]的后4位作為該幀數(shù)據(jù)的數(shù)據(jù)位長度。然后再依次讀取該數(shù)據(jù)位長度+2個字節(jié)就認為該幀數(shù)據(jù)已經接收完成。最后對數(shù)據(jù)進行打包入隊。
圖6 USB中斷流程圖 圖7 CAN中斷流程圖
因USB發(fā)送數(shù)據(jù)時直接發(fā)送至上位機不許要對數(shù)據(jù)進行解析,故在此不做說明。
CAN接收中斷具體實現(xiàn)過程為:①將一幀數(shù)據(jù)定義為一個q.data數(shù)組,然后初始化RxMessage結構體,其中包括將數(shù)據(jù)ID初始化為0,因在本設計中為了使設計的適配器具有普適性,ID并不是固定值,而是獲取對方發(fā)送過來的ID。②對數(shù)據(jù)進行寫頭,具體為q.data[0]=0XAA, q.data[1]=0X55;③初始化q.data[2],然后判斷該數(shù)據(jù)為擴展幀還是標準幀,判斷完后在對應的ID緩存器中取出ID值,并將讀出的ID分為兩個字節(jié)分別存入q.data[3]、q.data[4]。若為擴展幀,則從擴展幀緩存器中讀取ID值,并將q.data[2]的第7位置為1作標識,若為標準幀,則從標準幀緩存器中讀取ID值,并將q.data[2]的第7位置為0作標識。然后再判斷數(shù)據(jù)為遠程幀還是數(shù)據(jù)幀,若為遠程幀則將q.data[2]的第6位置為1作標識,否則置為0。最后在從RxMessage.DLC中獲取數(shù)據(jù)長度放于q.data[2]的后4位。④然后根據(jù)獲取的長度從RxMessage.Data中取出數(shù)據(jù)依次放于q.data的數(shù)據(jù)存放位中。⑤將一幀數(shù)據(jù)打包插入CAN的FIFO隊列。
CAN發(fā)送數(shù)據(jù)實現(xiàn)過程需要對USB發(fā)送過來的數(shù)據(jù)進行解析。分析過程如下:若USB發(fā)送過來1幀數(shù)據(jù),則首先要解析該數(shù)據(jù)是擴展幀還是標準幀,具體可由q.data[2]&0x80實現(xiàn),若相與后值為0x80,則表明該數(shù)據(jù)是擴展幀,否則為標準幀;然后解析該數(shù)據(jù)為遠程幀還是數(shù)據(jù)幀,可由q.data[2]&0x40來實現(xiàn),若相與后值為0x40則表明該數(shù)據(jù)為遠程幀,否則為數(shù)據(jù)幀;之后將q.data[2]的后4位數(shù)據(jù)長度賦值給TxMessage.DLC寄存器;再根據(jù)獲取的長度將相應的數(shù)據(jù)寫入TxMessage.Data;最后通過CAN_Transmit函數(shù)將此幀數(shù)據(jù)發(fā)送給下位機。
2.4 設備驅動程序及上位機軟件的設計
對設備的驅動程序,直接采用意法半導體公司官網提供的STM32的USB虛擬串口驅動程序,這樣大大縮短了我們的開發(fā)周期。因涉及的轉換器應具有普適性的性質,即上位機軟件的設計因應用場景和要求不同,故所設計的上位機軟件都可以通過編程訪問驅動來讀取數(shù)據(jù)和發(fā)送數(shù)據(jù)。
本文采用了STM32+CTM1050兩塊低成本的芯片設計了一款速率可在500 Kb/s長時間穩(wěn)定運行的USB轉CAN適配器。經過多次測試表明該設備可以實現(xiàn)USB和CAN協(xié)議的數(shù)據(jù)轉換,完成CAN側數(shù)據(jù)收發(fā)。尤其在使用數(shù)據(jù)傳輸協(xié)議的情況下大大提高了數(shù)據(jù)的準確性。
[1] 饒運濤,鄒繼軍. 王進宏,等.現(xiàn)場總線CAN原理與應用技術[M].2版.北京:北京航空航天大學出版社.
[2] 韓成浩,高曉紅. CAN總線技術及其應用[J]. 制造業(yè)自動化,2010(2):146-149.
[3] 李宏凱. USB2.0總線技術在數(shù)據(jù)采集系統(tǒng)中的應用[D].南京:南京航空航天大學,2006.
[4] 劉 丁,毛德柱,王云飛. USB在數(shù)據(jù)采集系統(tǒng)中的應用[J]. 電子技術應用,2000(4):37-39.
[5] 岳彬彬,李向陽. 基于CotexM3的USB-CAN轉換器開發(fā)[J]. 計算機工程與科學,2012(5):68-72.
[6] 周 震. 基于CAN總線的車身控制模塊[D].南京:南京航空航天大學,2005.
[7] 黃學勤. 基于CAN總線的汽車燈控網絡系統(tǒng)的設計與實現(xiàn)[D].南京:南京農業(yè)大學,2006.
[8] 曲鳳麗. 汽車網絡研究及CAN總線網絡拓撲的優(yōu)化[D].杭州:浙江大學,2008.
[9] 袁傳義. 電動汽車CAN總線的研究[D].合肥:安徽農業(yè)大學,2004.
[10] 袁 強. 基于CAN總線的汽車儀表研究[D].重慶:重慶大學,2006.
[11] 李會如. 實時監(jiān)控系統(tǒng)中的數(shù)據(jù)通信校驗及其實現(xiàn)方法[J]. 郵電設計技術,1998(11):15-19.
[12] 劉純虎,付 斌,盛慶華. 基于STM32的微型USB-CAN適配器開發(fā)[J]. 計算機測量與控制,2013(4):996-998,1007.
[13] 陳紅衛(wèi). 基于Cortex-M3的USB轉CAN研究與實現(xiàn)[D].長沙:中南大學,2013.
[14] 鄭雅偉. 基于ARM Cortex3的低功耗無源USB-CAN透明傳輸?shù)膶崿F(xiàn)[J]. 山西電子技術,2013(6):52-54.
[15] 程 焱. 基于USB接口的CAN總線控制系統(tǒng)的設計[D].成都:西南交通大學,2005.
[16] 范新峰. CAN總線與USB的轉接技術[J]. 電子元器件應用,2007(5):41-43.
Implementation of Conversion between USB and CAN Based on ARM
ZHOUJianbin,WANWenjie,ZHAOXiang,LIUYi,ZHOUWei,WANGMin
(College of Applied Nuclear Technology & Automation Engineering, Chengdu University of Technology, Chengdu 610059, China)
This paper studied the design of a general high-speed USB and CAN converter, which has small volume, low cost, high reliability. STM32F107 was used as the core of converter, the USB interface part adopted USB controller from internal of STM32, the CAN interface used CAN controller from internal of STM32 with external connection of CAN transceiver CTM1050. Data transfer protocol was created, the protocol needed a fixed transmission format and screen data before transmitting data. The ID unfixed was acquired from the other side of the ID. The data received by CAN were packaged into standard format of data frame, so that the data transmission characteristics could be easily found when data were transferred to a PC. A lot of tests showed that this equipment can realize the conversion between USB and CAN, the system runs stably for a long time with 500 Kb/s.
universal serial bus(USB); controller area network(CAN); data transfer protocol
2016-08-05
四川省卓越工程師教育培養(yǎng)計劃(核工程與核技術)(11100-15Z006/064)
周建斌(1971-),男,湖南桃源人,博士,教授,從事核測量儀器及相關軟件的研究。
Tel.:13881925909;E-mail: zjb@cdut.edu.cn
TL 821
A
1006-7167(2017)03-0129-04