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