低成本LIN總線協議在汽車網絡中的應用
圖1顯示了LIN在汽車中的典型應用。總線上的地電位信號為顯性狀態,只要任何節點將總線電壓拉低,就會出現這一狀態。當總線處于電池電壓且所有節點都使總線處于懸空狀態時,會出現隱性狀態。在空閑狀態下,總線通過上拉電阻懸空為高電平。
LIN總線的工作電壓范圍為9~18V,但總線上所有部件都必須能夠承受40V電壓。通常,單片機通過線路驅動器/接收器與總線隔離,這種方案下總線每個節點都端接為VBAT電平,主節點通過1kΩ電阻端接,從節點則通過20-47kΩ的電阻端接。總線最大設計長度為40米。
每個字節都利用起始位和停止位作為頭尾標志位。起始位與空閑狀態相反,為0,而停止位則等同空閑狀態(即1)。在每個字節內,數據從最低位(LSB)開始傳送。
報文協議
主節點用于控制LIN總線,它通過對從節點進行查詢,將數據發布到總線上。從節點僅在主節點的命令下發送數據,從而在無需仲裁的情況下實現雙向通訊。報文的傳送是在主節點發出一個同步間隔脈沖后開始的,然后跟隨的是同步字段和報文字段。主節點通過在每個報文的開始處發送同步字段可設定整個總線時鐘。
每條報文的第二字節是一個標識符字節,它告訴LIN總線隨后將發送的是什么數據,并指明哪個節點應該應答及應答的長度是多少。對于給定的命令,只有一個從節點可以應答。
從節點僅在主節點的控制下在LIN總線上發送數據。一旦數據發布到總線上,任何節點都可以接收該數據。因此,一個從節點向其它從節點發送數據無需主節點干預。
由于LIN協議使用低成本RC振蕩器,因此從節點必須檢測主節點每次發送的波特率,并調整為當前速率,所以每次通訊都以同步字段開始,它是一個0、1交替出現的字節。
同步字段之后是標識符字段,它告訴LIN總線接著出現的內容。該字段進一步分為三個子字段:4位(0-3)用于對總線上的設備進行尋址;2位(4-5)指明此后報文的長度,最后2位(6-7)用于奇偶校驗。
除休眠命令之外,LIN協議沒有定義任何報文的內容,其它命令是在具體應用中定義的。
錯誤檢測
以下錯誤必須在每一節點處進行檢測和計數,一旦出現錯誤,該命令就要被丟棄,并記錄這一錯誤事件。位錯誤——正在發送的節點應該對希望發送的數據與總線上實際出現的數據進行比較,控制器必須等待足夠時間以確保總線對發出的數據做出反應,然后才可測試這一數據。假定總線響應信號的最小邊沿變化速率為1V/μs,最大總線電壓為18V,那么發送器應等待18μs后才可進行測試。校驗和錯誤——每條報文的數據內容都受到校驗和字節的保護,該字節是數據字節相加后取256模的余數再取反的結果。奇偶校驗——命令字節使用2個奇偶位來保護其它6個數位,這兩個數位在接收后要重新計算,再與接收結果進行比較。
評論