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

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

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





