局域互聯網(LIN)是一種低成本的嵌入式網絡標準,用于連接智能設備。LIN最常見于汽車工業。
1. LIN概述
? ? ? ?局域互聯網(LIN)總線是為汽車網絡開發的一種低成本、低端多路復用通信標準。雖然控制器局域網(CAN)總線滿足了高帶寬、高級錯誤處理網絡的需求,但是實現CAN的軟硬件花費使得低性能設備(如電動車窗和座椅控制器)無法采用該總線。若應用程序無需CAN的帶寬及多用性,可采用LIN這種高性價比的通信方式。用戶可在最先進的低價位8位微控制器中嵌入標準串行通用異步收發器(UART),以相對廉價的方式實現LIN。
現代汽車網絡包含各類總線。例如,在主體電子設備的低成本應用程序中使用LIN,在主流動力系統和車身通信中使用CAN,而在先進系統(如主動懸掛)中的高速同步數據通信中使用新興的FlexRay總線。
LIN總線采用主/從方法,包含一個LIN主方和一個或多個LIN從方。
圖1. LIN消息幀
消息標題包含一個中斷(用于標記幀的開始)和一個同步字段(供從節點同步時鐘)。標識符(ID)包含一個6位消息ID和一個2位校驗字段。ID表示特定的消息地址,而非目標。接收并解碼ID后,從方開始消息響應,該消息響應包含1至8字節的數據以及一個8位校驗和。
主方控制消息幀的排序,該排序在調度中是固定的。用戶可按需改變該調度。
LIN標準更新過多個版本。1.3版本最終確定了字節層通信。2.0和2.1版本新增了更多消息規范和服務,但仍與LIN 1.3版本的字節層兼容。
功能 | NI USB LIN是否支持 |
LIN 1.3 | 支持 |
LIN 2.0 | 支持1 |
增強的校驗和 | 支持 |
現成的從節點概念 | 支持1 |
NCF格式 | 支持1 |
診斷及從節點配置 | 支持1 |
字節數組 | 支持 |
LIN 2.1 | 支持1 |
新從節點配置服務 | 支持1 |
從方診斷(I-III類) | 支持1 |
功能尋址 | 支持1 |
解析表 | 支持1 |
?
API對該功能不提供原生支持,但用戶依然可實現該功能。?
? ? ? 表1. LIN 1.3、2.0及2.1版本對比
2. LIN幀格式
? ? ? ?LIN總線是一種輪詢總線,帶有一個主設備和一個或多個從設備。主設備同時包含一個主任務和一個從任務。每個從設備僅包含一個從任務。LIN總線上的通信完全由主設備上的主任務控制。LIN總線上傳輸的基本單位是幀,每幀又分為標題和響應。標題總是通過主節點傳輸,包含3個不同的字段:中斷、同步(sync)及標識符(ID)。響應通過從任務傳輸,可位于主節點或從節點中,包含一個數據載荷及一個校驗和。
通常,主任務通過傳輸標題,在循環中輪詢每個從任務。該標題包含一個中斷-同步-ID序列。啟動LIN之前,每個從任務被配置為根據接收到的標題ID向總線發布數據或從總線訂閱數據。一旦收到標題,每個從任務將驗證ID校驗,并檢查ID,以決定選擇發布或訂閱。若從任務需要發布響應,將向總線傳輸1至8數據字節,后接1個校驗和字節。若從任務需要訂閱,將從總線讀取數據載荷和校驗和字節,并采取適當的內部動作。
對于標準從至主通信,主方廣播標識符至網絡,僅有一個從方響應數據載荷。
主至從通信伴隨著一個主節點中的獨立從任務。該任務自我接收發布至總線的全部數據,并以獨立從節點的方式響應。為了傳輸數據字節,主方必須首先根據需要傳輸的數據值,升級其內部從任務的響應。接著,主方將發布合適的幀標題,內部從任務傳輸其數據載荷至總線。
圖2. LIN消息幀
1. 中斷
每個LIN幀都以中斷作為開始,包含13個顯性位(額定),后接一個1位(額定)隱性中斷分隔符。中斷的作用是將幀的開始通知給總線上的所有節點。
2. 同步
同步字段是主任務在標題中傳輸的第二個字段。同步被定義為字符x55。同步字段允許進行自動波特率檢測的從設備測量波特率周期,并調節其內部波特率,與總線進行同步。
3. ID
ID字段是主任務在標題中傳輸的最后一個字段。該字段識別網絡上的每條消息,并最終決定由網絡中的哪些節點接收或響應每個傳輸。所有從任務連續監聽ID字段、驗證其校驗,并決定其是否是該特定標識符的發布者或訂閱者。LIN總線一共能提供64個ID。ID 0~59用于信號攜帶(數據)幀,60和61用于攜帶診斷數據,62預留給用戶自定義擴展,63預留給未來協議升級。ID作為一個受保護的ID字節通過總線傳輸,低6位包含原始ID,高2位包含校驗。
受保護的ID(7:6) |
受保護的 ID(5:0) |
|
P(1) | P(0) | ID(5:0) |
ID(1) ^ ID(3) ^ ID(4) ^ ID(5) | ID(0) ^ ID(1) ^ ID(2) ^ ID(4) | 0–63 |
?
表2. 校驗計算方法
4. 數據字節
從任務在響應中傳輸數據字節字段。該字段包含1至8字節的載荷數據字節。
5. 校驗和
從任務在響應中傳輸校驗和字段。LIN總線采用2個校驗和算法之一,以計算8位校驗和字段中的值。經典校驗和的計算方法是單獨累加數據字節,而增強校驗和的計算方法則是累加數據字節及受保護的ID。
LIN 2.0規范將校驗和的計算過程定義為:累加所有值,且當總和大于等于256時減去255(與modulo-255或modulo-256不同)。根據LIN 2.0標準,經典校驗和用于LIN 1.3從節點,而增強校驗和用于LIN 2.0從節點。該規范進一步規定,ID 60~63應該總是使用經典校驗和。NI LIN接口允許設置校驗和類型為經典或增強。默認設置為經典。根據LIN 2.0規范,無論如何設置校驗和屬性,ID 60~63總是使用經典校驗和。
圖3顯示了主任務標題和從任務響應如何組合成一個完整的LIN幀。
圖3. 創建LIN幀
3. LIN總線定時
? ? ? ?由于LIN總線是輪詢總線,處理每幀分配的額定時間槽如下:
? ? ? ?THeader_Nominal = 34 * TBit
? ? ? ?TResponse_Nominal = 10 * (NData + 1) * TBit
? ? ? ?TFrame_Nominal = THeader_Nominal + TResponse_Nominal
處理每幀分配的最大時間槽如下:
? ? ? ?THeader_Maximum = 14 * THeader_Nominal
? ? ? ?TResponse_Maximum = 1.4 * TResponse_Nominal
? ? ? ?TFrame_Maximum = THeader_Maximum + TResponse_Maximum
4. LIN拓撲結構及行為
? ? ? ?LIN總線連接一個主設備(節點)和一個或多個從設備(節點),成為一個LIN簇。對應的功能文件描述了該節點的行為。節點功能文件輸入系統定義工具,生成LIN描述文件(LDF),描述整個簇的行為。系統生成器解析LDF,自動生成目標節點中的特定行為。此時,按照LDF中指定的方式,主節點主任務開始在總線上傳輸標題,簇中的所有從任務(包括主節點自己的從任務)開始響應。
總體來說,LDF用于配置及創建LIN簇的調度行為。例如,LDF定義了波特率、主任務傳輸標題時的順序及時間延遲,以及響應時每個從任務的行為。NI LIN硬件及用于LIN的NI-CAN幀API無法為LDF提供原生的完整支持,即用戶無法下載調度行為至硬件。但是,硬件提供了訪問總線的底層支持(寫入標題及發布或訂閱作為響應),用戶可在應用程序層創建調度行為。正如在NI LIN響應輸入幀類型的描述中所說,NI LIN硬件采用響應隊列存儲從任務響應。響應隊列保留64個響應,與每個為LIN指定的(最多64個)ID一一對應。這將確保LIN接口的從任務可在LIN規范規定的響應時間內響應標題。
用于LIN的NI-CAN幀API可通過一種穩健的方式完成與LIN總線的底層交互。終端用戶可使用基本功能,開發復雜應用程序,包括分析及原型化LIN網絡。用于LIN的NI-CAN幀API無法為LIN診斷或配置、LDF或調度表提供原生支持。但是,用戶可在采用用于LIN的NI-CAN幀API的應用程序中實現這些任務。
5. LIN錯誤檢測及限制
? ? ? ?LIN 2.0規范聲明,應當由從任務處理錯誤檢測,且主任務的錯誤監控不是必需的。LIN 2.0規范不要求在一個LIN幀中處理多個錯誤,也不要求使用錯誤計數器。一旦在幀內遇到第一個錯誤,從任務將中止幀處理,直到檢測到下一個中斷-同步序列(在主任務傳輸的下一個標題中)。若記錄總線錯誤屬性設置為true,那么總線錯誤幀將記錄至讀取隊列。若記錄總線錯誤屬性設置為false,ncWriteNet或ncWriteNetMult將返回錯誤。
LIN還可向網絡提供錯誤報告。LIN 2.0規范定義了一個Response_Error狀態位,其中,從設備需在其傳輸的一幀中向主設備報告。當從節點接收或傳輸的幀的響應字段中包含錯誤,該位設置完畢。通過從任務的已發布響應中傳輸后,該狀態位就被清空。用于LIN的NI-CAN幀API無法對Response_Error狀態位提供原生支持,但終端用戶可在應用程序層輕松實現該功能。該過程將記錄總線錯誤屬性設置為1,允許在讀取隊列中記錄總線錯誤幀。錯誤代碼代表響應中的錯誤,應用程序可通過該代碼,監控總線錯誤幀的讀取。這時,應用程序將在局部變量中設置一個Response_Error狀態位。應用程序可使用NI LIN響應輸入幀類型,更新從響應隊列中包含Response_Error狀態字段的數據,并清空局部變量中的字段。
6. LIN睡眠和喚醒
? ? ? ?LIN的特色是允許設備進入睡眠狀態并節約用電。根據LIN 2.0規范,當主任務發送的診斷主要求幀(ID=60)首個數據字節等于0時,所有從任務必須進入睡眠模式。該特殊幀稱為睡眠命令。若LIN的非活動時間大于4秒,從任務也將自動進入睡眠模式。用于LIN的NI-CAN幀API允許用戶在應用程序層將LIN接口設置為睡眠模式,提供了極大的便利性。一旦接收到包含睡眠請求信息的完整幀,或表明總線非活動時間超過4秒的總線非活動幀,用戶可設置LIN Sleep屬性為TRUE,讓LIN接口進入睡眠模式。
LIN還可喚醒總線上的設備。總線上的任何節點都可發起喚醒任務(不論是從節點還是主節點)。根據LIN 2.0規范,強制總線顯性時間持續250 μs至5 ms可觸發喚醒請求。每個從節點應當檢測喚醒請求,并在100 ms內準備好處理標題。主節點也應當檢測喚醒請求,并在從節點準備完畢時開始發送標題(在接收到喚醒請求的100 ms至150 ms內)。若主節點未在接收首個喚醒請求后的150 ms內發送標題,請求喚醒的從節點可能發起第二次喚醒請求(并再次等待150 ms)。若主節點仍無響應,從節點將發起第三次喚醒請求,并再次等待150 ms。若仍然無響應,從節點必須等待1.5秒,才可發起第四次喚醒請求。根據LIN 2.0規范,用于LIN的NI-CAN幀API允許執行喚醒,無論LIN接口作為主設備還是從設備運行。
7. 高級幀類型
? ? ? ?LIN 2.0規范進一步將LIN幀分為6種類型:
1、無條件型
2、事件觸發型
3、偶發型
4、診斷型
5、用戶定義型
6、預留型
值得指出的是,不同幀類型之間的區別在于其傳輸方式的定時,或數據字節的內容。不論屬于哪種類型,一個完整的LIN幀總是包含一個由主任務傳輸的標題和一個由從任務傳輸的響應。用于LIN的NI-CAN幀API可處理各種LIN指定幀類型。無條件幀類型最為常用。無條件幀可攜帶信號(數據),標識符位于0~59的區間內。
事件觸發幀類型試嘗試預留總線帶寬,方法是在一個幀槽時間內從多個從節點請求一個無條件幀響應。
事件觸發幀的ID位于0~59的范圍內。若主節點從無條件幀對其發起查詢,每個可能響應事件觸發型標題ID的從節點將在首個數據字段載入其需要響應的受保護ID。事件觸發幀的工作原理如下。主方在標題中寫入一個事件觸發ID。從方在數據更新時,只響應事件觸發ID。
若僅有一個從方發布響應,主方將接受該響應,并在讀取第一個數據字段后了解哪個從方(根據受保護的ID)發布了該響應。若有多個從方發布響應,將發生碰撞,主設備的從任務將報告總線錯誤。主設備將通過無條件幀從每個從方查詢響應。
偶發幀嘗試向LIN提供一些動態行為。偶發幀總是攜帶信號(數據),ID范圍為0~59。當主任務知道幀內數據值(信號)已更新時,偶發幀的標題應當僅在其幀槽內發送。該要求使主設備的從任務成為偶發幀響應的標準發布者。
診斷幀的長度總是8數據字段,攜帶診斷或配置數據。對于主請求幀,其ID為60;對于從請求幀,其ID為61。用戶定義幀的ID為62,可攜帶任意類型的信息。保留幀的ID為63,且必須在LIN 2.0簇內使用。
8. 推薦的PC LIN接口
NI-XNET LIN
NI-XNET產品線包括加速的CAN、LIN以及FlexRay接口;優化的驅動;易用的API;以及配置和調試工具。通過NI-XNET接口,用戶可在NI LabVIEW、LabVIEW Real-Time和C/C++中更加快捷簡單地開發應用程序,用于原型設計、仿真和測試CAN、LIN以及FlexRay網絡。
NI-XNET PCI/PXI及C系列LIN接口還具備集成式LDF支持、硬件定時調度主任務以及幀和信號通信。
圖4. 用于CAN、LIN和FlexRay的NI-XNET平臺
NI USB LIN
圖5. NI USB-8476 LIN接口
用戶還可通過NI?USB-8476 LIN接口與LIN設備進行通信。這是一種廉價、可移動的與LIN網絡進行通信的方法。??
評論
查看更多