Global Sources
電子工程專輯
 
電子工程專輯 > 介面技術
 
 
介面技術  

用於汽車網路的LIN協議分析

上網時間: 2004年12月15日     打印版  Bookmark and Share  字型大小:  

關鍵字:LIN Protocol  LIN協議,I2C Bus,I2C匯流排,RS232  PICmicro  CAN 

LIN協議適用於汽車內進行低成本、短距離、低速網路通訊,其用途是傳輸開關設置狀態以及對開關變化響應。本文詳細分析了LIN匯流排協議的特性、消息協議的組成、檢錯機制等,並介紹如何基於PICmicro元件來實現LIN匯流排從節點。

LIN協議是由歐洲車輛製造商協會開發用來進行低成本、短距離、低速網路通訊,其用途是傳輸開關設置狀態以及對開關變化響應,因此通訊事件是在百毫秒以上時間內產生,而不像引擎管理等其它速度快得多的汽車應用。此協議支援在單根線上進行雙向通訊,使用由RC振盪器驅動的低成本微控制器,這樣可以省去晶振或陶瓷振盪器的成本。另外,此協議實際上是以時間和軟體上的代價換取硬體上成本的節約。LIN協議的每一條消息都包含自動Baud Rate步進的數據,最高可以支援Baud Rate為20k,同時低功耗睡眠模式可以切斷匯流排,以避免產生不必要的功耗。匯流排可以由任意一個節點提供電源。

LIN匯流排特性

LIN匯流排融合了I2C和RS232的特性:像I2C匯流排那樣,LIN匯流排透過一個電阻上拉到高電平,而每一個節點又都可以透過集電極開路驅動器將匯流排拉低;像RS232那樣透過起始位元和停止位元標識出每一個位元組,每一位元在時脈上非同步傳輸。

圖1給出了典型的LIN協議配置。當任意一個節點將匯流排拉低時,匯流排處於低電平,標識著匯流排進入佔用狀態;而當所有節點都使匯流排浮空時匯流排處於電池的電壓(9-18V),則意味著匯流排處於非佔用狀態(Recessive state);在空閑狀態下浮空的匯流排通過電阻被上拉到高電平。

匯流排工作在9到18伏的電壓下,但所有連接到匯流排上的元件必須能承受40V的電壓。一般情況下,微控制器透過線路驅動器或接收器與匯流排隔離。匯流排在每一個節點上被端接到Vbat,主節點通過一個1kΩ的電阻端接;從節點則通過一個20kΩ到47kΩ的電阻端接。匯流排最大長度為40米。

匯流排上傳輸的每一個位元組都是與起始位元和停止位元一起組成訊框。起始位元的狀態與空閑狀態相反(即為0),而停止位元則與空閑狀態同為1。在每個位元組中,首先傳輸的是最低有效位元。

消息協議

主節點控制匯流排的方式是輪詢各個從節點並與匯流排上其餘部份共享從節點的數據。從節點僅在接到主節點的命令時才進行數據傳輸,這樣就可以進行雙向傳輸並且無需進一步的仲裁。消息傳輸是以主節點發出一次同步中斷開始,緊接著是消息的同步字段和消息字段。透過在每條消息的起始處傳送的同步字段還設定了整個匯流排的時脈,每個從節點用該位元組來調整其Baud Rate。

同步中斷使匯流排進入佔用狀態,該狀態保持時間為13位元數據的傳輸時間,緊接著是一個停止位元(非佔用狀態),這告知從節點即將有消息傳輸。主節點與從節點的時脈漂移最大允許在15%,因此從節點接收的同步中斷可能只有11位元或長達15位元數據位的傳輸時間。

每一條消息的第二個位元組是標示位元組,用來告知匯流排在該位元組後面傳輸的是什麼數據和哪一個節點應該應答,以及應答的長度(標示字段如圖2所示)。一條命令僅會有一個從節點對其進行響應,從節點僅在主節點的指示下才發送數據。數據只要出現在匯流排上,每一個節點都可以接收到。因此,無須主節點專門控制從節點之間的通訊。

由於設計中採用廉價的RC振盪器,從節點必須在每一次傳輸時檢測主節點的Baud Rate並調整其自身目前的Baud Rate。因此,每一次通訊都由一個由交替的‘0’和‘1’組成的同步位元組開始。標識字段緊跟在同步字段的後面,它告知匯流排後面傳輸的內容是什麼。標識字段又分為三個子字段,最低4位元(0-3位元)是尋址匯流排上的元件,中間兩位元(4-5位元)是後面傳輸的消息的長度,最高兩位元(6-7)作為奇偶校驗位元。

除了睡眠命令,LIN協議並沒有定義每一條消息的內容。其它命令是由具體應用來定義的。

檢錯機制

下面描述的錯誤必須被檢測出,並且在每個節點內進行計數。

位元錯誤-傳輸節點必須將它認為應該傳輸的數據位元與匯流排上實際出現的數據位元進行比較。由於匯流排需要響應時間,控制器必須在檢測數據位元之前等待足夠長的時間。假設最小的電壓翻轉速率為1V/μs,而匯流排最高電壓為18V,則發送器必須等待18μs才能檢測匯流排上的數據位元是否正確。

校驗和錯誤-每一條消息的內容都是由校驗和位元組進行保護。

奇偶校驗錯-命令位元組的6個數據位元由兩個奇偶校驗位元進行保護,需要重新進行運算這些位元並比較。如果錯誤出現,應當忽略目前命令並且記錄下錯誤。LIN協議中沒有直接的錯誤報告機制,但每一個從節點應當追蹤其自身的錯誤,主節點可以要求從節點將錯誤狀態作為正常消息協議的一部份來傳輸。

LIN匯流排與CAN匯流排

LIN協議並不直接與CAN匯流排相容,但人們期望兩者進行相互通作業。CAN匯流排可能用在整個汽車內來實現通訊,而LIN匯流排僅用在汽車的局部電路內,如車門。為了連接兩種匯流排,需要採用CAN-LIN協議介面節點,該節點從LIN匯流排節點收集資訊然後傳送到CAN匯流排上。

低功耗睡眠模式

主節點透過發送標識碼0x80指示所有節點進入睡眠模式,睡眠命令後面跟隨的數據位元組的內容沒有定義。收到睡眠命令的從節點應當對本身進行設置,以便當匯流排產生改變時能喚醒,並關閉自身的電壓以使電流消耗最低。當處於睡眠模式時匯流排將處於高電平並且不消耗電流。

任意一個節點都可以透過發送喚醒訊號來喚醒匯流排。當收到喚醒訊號後,一般情況下所有的節點應當啟動並等待主節點開始匯流排輪詢。

硬體示例

圖3給出了有兩個按鈕和三個LED組成的硬體示例。每按動十下按鈕1 LED1改變一次狀態。同樣,每按動十下按鈕2,LED2改變一次狀態。作為標識為ID1的響應,按鈕的按動次數被傳送到匯流排上。作為標識為ID4的響應,按鈕的按動次數的刷新被傳送到匯流排上。

軟體作業

LIN協議程式工作在由RB0觸發的中斷下以實現匯流排的睡眠/喚醒。在觸發中斷時,程式對低電平數據位元的長度進行計數,然後讀同步位元組並確定數據位元時間,最後再將其與最初的數據位元時間進行比較,以確定最初的低電平時間是否大於10個數據位元的時間,大於10為同步中斷,小於10為喚醒訊號。如果是喚醒訊號,程式退出並繼續等待同步中斷;如果是同步中斷,程式就讀取命令位元組,檢查奇偶位元並檢查動作表(action table)來確定接下來的動作。動作表定義了匯流排上數據的來源或目的地。

為了初始化LIN協議的從節點句柄(Slavehandler),用戶必須調用InitLinSlave程式,這個程式初始化RB0中斷接腳和TMR0暫存器。TMR0暫存器用來測量數據位元的長度並產生Baud Rate。初始化完成之後,用戶可以執行自己的程式。一旦檢測到RB0接腳上的下降沿,用戶程式就將被中斷。當檢測到下降沿時,程式就跳轉到中斷服務程式。必須禁止除了TMR0和RB0中斷之外所有的中斷源,以便對同步字段進行精確測量。運算出Baud Rate之後,中斷服務程式就退出執行。

在下一次RB0中斷產生時,LIN協議Slavehandler自動進入接收模式,以接收標識字段或數據位元組。如果檢測到標識字段的起始位元,就對標識字段進行接收和解碼。然後,根據收到的標識執行相應的程式碼,例如儲存數據或點亮LED。匯流排上一個訊框傳輸完成之後,標誌FCOMPLETE被置位。這個標誌指示所有的數據都已正確接收完畢並可以進行後續的處理。此標誌由用戶韌體清除。

LIN協議從節點句柄Slavehandler最高可以工作在20K的Baud Rate下,需要420字的程式儲存空間以及23位元組的數據儲存空間。

由於其低成本,LIN協議具有在汽車應用中廣泛採用的潛力。可以使用內建的RC振盪器並且執行在4MHz的時脈頻率下的諸如Microchip的各種元件的微處理器,使得設計師們能以最低的可能成本設計應用系統。

作者:Dan Butler


Thomas Schmidt


Thorsten Waclawczyk


Microchip Technology公司




投票數:   加入我的最愛
我來評論 - 用於汽車網路的LIN協議分析
評論:  
*  您還能輸入[0]個字
*驗證碼:
 
論壇熱門主題 熱門下載
 •   將邁入40歲的你...存款多少了  •  深入電容觸控技術就從這個問題開始
 •  我有一個數位電源的專利...  •  磷酸鋰鐵電池一問
 •   關於設備商公司的工程師(廠商)薪資前景  •  計算諧振轉換器的同步整流MOSFET功耗損失
 •   Touch sensor & MEMS controller  •  針對智慧電表PLC通訊應用的線路驅動器
 •   下週 深圳 llC 2012 關於PCB免費工具的研討會  •  邏輯閘的應用


EE人生人氣排行
 
返回頁首