摘 要: 介紹了幾款Microchip單片機及收發器實現低成本的汽車子網LIN總線節點。基于Microchip單片機內帶的增強型通用同步/異步收發器(EUSART)實現LIN的控制器,并用Microchip的MCP2021作為LIN的電平轉換器,最終實現一主多從的低成本的LIN網絡。
關鍵詞: LIN總線;收發器;增強型通用同步/異步收發器;CAN總線
隨著汽車總線應用的日益普及以及對汽車成本的要求越來越嚴格,LIN總線的市場占有率越來越高。本文從低成本的角度來實現LIN總線的節點,具有非常高的實用價值。
1 LIN的基本知識與發展
1.1 LIN的基本知識
局域互連網絡LIN(Local Interconnect Network)是低成本的串行通信網絡,用于實現汽車中的分布式電子系統控制,是現有多種汽車網絡在功能上的補充;同時它也是一個開放的標準,作為CAN總線的子總線,能緩解CAN總線數據擁擠的現狀。
由于LIN總線是可靠、低成本、開放標準的網絡解決方案,它可以簡化現存的多點解決方案,并且能降低在汽車電子領域中的開發、生產、服務和后勤成本。
1.2 LIN的起源與發展
LIN聯盟成立于1999年,并發布了LIN 1.0版本。2000年,LIN聯盟再次發布了1.1版本。2001年,第一輛采用LIN1.1版本的量產汽車面世。2003年,2.0版本出現。2006年,2.1版本面世并沿用至今。
1.3 LIN的市場
LIN總線產品已經成為汽車總線的第二大市場,預計將成為未來增長最快的一個市場。第一大市場是CAN總線,其在2006年已經達到頂峰。
2 LIN的基本概念
LIN在物理層是單線實現的,一般電壓范圍在8 V~18 V。LIN網絡是單主多從結構,由于只有一個主節點,所以不存在總線仲裁。總線的速度一般在2.4 kbd~19.6 kbd之間。典型節點數為2~10個,由于阻抗匹配的原因,最多不能超過16個[1]。如圖1所示。
LIN總線為串行通信方式,編碼采用非歸零碼,8N1(8個數據位,沒有校驗位,1個停止位)方式,如圖2所示。每幀的數據字節數可變,為2~8 B。在數據字節結束后,會發一個校驗和來進行校驗。
在LIN網絡中,主節點的時鐘由高精度的晶振產生,從節點一般用RC震蕩器產生。在本文中,從節點的時鐘可以用Microchip單片機的內部RC震蕩器來實現。
3 LIN協議的基本知識
LIN的報文分為兩部分,一是主任務,也叫報文頭;另一個部分是從任務,也叫響應場。如圖3所示。
主任務位于主機節點內部,都是由主節點發出,它負責報文的進度表、發送報文頭(HEADER)。從任務位于所有的(即主機和從機)節點中,其中一個(主機節點或從機節點)發送報文的響應(RESPONSE)。
3.1 報文頭
報文頭分為三部分,按順序分別叫同步間隔、同步字段、標識符字段。
同步間隔是一個長時間的低電平(顯性總線電平),低電平時間要大于10個位定時時間,通常為13個位定時時間。在長時間的低電平之后,要跟著一個短時間的高電平(隱性總線電平),一般為1~4個位定時時間[2]。
同步字段包含了時鐘的同步信息。它的內容為0x55,表現在8個位定時中有5個下降沿(隱性跳變到顯性的邊沿)。從節點通過同步字段,可以使自己的總線速率與主節點同步。
標識符字段定義了報文的內容和長度。其中,內容是由6個標識符位和2個奇偶校驗位組成,如圖4所示。標識符位的第5位和第6位(ID4和ID5)定義了報文數據場的長度。
3.2 響應場
響應場包含數據字段和校驗和兩部分。
數據字段由8 bit數據的字節組成,傳輸由最低位(LSB)開始。校驗和按照帶進位加的方式計算,每個進位都被加到本次計算結果的最低位。
3.3 保留的標識符
標識符為0x3C和0x3D的標識符被用做診斷。其中0x3C是主機請求幀,它可以從主機向從機節點發送命令和數據。0x3D是從機響應幀,它觸發一個從機節點(由一個優先的下載幀編址)向主機節點發送數據。
標識符為0x3E是由用戶定義的自由用法,標識符為0x3F是為將來使用而嚴格保留的。
4 Microchip單片機的軟硬件實現
4.1 硬件實現
主節點一般采用Flash比較大的Microchip中檔8位單片機,或者采用帶CAN控制器的高檔8位單片機或16位單片機作為控制器。時鐘采用高精度石英晶振。物理層的電平轉換采用Microchip的收發器MCP2021。
從節點可用低成本的Microchip中、低檔8位單片機。時鐘用單片機內部自帶的RC震蕩器。內部RC震蕩器在常溫25 ℃時,精度為1%,全溫度范圍(-40 ℃~+125 ℃)內精度為5%[1]。物理層的電平轉換采用Microchip的收發器MCP2021。
4.2 軟件實現
4.2.1 主節點
主節點完全按照LIN規范實現。主節點的任務就是發送報文頭和發送接收數據,實現一個網關的作用。另外,單片機的剩余功能,可以用來做一些A/D和開關量的采集,還可以驅動一些蜂鳴器、小電機或者LED和LCD等器件。主節點發送流程如圖5所示。
LIN總線的通信可以通過配置單片機的EUSART來實現。每次通信都由主節點啟動,此處不考慮從節點到從節點的通信。總線的配置也由主節點來實現,具體波特率可以通過波特率控制寄存器來實現。這里采用9 600的波特率。
標識符不是一個節點的地址,而是一個報文的描述符。當主節點發送一個0x3C的命令后,再發送8 B的00H,總線就進入休眠模式。在休眠模式下,總線處于空閑狀態,因此任何一個從節點都可以喚醒總線。
主節點采用高精度的石英晶振作為時鐘源,可以產生低誤差的時鐘信號。在這里,要把主節點設置為異步半雙工通信模式,8 bit數據模式。時鐘選擇為內部時鐘。
由于EUSART有“發送間隔字符位(SENDB)”,可以在每次發送數據前發送同步間隔字符,這樣可以省掉不少軟件開銷,使單片機可以致力于其他邏輯的運算。
4.2.2 從節點
從節點不需要系統配置的信息,所有從節點接收所有報文,然后再判斷是否需要執行。
從節點不需要外接石英晶振,可以用單片機內部自帶的RC震蕩器實現。Microchip的中端8位單片機大多數都內帶高精度的RC震蕩器,在常溫下(25℃),經過校準可以達到±1%的精度。
每個單片機在出廠時都經過校準,并把校準字寫在Flash空間的最后一位。在程序開始運行時,會把校準值裝載到W寄存器里。在程序的第一條指令中執行MOVWF OSCCAL,即可將W寄存器里的值送到內部RC震蕩器的校準寄存器里,從而實現校準。
從節點先檢測總線電平,當長時間的隱性電平結束,出現大于10個位定時的顯性電平后,開始數5個下降沿的時間,用時間值除以8,就可以算出波特率。然后從總線上讀取數據,解碼ID,處理響應。
EUSART支持波特率的自動檢測和校準,可以使軟件代碼大量簡化。從節點可以在總線空閑時進入休眠狀態,當從節點檢測到主節點發出的同步間隔時,可以從休眠狀態喚醒。
當從節點被其他外部中斷喚醒時(例如A/D轉換完成,外部IO電平變化等),從節點可以喚醒休眠的總線。
如果從節點的功能比較簡單,工作電流比較小,可以通過收發器MCP2021的參考電壓輸出端來供電。MCP2021有兩種型號,參考電壓的輸出分別為5 V和3.3 V,適應5 V和3.3 V的單片機。這個參考電壓的輸出電流最大為50 mA,所以不適合工作電流比較大的場合[3-4]。
參考文獻
[1] LIN規范(V1.2),廣州周立功單片機發展有限公司,2005.
[2] LIN Specification Package(Revision 2.1).LIN Consortium,2006.
[3] PIC16F688數據手冊.DS41203B_CN.2006.
[4] MCP202X數據手冊.DS22018D_CN.2009.