蔡花,朱宏翔
(西安蘭德新能源汽車技術(shù)開發(fā)有限公司,陜西 西安 710043)
基于MC9S12X的CAN 通訊的底層代碼設(shè)計
蔡花,朱宏翔
(西安蘭德新能源汽車技術(shù)開發(fā)有限公司,陜西 西安 710043)
CAN 總線因其高實時性能、高可靠性、穩(wěn)定的傳輸性能、高抗電磁干擾性,使得它在汽車業(yè)中應(yīng)用非常普遍。MC9S12X是一款高性能的16位處理器,可作為整車控制器的MCU,帶有5個CAN通訊模塊,可實現(xiàn)多路CAN 通訊。論文給出了CAN底層代碼的設(shè)計方法,并驗證了代碼,實現(xiàn)了MC9S12X與CAN助手之間的通訊,具有一定的實用價值。
MC9S12X;CAN通訊
CLC NO.: U462.1 Document Code: A Article ID: 1671-7988(2015)01-04-03
MC9S12X單片機具有豐富的I/O模塊和工業(yè)控制專用的通信模塊,采用5V供電,總線速度可達(dá)40MHz,非常適合應(yīng)用在汽車業(yè)中。在汽車級的控制器中,CAN總線是汽車各個控制單元之間聯(lián)系的紐帶,是實現(xiàn)數(shù)據(jù)交互的媒介,它的可靠運行是汽車正常行駛的前提。在選擇控制芯片時,芯片具有的CAN 模塊個數(shù)是一個重要的考慮因素,MC9S12X芯片帶有5個CAN模塊,滿足多路CAN通訊的需求。
CAN通訊的實現(xiàn)是建立在軟硬件基礎(chǔ)上,硬件電路實現(xiàn)電氣連接,軟件部分驅(qū)動硬件工作,二者缺一不可。本文論述CAN通訊的軟件實現(xiàn),建立在具有CAN功能的MC9S12X芯片 和CAN收發(fā)器這兩個硬件基礎(chǔ),實現(xiàn)MC9S12X 與CAN總線的通信,完成數(shù)據(jù)交互。
軟件設(shè)計主要是數(shù)據(jù)結(jié)構(gòu)的設(shè)計和函數(shù)接口設(shè)計這兩個方面。
CAN 通訊的實現(xiàn)需要三個函數(shù)完成:初始化函數(shù)、發(fā)送函數(shù)和接收函數(shù)。
程序代碼用C 語言編寫,使用的CAN控制器支持CAN2.0B通訊協(xié)議,可以實現(xiàn)標(biāo)準(zhǔn)幀和擴展幀兩種類型的數(shù)據(jù)傳輸。
1.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計
(1)初始化數(shù)據(jù)結(jié)構(gòu)設(shè)計:CAN 口初始化數(shù)據(jù)結(jié)構(gòu)設(shè)計
其中BaudRateKb指CAN的工作頻率,以Kb/S為單位,CanNum指CAN口編號。
(2)CAN報文數(shù)據(jù)結(jié)構(gòu)設(shè)計:發(fā)送/收報文數(shù)據(jù)類型的設(shè)計
1.2 初始化函數(shù)設(shè)計
初始化函數(shù)接口:
該函數(shù)包含一個參數(shù) *Config 結(jié)構(gòu)體指針。結(jié)構(gòu)體包含兩個成員:BaudRateKb和CanNum。
初始化函數(shù)用來完成CAN模塊的選擇(即指定由哪一個CAN模塊實現(xiàn)報文的發(fā)送或者接收),設(shè)置CAN通訊的波特率,以及設(shè)置模塊的時鐘源。MC9S12X的CAN有兩種時鐘源可選擇,一個是板級晶振時鐘,另一個是總線時鐘,由于CAN通訊對總線傳輸速率的穩(wěn)定性要求較高,所以在實際應(yīng)用中,選擇晶振時鐘作為時鐘源。
初始化函數(shù)流程如下圖:
1.3 發(fā)送函數(shù)設(shè)計
發(fā)送函數(shù)接口:
該函數(shù)包含2個參數(shù),其中一個是CAN模塊的編號,另一個是指向CAN報文的數(shù)據(jù)類型的一個指針。
參數(shù)num是用來發(fā)送CAN報文的CAN模塊號。*msg指針指向CAN報文數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)包含5個成員。成員如下所述:
Extended參數(shù)是用來區(qū)分ID 類型,該參數(shù)取零值,表示ID是11位的;該參數(shù)取1,表示的是擴展ID(29位)。
Length參數(shù)用來設(shè)置發(fā)送數(shù)據(jù)的字節(jié)數(shù),取值范圍0~8。
Remote參數(shù)用設(shè)置報文是遠(yuǎn)程幀還是數(shù)據(jù)幀。
ID參數(shù)用來設(shè)置ID標(biāo)識符。
Data[8]是存放數(shù)據(jù)的數(shù)組。
該函數(shù)的返回值是一個Can_ReturnType類型的值(0或1),表示總線正?;蛘卟徽!?/p>
CAN發(fā)送函數(shù)的功能是實現(xiàn)報文發(fā)送,包括設(shè)置報文的類型(即數(shù)據(jù)幀或者遠(yuǎn)程請求幀等),ID 類型(標(biāo)準(zhǔn)幀或者擴展幀),發(fā)送數(shù)據(jù)的長度(以字節(jié)為單位),以及發(fā)送的數(shù)據(jù)。
發(fā)送函數(shù)流程圖如下:
1.4 接收函數(shù)設(shè)計
接收函數(shù)接口:
該函數(shù)包含2個參數(shù),其中一個是CAN模塊的編號,另一個是CAN報文數(shù)據(jù)類型的一個指針。
該函數(shù)的返回值是一個Can_ReturnType類型的值(0或1),表示接收是否完成。
CAN 接收函數(shù)的功能是接收其他控制設(shè)備發(fā)送到CAN總線上的數(shù)據(jù)。
接收函數(shù)流程圖如下:
主要針對接收功能,發(fā)送數(shù)據(jù)時,兩者的差異不明顯。接收數(shù)據(jù)時,兩者的差異較大。
差異一:
(1)初始化函數(shù)設(shè)計中,查詢方式接收不要求使能接收中斷使能位,接收完成標(biāo)志位是在接收函數(shù)中清除的。
(2)中斷接收時,初始化函數(shù)中必須使能中斷使能位,接收完成標(biāo)志位在中斷函數(shù)中清除。
差異二:
查詢方式接收時,整個過程中CPU一直查詢CANRFLG_進(jìn)制RFG狀態(tài),只有當(dāng)它為1時,才接收數(shù)據(jù),否則不接收。在這個過程中CPU不能做其他的事情,一直處于檢測CANRFLG_RFG的狀態(tài),這樣會造成代碼運行效率低和CPU的浪費。
中斷方式接收時,一旦中斷標(biāo)志位置1,CPU就轉(zhuǎn)到中斷函數(shù)去處理數(shù)據(jù),當(dāng)數(shù)據(jù)處理完成,CPU會轉(zhuǎn)向原來的任務(wù)繼續(xù)執(zhí)行,這種方式不會造成CPU的浪費,提高了CPU的使用率。
在CodeWarriorv5.1中編譯和運行代碼,通過CAN助手發(fā)送8字節(jié)數(shù)據(jù)(0x01,0x02,0x03, 0x55,0x05,0x06,0x07,0x08)到CAN總線,MC9S12X對數(shù)據(jù)處理 (擴大兩倍) 之后再發(fā)送給CAN助手。試驗結(jié)果如下圖:
上圖所用的接收方式是中斷方式。
代碼設(shè)計和測試結(jié)果相一致,并且在MC9S12X上運行穩(wěn)定,實現(xiàn)了CAN通訊功能。函數(shù)接口設(shè)計采用結(jié)構(gòu)體指針方式,保證了函數(shù)接口的一致性,可移植性強。即使后期需要添加或者刪除結(jié)構(gòu)體成員時,也不會影響其他函數(shù)對此函數(shù)的調(diào)用,保證了接口的統(tǒng)一性。
[1] 孫同景,陳桂友.Freescale 9S12十六位單片機原理及嵌入式開發(fā)技術(shù)[M].北京:機械工業(yè)出版社,2008.5:(8-15),61.
Design of CAN communication underlying code based on MC9S12X
Cai Hua, Zhu Hongxiang
(Xi'an Lande New Energy Vehicle Technology Development CO., Ltd., Shaanxi Xi'an 710043)
CAN bus is very widely apply in automobile industry, which is because of its high real-time performance, high reliability, stable performance, high resistance to electromagnetic interference.MC9S12X is a 16-bit high performance processor of Freescale, can be used as a vehicle controller MCU, with five CAN communication modules, can realize multi CAN communication. This paper presents the design method of the underlying code, and verifies the code, realize the communication between the MC9S12X and CAN assistant, which has a certain practical value.
MC9S12X;CAN communication
U462.1
A
1671-7988(2015)01-04-03
蔡花,就職于西安蘭德新能源汽車技術(shù)開發(fā)有限公司。