一種實(shí)用的LIN協(xié)議驅動(dòng)器的設計與實(shí)現
引言
本文引用地址:http://dyxdggzs.com/article/127529.htmLIN總線(xiàn)作為CAN總線(xiàn)的有效補充,在低端車(chē)身電子領(lǐng)域替代CAN總線(xiàn),既能滿(mǎn)足功能要求,又能節約成本,在對成本更加敏感的國產(chǎn)車(chē)上得到大規模應用。不同于CAN總線(xiàn)有專(zhuān)門(mén)的協(xié)議驅動(dòng)器,用戶(hù)不用管理底層的通信而直接進(jìn)行應用程序的編寫(xiě)[1],LIN總線(xiàn)沒(méi)有專(zhuān)門(mén)的協(xié)議驅動(dòng)器,一般需要在SCI模塊的基礎上用軟件實(shí)現其底層通信,筆者為某國產(chǎn)車(chē)設計了一款LIN主節點(diǎn)產(chǎn)品,結合LIN 2.0規范,首先介紹下LIN協(xié)議驅動(dòng)器的功能,然后從數據鏈路層、應用層兩個(gè)方面介紹協(xié)議驅動(dòng)器的關(guān)鍵設計技術(shù)。
驅動(dòng)器功能
LIN規范定義了數據格式、報文格式以及基于時(shí)間片的調度通信機制,作為L(cháng)IN主節點(diǎn),需要實(shí)現的功能包括:
1、報文的封裝和發(fā)送、接收和解析,根據報文格式填充/提取ID和數據;
2、通信管理,以調度表的方式控制時(shí)間片的輪轉和相應幀的發(fā)送;
3、網(wǎng)絡(luò )管理,休眠和喚醒;
LIN總線(xiàn)采取8N1的SCI數據格式,協(xié)議驅動(dòng)器在SCI的基礎上以軟件的形式實(shí)現。軟件就是“數據+操作”[2],作為一個(gè)可復用、移植性強的軟件模塊,其數據結構和API函數的設計是軟件模塊設計的兩個(gè)重要組成部分,下面從數據鏈路層和應用層兩個(gè)方面介紹下協(xié)議驅動(dòng)器的數據結構設計和API函數設計。
數據鏈路層
數據鏈路層主要實(shí)現LIN報文的發(fā)送及接收,報文格式如圖1所示。
LIN報文由報文頭+響應組成,報文頭包括同步間隔、同步字段和標識符三個(gè)部分,其中同步間隔為10 bit 0,同步場(chǎng)為0x55,標識符唯一標識該報文;響應包括數據和校驗兩個(gè)部分,報文數據長(cháng)度由應用層設計指定,也可以認為由標識符唯一指定,校驗和包括經(jīng)典校驗和和增強型校驗和兩種方式,均采用帶進(jìn)位加法進(jìn)行計算,不同之處在于經(jīng)典校驗和只對數據做校驗,而增強型校驗和的校驗數據中含有標識符,診斷報文采用經(jīng)典校驗和,其它報文采用增強型校驗和。
由于LIN物理層為單線(xiàn)通信,且采取一種多從的時(shí)間片輪轉方式,不存在CAN總線(xiàn)的競爭總線(xiàn)問(wèn)題[3],所以L(fǎng)IN節點(diǎn)發(fā)送數據可以回讀到同樣的數據,其報文的發(fā)送和接收可以統一在SCI的接收中斷中,以狀態(tài)機的形式實(shí)現[4],狀態(tài)對應報文的各個(gè)組成部分,狀態(tài)機跳轉條件便是數據接收中斷。根據LIN報文結構,設計如下形式的結構體:
評論