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