LIN

LIN（Local Interconnect Network的簡稱，中譯是-{區域互聯網路}-），是應用在汽車內零組件之間通訊的串列網絡傳輸協議。由於汽車上的技術及設備漸漸增加，需要低價的串列網路，而控制器區域網路（CAN）的成本太高，無法在車上的每一個設備中都裝設。歐洲汽車製造商開始使用不同的串列通訊技術，因此出現彼此無法相容的問題。
在1990年代末期，由BMW、大眾集團、奧迪、富豪汽車及梅賽德斯-賓士這五家車廠開始了LIN Consortium，也有從Volcano汽車集團及摩托羅拉而來的軟體及硬體協助。第一個完全實現的新LIN協定（LIN version 1.3）是在2002年11月發佈。在2003年9月發佈了2.0版，增加了額外的診斷功能。若是配合特製的LIN over DC power line（DC-LIN）收發器，LIN也可以用在汽車車池的電力線通信。- LIN over DC power line（DC-LIN）的相關標準是ISO/AWI 17987-8。- ISO技術管理委員會（ISO Technical Management Board，ISO TMB）已指定CAN in Automation為依照ISO 17987的LIN供應商ID的註冊機構。

**網路拓樸**
LIN是廣播串行網路，其中包括16個設備（一臺主站，15臺從站）
所有的訊息都是由主站開始，最多會有一臺從站回覆有特定識別碼的訊息。主站節點也可能當作一個從站，回應自己發出的訊息。
因為所有的通訊都是由主站開始，不需要有碰撞偵測的方案。
主站和從站一般都是用單片機實現，不過為了節省成本、空間或是電源，也可以用特殊的硬體或是特殊應用積體電路來實現。
目前的應用會結合低價的LIN網路及小型感測器來建構小型網路。這些子系統之間可以用骨幹網路連接（在汽車中可能是CAN）。

**簡介**
LIN是低成本的串列通訊協定，可以有效支援車內網路的遠程應用。
LIN特別適用在分散在汽車不同位置的機械式節點，也適用於工業應用。
LIN設計時是和CAN網路互補，組成車內的階層式網路。
LIN Consortium是在1990代末期組成的，組成成員是五家歐洲車廠，以及明導國際（以前的Volcano車輛集團）及飛思卡爾（之前的摩托羅拉，現在已併入恩智浦半導體）。
新的LIN規範中，第一個完全實現的版本是在2002年11月發佈的LIN 1.3版。在2003年9月提出了2.0版，擴充了組態能力，以及額外的診斷機能以及工具介面。
協定的主要特點如下：
*單一主站，最多16個從站（沒有總線仲裁的過程）。這是LIN Consortium強調的特點，以達到確定性的時間反應。
**從站節點位置偵測（Slave Node Position Detection、SNPD），可以在送電後才指定節點的位址。- 單線通訊，在長度40公尺時，可以到19.2 kbit/s。在LIN規範2.2中，速率最高可到20 kbit/s。- 可確保的延遲時間。- 可變長度的資料頁框（2, 4及8位元組）。- 可變動的組態。- 多播接收的時間同步。設備電路的時脈不需非常準確。不需要晶振（crystal）或是ceramic resonator。- 資料檢查碼以及錯誤檢測。.- 可以檢測故障的節點。- 以標準UART/SCI（串列通訊介面）為基礎的電路，低成本的方案。- 可以建立階層式的網路- 工作電壓為12 V。
資料是透過可變長度，固定格式的訊息來在網路上傳播。
主站會送出標頭（header）資料，其中包括同步間隔（Synchronization break）信號，之後是同步欄位以及識別符（ID）欄位。從站回應資料頁框（frame），其中包括2個、4個或8個位元組的資料，再加上3個位元組的控制資訊。

**LIN訊息頁框**
訊息包括以下的欄位：- 同步間隔（Synchronization break）- 同步位元組- 識別符（ID）位元組- 資料位元組- 檢查碼位元組

**頁框種類**
# 無條件頁框（Unconditional frame）：識別符會在0到59(0x3b)之內。會帶有訊號，所有無條件頁框的收聽節點都要接收此頁框，若沒有錯誤的話，其應用程式需處理對應的內容。
# 事件驅動頁框（Event-triggered frame）：其目的是增加LIN節點的反應能力，不需要為了偶爾出現的訊號而用輪詢的方式向各節點確認，消耗網路的頻寬。無條件頁框的第一個位元組需和某個事件驅動頁框的保護識別符(PID)相同。從站只有在其數值變化時才需要回應對應的無條件頁框。若沒有節點回應，該頁框的剩餘時間沒有信號，會忽略該標頭資料。若不止一個節點回覆，此頁框時間會出現資料碰撞，主站需處理碰撞的情形，在下一次提出事件驅動頁框前需要先請求所有相關的無條件頁框。
# 偶發頁框（Sporadic frame）：此頁框是在主站有需要時，由主站發出，因此不會有碰撞。只有在主站知道某頁框的資料有變化時，才會在對應的頁框時間區間內送出偶發頁框的標頭。偶發頁框的發送者需要回應標頭的資料。
# 診斷頁框（Diagnostic frame）：識別符是60(0x3c)（主站請求頁框）或61(0x3d)（從站回應頁框）。其中包括診斷或是組態的資訊，長度8位元組。主站在產生診斷頁框的標頭之前，需要先問診斷模組是否應送診斷資料，以及網路上是否應有資訊。從站也會接收這些資料，依照其診斷模組的訊息回應資訊，
# 自定頁框（User-defined frame）：識別符是62(0x3e)。可以包括任何資訊。當處理了指定給該頁框的頁框時間區間時，會送出指定頁框的標頭。
# 保留頁框（Reserved frame）：其識別符是63(0x3f)。LIN 2.0 cluster不會使用。

**LIN硬體**
LIN規範就是為了設計在網路中很低價的硬體節點所開發。LIN設備是以ISO 9191為基礎的低成本、單線網路。
以現今的汽車網架構來看，會使用有UART能力，或是有專門LIN硬體的微控制器。
微控制器會產生通訊協定、同位元等LIN通訊需要的所有資料，透過LIN收發器（可能只是電壓轉換，再加上一些機能） 
LIN的從站節點越便宜越好，因此其時脈可能不是用石英晶體諧振器或陶瓷諧振器，而是用RC振盪器產生時脈。為了確保LIN頁框內波特率的穩定性，頁框中會有SYNC（同步）的欄位。

**LIN通訊協定**
LIN主站會依照一個或是幾個事先定義的排程表，在LIN網路上開始傳送或是接收訊息。排程表中至少會包括各訊息開始發送的相對時序。
LIN頁面由兩部份組成：標頭（header）及回應（response）。標頭是由LIN主站送出，回應可能由特定的LIN從站送出，或是由LIN主站本身送出。
LIN是用串列的方式傳送資料，一個位元組中有八個位元，一個起始位元，一個結束位元，無同位元檢查（break欄位沒有起始位元及停止位元)。位元率的範圍最慢到1 kbit/s，最快到20 kbit/s。
在網路上的資料可以分為隱性(recessive，邏輯上的高準位)及顯性(dominant，邏輯上的低準位)
其時間基礎是由LIN主站的穩定時脈來源來決定，最小的單位是1bit time（52 µs @ 19.2 kbit/s）。
LIN協定上,有列出兩種網路上的狀態：睡眠狀態及活躍狀態。在LIN網路上有資料時,所有的LIN節點都進入活躍狀態。在一定時間的逾時時間後，節點會進入睡眠狀態，若有喚醒頁框(WAKEUP frame)時才會回到活躍狀態。
喚醒頁框可以由網路上任何一個節點發起，可以是LIN主站依照其內部時程發起。也可以是LIN從站由其韌體所產生。
在所有節點都活躍之後，主站會繼續下一個識別符的排程。

**標頭 (Header)**
包括五部份：
間隔（BREAK）: 間隔欄位會活化所有的LIN從站，預備接收後續標頭的內容。其欄位包括一個啟始位元以及數個顯性位元，長度至少是11個位元時間，目前使用的標準，其長度是13個位元時間，和基本的資料格式不同。間隔欄位是在主時脈可以和各LIN節點時脈不同時（但差異在一定範圍內時），確保所有接收的LIN節點可以偵測到表示開始通訊的間隔欄位，這不是標準的資料格式，其數值均為0。
同步（SYNC）: 同步欄位是標準的資料格式位元組，數值是十六進制的0x55（高位元及低位元輪流變化） 。使用RC振盪器的LIN從站可以用一定數量上昇緣及下降緣的時間差，計算網站上的位元時間（主站的time normal），並且重新計算內部的位元率。
位元組間隔（INTER BYTE SPACE）: 位元組間隔是用來調整網路上的 jitter，是LIN規範中可選擇的項目。若啟動的話，所有LIN模組都要支援此一機能。位元組間隔出現在間隔欄位和同步欄位之間、同步欄位和識別符欄位之間、同步欄位和識別符欄位之間、酬載（不考慮通訊協定，實際要傳輸的資料）欄位和檢查碼欄位之間。在酬載欄位的每一個位元組之間也要有位元組間隔。
識別符（IDENTIFIER）: 識別符定義一個到多個LIN從站節點要進行的動作。網路設計者需在設計階段實現故障樹的機能。- 識別符再加上二位元的檢查位元，即為 受保護的識別符（PID）。
回應間隔（RESPONSE SPACE）: 是識別符欄位和LIN回應訊息中第一個位元組之間的間隔時間。當特定的LIN頁框(標頭及回應)由LIN主站傳送完畢，LIN主站會用完整的回應間隔間來計算何時要再送出回應資料。若回應是由另外一個LIN從站送出，主站及從站點會在其逾時時間的計算上，各自處理50%的回應間隔。- 若識別符（IDENTIFIER）讓一個LIN從站(Slave Node)傳送回應訊息，此識別符稱為Rx識別符。若識別符讓LIN從站送出任務訊息，此識別符稱為Tx識別符。- 在一個頁框時間內，只允許一個從站傳送回復資料。- ID=0x3c~ 為特定用途，請參考 #頁框種類 說明。- 標頭（header）必定由Master Node 發起。

**回應**
回應是由LIN從站任務產生（可能是從站，也可能是主站的從站任務），分為資料及校驗和。
資料: 回應的從站可以送零個到八個位元組到網路上，資料數量由應用程式設計者決定，對應LIN從站應用程式中相關的資料。
檢查碼（CHECKSUM）: LIN有二種檢查碼模式：一種檢查碼只包括資料欄位（V1.3 之前的規範），又名classic checksum；另一種也包括識別符（V2.0之後的規範)，又名enhanced checksum。由應用程式的設計者事先定義要用的檢查碼模式。- 診斷訊息(ID=0x3C & 3D)使用classic checksum- 回應 Tx識別符的 又稱為 Publisher 或 Sender，發布者，傳送端，寄件者。- 回應 Rx識別符的 又稱為 Subscriber 或 Receiver，訂閱者，接收端，收件者。

**從站節點位置偵測試（SNPD）或自動定址**
從站節點位置偵測試（Slave node position detection, SNPD）或自動定址（autoaddressing）的技術可以偵測LIN網路上各從站節點的位置順序，並給予節點不重覆的節點位址（unique node address、NAD），好處是可以讓同一類或是類似的設備可以直接連接到網路，不需要另外修改程式
限制：- 所有需要自動定址的從站，需要在同一條網路線上（若是不需要自動定址的標準從站，接線就不受限制）。

**外部接線菊花鏈**
外部接線菊花鏈（Extra wire daisy chain，XWDC）的方案中，每一個從站設備需要多提供一個輸入腳D1，以及一個輸出腳D2。- 第一個SNPD節點的輸入腳D1接到GND，或是接到主站的輸出腳。- 第一個SNPD節點的輸出腳D2，接到第二個SNPD節點的輸入腳D1，以及類推。
每一個組態腳Dx（x=1-2）有以下額外的機能來進行位置偵測：
# 可以切換的上拉電阻，電阻另一端連接Vbat
# 下拉到GND
# 有比較器，電壓準位是Vbat/2

**總線分流法**
總線分流法（Bus shunt method，BSM）的從站設備中，有二個LIN節點
# bus_in
# bus_out
每一個節點需增加以下電路，進行位置偵測的機能。
# 可以切換的上拉電阻。
# 可以切換的，從Vbat提供的2 mA電流源。
# 分流電阻
# 差動放大器
# 類比—數位轉換器
在EP 1490772 B1及US 7091876的專利中，有提到BSM的自動定址技術。

**LIN的優點**
 方便使用- 元件容易取得- 比CAN或其他的通訊網路要便宜- 減少線束- 可以讓車輛更可靠- 網路延伸很容易- 不需通訊協定的權利金
LIN的目的不是為了完全取代CAN網路。不過若價格是主要考量，較沒有速度及頻寬上的需求時，LIN是很適合的替代方案。一般來說，LIN會用在車輛中對性能或安全性較不要求的子系統，以下是一些例子。

**應用**

**位址**
LIN網路中的位址是透過NAD（Node ADdress、節點位址）來實現，NAD是PID（protected identifier、受保護識別碼）的一部份。NAD的值有7位元，其範圍從1到127 (0x7F)

**開發工具**
在開發LIN網路或是除錯時，硬體訊號的檢查格外的重要。邏輯分析儀及bus analyzer可以蒐集、分析、解碼通訊訊號並加以儲存，方便開發及除錯使用。

**相關條目**
 List of network buses- SAE J3068（LIN-CP）

**參考資料**

**外部連結**
  LIN Consortiumdate=20210126031026  it is not longer available, because the latest LIN specification (2.2A) is being transcribed to the ISO (International Organization for Standardization) as part of the process to be accepted as ISO standard ISO 17987 Part 1-7.-  LIN Supplier ID Registration Authority Registration Authority for the LIN Supplier ID  standardized in the ISO 17987 series-  Deep dive LIN training course with hands-on examplesdate=20200911132408 -  CAN/LIN Training-  Brief CAN/LIN Background Information (Chinese)-  Article about a free open hardware/software implementation of the LIN protocol-  An open source Arduino based LIN protocol analyzerdate=20200911132301 -  Open source Arduino based platform with LIN connectivitydate=20201130134022 -  A free online LIN checksum calculatordate=20201030093224