Freescale LIN總線應用開發(fā)平臺
摘要:CAN/LIN(Local Interconnect Network)總線的引入帶來了車身電子控制的模塊化和智能化。在低速的車身控制條件下,與CAN總線相比較,LIN總線控制方案成本較低是最大的優(yōu)勢。本文介紹了基于Freescale半導體公司(原摩托羅拉半導體部)的單片機(MCU)和智能模擬器件的LIN總線Demo系統(tǒng),為汽車電子用戶提供了一種能快速掌握的車身LIN總線控制的開發(fā)平臺。
關鍵詞:汽車電子;車身電子;總線;LIN
引言
在汽車電子系統(tǒng)中,主要存在如圖1所示的幾種網(wǎng)絡協(xié)議。LIN主要應用低速(<20Kb/s)的車身控制環(huán)境,低速CAN多用于事件驅(qū)動的控制環(huán)境(125Kb/s),高速CAN(>500Kb/s),F(xiàn)lexray和Byteflight主要應用于時間驅(qū)動的同步高速控制環(huán)境,而D2B和MOST主要應用于汽車娛樂(圖像和語音)的傳輸和控制。
就車身控制而言,主要的應用基于CAN/LIN總線協(xié)議。基于CAN總線車身控制,在汽車電子上已經(jīng)有廣泛的應用。隨著車上總線節(jié)點的增加及高性能系統(tǒng)向中低檔汽車的發(fā)展,CAN總線相對較高的實現(xiàn)成本就成為一種障礙。因此LIN總線隨之產(chǎn)生。由于LIN硬件的實現(xiàn)是基于普通的串行通信接口(SCI),甚至在子節(jié)點中可以用普通I/O口加上定時器進行模擬,所以其實現(xiàn)成本較低。LIN的目標應用是不需要CAN的性能、帶寬及復雜性的低端系統(tǒng)。通常LIN子總線是現(xiàn)有的CAN網(wǎng)絡的擴充,與CAN網(wǎng)絡一起形成汽車的控制網(wǎng)絡(圖2)。當然,由于其成本較低,也可以獨立用于不是特別復雜的車身控制網(wǎng)絡中。
為了加速基于LIN總線控制系統(tǒng)的開發(fā)周期,F(xiàn)reescale半導體公司開發(fā)了LIN開發(fā)平臺(LIN DEMO)。LIN DEMO系統(tǒng)提供了完整的軟件和硬件,其中,軟件包括標準的LIN底層驅(qū)動軟件和LED顯示的應用軟件。用戶可以在此平臺上很快的搭建起LIN控制網(wǎng)絡
LIN DEMO應用系統(tǒng)
DEMO節(jié)點
LIN DEMO由2個主節(jié)點(9S12C32和MC68HC908GZ60)和4個從節(jié)點(MC68HC908GR60、MC68HC908EY16、MC68HC908QY和MC68HC908QL組成。每個LIN節(jié)點上,都提供了調(diào)試和編程接口(BDM接口(16位單片機)和CYCLONE/Multilink08接口(8位單片機)),同時每個節(jié)點還有1個RS232的串口,可以和PC通信。主節(jié)點有兩種工作模式,兩種模式的切換由1個轉(zhuǎn)換開關來控制。
LIN總線睡眠模式(此模式下,與主節(jié)點相連的所有從節(jié)點都處于睡眠模式,主節(jié)點不發(fā)送任何幀頭。)
LIN總線工作模式(此模式下,主節(jié)點發(fā)送幀頭,LED燈用來顯示從節(jié)點LED的狀態(tài)。)
LIN總線工作模式下,主節(jié)點LED顯示LED狀態(tài)有變化的從節(jié)點LED狀態(tài)。每個從節(jié)點有4個LED燈,這些燈的狀態(tài)可以通過1個單片機的鍵盤中斷引腳來改變。主節(jié)點有8個LED燈,其中的右邊(低位)4個LED用來顯示從節(jié)點LED燈的狀態(tài),另外的左邊(高位)4個LED燈用來從節(jié)點的類型和ID號,其中2個用來顯示節(jié)點類型(GR、EY、QY和QL),另外2用來顯示和此從節(jié)點類型相匹配的節(jié)點ID號最低的兩位。
這樣主節(jié)點上左邊(高位)4個LED為i*16的高4位。同時,主節(jié)點上右邊(低位)4個LED用來顯示從節(jié)點LED的數(shù)值(同樣次序的LED燈亮)。
所有的從節(jié)點可以在不斷電情況下加入或者脫離總線。當監(jiān)測到有新的從節(jié)點加入,主節(jié)點從0到7清除主節(jié)點的LED,然后把該節(jié)點存入主節(jié)點LED的顯示序列。當監(jiān)測到有節(jié)點脫離總線時候,主節(jié)點從7到0清除主節(jié)點的LED,然后從主節(jié)點LED的顯示序列去掉該從節(jié)點。
正常工作模式下,復位后,每個從節(jié)點響應對于該從節(jié)點ID(可以重新配置)的主接點幀頭,響應的數(shù)據(jù)定義為2個字節(jié)。按動從節(jié)點上的開關,可以增加從節(jié)點上LED的值(從1到15,除去全為零的情況)。當從節(jié)點上的LED值變化之后,主接點上的LED的右邊(低位)4個LED將顯示對應從節(jié)點上LED的值。
在模式配置模式下,用戶可以改變從節(jié)點的ID。從節(jié)點的LED用來顯示本節(jié)點的ID號。從節(jié)點上第一位的LED點亮,表示XXXXXX00;第二位的LED點亮,表示XXXXXX01;第三位的LED點亮,表示XXXXXX10;第四位的LED點亮,表示XXXXXX11。
當所有的從節(jié)點連接到主節(jié)點并且工作正常的時候,通過撥動主節(jié)點上的1個開關,我們可以很容易的讓從節(jié)點進入睡眠狀態(tài)。撥動此開關到OFF檔,5秒鐘以后,GR60和EY16就進入了睡眠(QY4不支持此操作)。
MC68HC908EY16的基本電路原理圖,它包含了LIN節(jié)點和3個跳線。值得注意的是,這些跳線只是在對芯片編程和調(diào)試的時候用到。對芯片編程和調(diào)試時,需要用到Freescale的開發(fā)工具(MULTILIN08/12、CYCLONE08),通過這些工具再和PC相連。完整的電路圖,還包括一些編程接口和雙排接口(連接MCU的引腳到其他的應用中)。
基本的LIN節(jié)點電路圖比較簡單,主要包括MCU,LIN物理層接口和1個5V的電壓調(diào)節(jié)器。本電路中,物理層接口用MC33399,電壓調(diào)節(jié)器用的是LT1121,可以被Freescale一顆新的系統(tǒng)基礎芯片(SBC)所替換。MCU允許MC33399控制電壓調(diào)節(jié)器。當LIN總線上沒有任何活動時,MC33399控制電壓調(diào)節(jié)器LT1121停止工作,從而使MCU掉電,使LIN從結(jié)點進入睡眠狀態(tài),整個從節(jié)點的靜態(tài)電流將小于50微安。在從結(jié)點的電路板(除去QY4)上,我們可以看到所有的LED燈都關閉了(程序的最初設計,使得當MCU上電后,總是有1個LED燈是亮)。
其他節(jié)點得電路圖和MC68HC908EY16的差不多。48腳的GR60主要是用于一些高端應用的LIN節(jié)點中,但是GR60沒有內(nèi)部時鐘,需要外接1個時鐘。GZ60和GR60比較接近,但是,GZ60主接點上多出了1個MC33388的CAN接口。C32是16位單片機,和8位單片機相比,它有了BDM模塊,相對于8位單片機的MULTILINK接口,調(diào)試簡單了很多。
DEMO軟件結(jié)構(gòu)
1.主節(jié)點的軟件結(jié)構(gòu)
主節(jié)點的軟件流程圖。在單片機和LIN驅(qū)動程序初始化以后,通過主節(jié)點PCB板上的1個開關,調(diào)整LIN是否被允許工作。如果睡眠,主節(jié)點上的LED燈會關閉;如果LIN總線工作,則主函數(shù)Main將會周期的發(fā)送幀頭到從節(jié)點。所有的ID號(如表1)在idList[16]中定義。如果函數(shù)LIN_MSG_STATUS()顯示有對應于幀頭的特定ID,從節(jié)點有反應,則反饋回來的數(shù)據(jù)被讀取,同時,檢查idActiveList[16]判斷這是否為新的LIN從節(jié)點,如果是,則idActiveList[16]對應的位置1,然后NewNode()函數(shù)被執(zhí)行,節(jié)點的LED燈顯示有新的節(jié)點加入。[!--empirenews.page--]
如果對應于幀頭的特定ID,從節(jié)點沒有反饋,則檢查idActiveList[16]判斷對應的位置是否為1,如果為1,則表明有節(jié)點被除去。同時,LostNode()函數(shù)執(zhí)行,節(jié)點的LED燈顯示有節(jié)點丟失。
2.從節(jié)點的軟件結(jié)構(gòu)
首先,配置寄存器(CONFIG),I/O寄存器和定時器寄存器初始化。初始化完成后,進入主程序While(1)循環(huán)。對GR60和EY16,程序中的定時由時間基準模塊來實現(xiàn)(TBM)。由于QY4沒有時間基準模塊(TBM),所以程序中的定時由定時器來實現(xiàn)。由于不同的從節(jié)點上,時鐘不一樣,所以每個從節(jié)點執(zhí)行完1個主程序程序環(huán)的時間也不一樣。程序中我們用#Define定義了2個時間周期:按一次開關的時間(按下和跳起,60毫秒)和持續(xù)按住開關的時間(3秒)。對于第3個定時(LIN總線持續(xù)5秒沒有活動,則進入睡眠)在文件Slave.cfg中定義。
是LIN從節(jié)點的主軟件結(jié)構(gòu)。當完成初始化工作,進入主循環(huán)之后,如果LIN總線5秒鐘沒有活動,則進入睡眠狀態(tài);如果由,則查看按鍵(開關)的類型判斷是進入ID節(jié)點的配置模式,還是進入正常模式。如果是正常模式,則將數(shù)據(jù)(DATA)寫入LED,若進入ID節(jié)點配置模式,則配置ID,然后將ID寫入LED。
是按鍵軟件流程圖。首先判斷按鍵有沒有被按下,如果有則計算按鍵被按下的時間。如果按鍵按下的時間超過3秒,則進入節(jié)點ID配置模式(從0到4,然后再到0,反復進行);如果按鍵按下的時間為60毫秒,則數(shù)據(jù)(DATA)加1,然后用這個數(shù)據(jù)給LED顯示,同時反饋給主節(jié)點(主節(jié)用LED顯示此數(shù)據(jù))。
3.LIN底層驅(qū)動軟件
前面的兩個小節(jié)我們講到了應用軟件。本小節(jié)將對LIN底層的驅(qū)動函數(shù)作一個介紹。首先是數(shù)據(jù)類型,主要的數(shù)據(jù)類型是無符號8位數(shù),惟一的一個16位數(shù),用來給地址變量(指針)。在驅(qū)動函數(shù)中,主要用到的常量有兩種,一種用來標示LIN總線的驅(qū)動狀態(tài),一種用來表示LIN傳輸過程中消息幀的狀態(tài)。由于篇幅有限,與作者聯(lián)系可獲得免費的軟件源程序??偨Y(jié)
Freescale的LIN節(jié)點通信演示平臺,提供了一個很好的LIN控制開發(fā)平臺。用戶可以基于此LIN控制開發(fā)平臺的軟件(驅(qū)動程序)和硬件非常簡單的編寫自己的應用程序(利用CODEWARRIOR集成開發(fā)環(huán)境),然后利用此平臺的底層驅(qū)動軟件和硬件環(huán)境,利用與PC相連的通信接口,燒寫程序,并進行調(diào)試。
參考文獻
1 Motorola Inc.,MC68HC908EY/D,09/2003.
2 Motorola Inc.,MC68HC908QY/D,09/2003.
3 Motorola Inc.,MC68HC908GZ/D,09/2003.
4 Motorola Inc.,MC68HC908GR/D,09/2003.
5 Motorola Inc.,MC9S12C32,2003.
6 LIN Protocol 1.3.
7 AN2573/D,2003.
8 AN2396/D,2003.