LIN總線作為一種輔助的總線網絡也是存在同步機制的,但是LIN在作為接收節點接收數據時是有自動修正總線上通訊的波特率偏差的能力的。那這是怎么做到的呢?本文將與大家深入探討。
LIN(Local Interconnect Network)是一種低成本的串行通訊網絡,用于實現汽車中的分布式電子系統控制。LIN的目標是為現有汽車網絡(例如CAN總線)提供輔助功能,因此LIN總線是一種輔助的總線網絡。在不需要CAN總線的帶寬和多功能的場合,比如智能傳感器和制動裝置之間的通訊使用LIN總線可大大節省成本。LIN 通訊是基于SCI(UART)數據格式,采用單主控制器/多從設備的模式。僅使用一根12V信號總線和一個無固定時間基準的節點同步時鐘線。
LIN幀結構
LIN幀(frame)包含幀頭(Header)和應答(Response)兩部分。幀頭包括同步間隔段、同步段以及PID(Protected Identifier,受保護ID)段,應答包括數據段和校驗和段,如圖1所示,其中值“0”為顯性電平(Dominant),值“1”為隱性電平(Recessive)。
圖1 LIN幀結構
UART的基本時序
再介紹LIN同步機制之前,我們需要介紹一下UART的基本時序,了解一下底層信號是怎么傳送的。
以波特率9600為例,可以理解為將1s分解為9600等份,對于發送端來說,每bit電平的維持時間是1/9600s,對于接收端來說,在1/9600s內要完成數據的采樣。因此對于不同時間源的設備,如何實現這個發送“節拍”以及設置接收采樣頻率非常重要。
圖2 波特率示意圖
UART的基本時序:
發送端:
圖3 發送端
接收端:
圖4 接收端
UART的每一幀數據一般有10位,分別為初始位、8位數據和結束位。對于發送端,將待發送的數據存入發送寄存器,產生起始位,即將電平拉低,隨后每1/9600s將寄存器中的數據一位一位的發送出去。當數據發送完畢后,將電平拉高等待下一次的發送。對于接收端來說首先要檢測是否有數據來,它采用下降沿檢測的方式來檢測起始位。對于數據位的采樣,選取數據位的中點位置的電平作為采樣數據,因為中點位置的電平較為穩定。假設采樣間隔為N,那么當采樣8N后,就可以停止采樣了。
LIN同步機制
LIN總線協議規定,LIN網絡主機節點必須采用較高精度時鐘,作為LIN網絡時間基準,保證位速率的準確性,而從機節點可以使用較低精度時鐘,所以主從節點的時鐘就會有頻率偏差,需要進行調整同步,否則難以保證數據的正確收發。若不進行LIN同步會有多大的影響呢?我們可通過控制器對同步間隔段識別的閾值來量化。
圖5 同步間隔段
同步間隔段由同步間隔(Break)和同步間隔段間隔符(Break Delimiter)構成,如圖5所示。同步間隔是至少持續13位(以主機節點的位速率為準)的顯性電平,由于幀中的所有間隔或總線空閑時都應保持隱性電平,并且幀中的任何其它字段都不會發出大于9位的顯性電平(LIN報文以字節域格式通訊),因此13位的同步間隔可以標志一個幀的開始,而能否識別這13位的同步間隔段就顯得尤為重要,這完全依賴于節點的一個參數-識別閾值,其計算方法如下: