LIN協(xié)議是新出現(xiàn)的一種新型低成本串行通信總線,其全稱是Local Interconnect Network,即局部互聯(lián)網(wǎng)絡(luò)。它最開始出現(xiàn)于汽車行業(yè),是為解決汽車智能化和網(wǎng)絡(luò)化的發(fā)展要求和降低汽車制造成本的矛盾而提出來的一種串行總線協(xié)議,主要用于車門、車燈等需要簡單控制但又要求智能控制的場合。它的主要特點是:采用單個主控制器/多從設(shè)備通信模式;基于普通UART/SCI接口硬件實現(xiàn),協(xié)議簡單;網(wǎng)絡(luò)傳輸速率不高,最高可達20kb/s。由于LIN協(xié)議的突出特點是協(xié)議對硬件的依賴程度低,可以基于普通單片機的通用串口等硬件資源以軟件方式實現(xiàn),成本低廉,因此可廣泛應(yīng)用于汽車行業(yè)以外的其他領(lǐng)域,如智能家庭網(wǎng)絡(luò)內(nèi)部的數(shù)據(jù)傳輸、節(jié)點控制等場合。
本文依據(jù)對LIN協(xié)議的分析,對其協(xié)議在普通單片機上的具體實現(xiàn),即如何利用單片機有限的硬件資源實現(xiàn)LIN的主節(jié)點、從節(jié)點,進行可行性方案的研究、探討。
2 LIN協(xié)議的簡介
LIN協(xié)議的最新版本是LIN Specification Package Revision 2.O,包括協(xié)議規(guī)范、節(jié)點診斷配置規(guī)范、物理層規(guī)范、API規(guī)范等幾個方面,從硬件配置到節(jié)點配置語言都作了詳細的規(guī)定。下面就其協(xié)議規(guī)范作一簡要介紹和分析。
LIN的數(shù)據(jù)傳輸是采用報文幀的形式進行的。一個完整的報文幀由1個主機節(jié)點發(fā)送的報文頭(header)和1個主機或從機節(jié)點發(fā)送的響應(yīng)(response)組成,如圖1所示。報文頭包括1個間隔場(break)、1個同步字節(jié)場(synch)和1個保護標識符字節(jié)場PID(Protected IDentifier)。間隔場是由持續(xù)了至少13個位時的顯性電平和至少1個位時的隱性電平組成;由主機節(jié)點產(chǎn)生,標志著一次數(shù)據(jù)通信過程報文幀的開始。同步字節(jié)場包含時鐘同步信息。同步字節(jié)場的格式是0x55,表現(xiàn)在8個位定時中有5個下降沿,即隱性跳變到顯性的邊沿。

下一步,所有的從機節(jié)點以計算得到的波特率來接收報文頭的保護標識符字節(jié)場。
保護標識符字節(jié)場PID(Protected IDentifier)與標準的串行通信數(shù)據(jù)幀格式相同,由1位起始位和1位停止位及8位數(shù)據(jù)位組成,屬于數(shù)據(jù)場,如圖2所示。
保護標識符字節(jié)場由兩部分組成:標識符和標識符奇偶校驗。ID0~ID5屬標識符,確定了標識符的內(nèi)容,可從0~63取值。其中,0~59(0x3b)用于信號傳送幀,60(0x3c)和61(0x3d)用于傳送診斷數(shù)據(jù),62(0x3e)保留用于用戶定義的擴展,63(0x3f)保留用于將來協(xié)議升級。奇偶校驗位P0和P1則是對標識符位ID0~ID5的奇校驗和偶校驗,作為對接收到ID的校驗措施,以確保接收ID的正確性。
報文幀的響應(yīng)(response)由3~9個字節(jié)場(data field)組成,包括2、4或8字節(jié)的數(shù)據(jù)場(data field)和1個校驗和場(checksum)。它們是由要發(fā)送數(shù)據(jù)的節(jié)點(主機節(jié)點或從機節(jié)點)所發(fā)送的數(shù)據(jù)和校驗場所組成,都屬于數(shù)據(jù)場。
校驗和場(checksum)有兩種:一般的校驗和場與增強的校驗和場。一般的校驗和是數(shù)據(jù)場所有字節(jié)數(shù)據(jù)和的反碼。和是按帶進位加(ADDC)方式計算,所有數(shù)據(jù)字節(jié)和的補碼與校驗和字節(jié)相加的和必須是“0xFF”。增強的校驗和與一般的校驗和的區(qū)別在于計算數(shù)據(jù)場和時加上了保護標識符字節(jié)場。
3 LlN協(xié)議在普通單片機上的實現(xiàn)
現(xiàn)在單片機種類繁多,硬件資源各不相同,功能也千差萬別?傮w來講,基于普通單片機軟件實現(xiàn)LIN協(xié)議的方法可分為兩大類:一種是基于單片機通用串口的實現(xiàn)方式,另一種是基于單片機兩個普通端口位的位操作實現(xiàn)方法。
3. 1基于單片機通用串口LlN協(xié)議的實現(xiàn)
基于單片機通用串口的LIN協(xié)議的實現(xiàn)方法主要是針對具有通用串口的單片機來講的。這類單片機的代表當屬最常用的51系列單片機,如Atmel公司的AT89C51/52。
(1)基于單片機串口LlN主節(jié)點的實現(xiàn)
由LIN協(xié)議的分析可知,在一次幀通信過程中,主從節(jié)點在大部分時間里是以標準的串行通信數(shù)據(jù)幀的形式交換數(shù)據(jù)的,這也是LIN協(xié)議可以基于單片機通用串口實現(xiàn)的原因。幀通信的關(guān)鍵是要實現(xiàn)主節(jié)點和從節(jié)點的同步。在同步過程中,主、從節(jié)點所執(zhí)行的操作是不同的:主機節(jié)點的任務(wù)是要發(fā)送報文頭,從節(jié)點的任務(wù)是接收和判斷報文頭,實現(xiàn)與主節(jié)點的同步。報文頭的間隔場是一個基于主機節(jié)點時鐘頻率的13個以上位時(bit time)和至少1個位時的間隔界定符。對主節(jié)點來講,這一部分是實現(xiàn)主節(jié)點功能的關(guān)鍵。間隔場和間隔界定符的實現(xiàn)可采用改變串口波特率,用串口輸出特定數(shù)據(jù)的方法來實現(xiàn)。例如在一般情況下,單片機采用19.2kb/s波特率的速率傳輸數(shù)據(jù),可先將串口的波特率設(shè)置為9.6kb/s,則傳輸0xc0這樣一個數(shù)據(jù)就可以實現(xiàn)按照19.2kb/s的波特率來計算位時的同步間隔和同步間隔界定符的位時長度要求(因若采用19.2kb/s的傳輸率傳輸00數(shù)據(jù)只能實現(xiàn)10個位時的同步間隔符,無法達到13個位時的要求)。隨后的PID場的發(fā)送和數(shù)據(jù)場的發(fā)送或接收,可以基于單片機的通用串口以正常的19.2.kb/s的波特率來操作。
基于串口LlN主節(jié)點硬件原理如圖3所示。

(2)基于單片機串口LlN從節(jié)點的實現(xiàn)
從節(jié)點實現(xiàn)的關(guān)鍵是能夠正確實時地接收報文頭,達到與主節(jié)點的同步,為下一步的數(shù)據(jù)交換做好準備;趩纹瑱C通用串口構(gòu)成的LIN從節(jié)點的實現(xiàn)方案有兩種:一種是查詢方式,另一種是中斷方式。兩種方法的區(qū)別在于報文頭接收判斷方法的不同。查詢方式硬件原理如圖4所示。





