專利名稱:一種汽車車身can-lin網關的設計的制作方法
技術領域:
本發明屬于汽車通信網絡系統技術領域,特別涉及CAN總線與LIN總線的網關設計。
背景技術:
汽車通信系統是現代汽車的重要標志。如今,為了減少汽車車身線束,現場總線技術已經廣泛應用于車身電子控制系統。目前汽車上普遍采用的車載總線有局部互聯協議 LIN、控制區域網CAN。CAN-LIN網關是將兩個使用不同協議的網絡段連接在一起,它的作用就是對兩個網段中的使用不同傳輸協議的數據進行互相的轉換。在CAN\LIN網關中,所需要實現的就是將CAN總線上,屬于該網關下屬LIN局域網設備的消息中的數據,按照LIN協議的形式打包,按CAN消息ID查轉換表得到的目的地址發給相應LIN設備;如果LIN設備有消息發向CAN總線上的高速設備,則需經由網關提取數據,打包,之后按LIN消息ID查轉換表得到的目的地址發給相應CAN設備。在國內對于汽車網關安全性及容錯性的研究屬于初步階段,本發明將實時操作系統引入汽車網絡具有創新意義。
發明內容
本發明目的是設計實現一種基于操作系統的CAN-LIN網關。針對汽車車身控制的強實時要求,根據實時操作系統uC/OS-II的中斷延時可預知性,提出了基于實時操作系統的CAN/LIN網關的設計,詳細地給出了該網關硬件、軟件的實現方法。針對網關節點在垂直網絡中的特殊地位,其協議轉換導致的延時容易造成消息丟棄的現象,本發明構造了消息緩沖隊列結構,降低了系統消息丟包率。同時,成功將多關鍵度任務調度算法引入本系統, 使得系統在過載時,仍能保證高關鍵任務優先調度的情況下讓盡可能多的次關鍵或非關鍵任務得到執行。本發明在硬件設計上不僅需要考慮選擇帶有CAN、LIN收發器,CAN控制器和MCU 的芯片,還需考慮到uC/OS-II對硬件平臺的要求,所以選擇MC9S12D64。硬件結構如圖1。本發明的軟件構架有三部分組成,總線驅動層,操作系統層和應用層。驅動層由基本的API構成,在實現芯片功能的基礎上,進一步討論了兩類網絡速率不匹配問題的解決機制-接收緩沖機制。并采用了基于時間的先進先出原則進行排隊,有效地降低了速度差異引起的丟包率,同時,也保證了消息報文處理時先來先服務的時序性。操作系統層采用當前流行的實時操作系統uC/OS-I I。在將uC/OS-I I移植到 MC9S12單片機的過程中,除了要做必要的底層修改之外,本發明解決了瞬時過載情況下的任務調度問題,尤其是解決了不能在保證高關鍵任務優先調度的情況下讓盡可能多的次關鍵或非關鍵任務得到執行的問題。為解決這一問題引入了任務關鍵度這一概念,并定量地描述了任務錯過時限的關鍵度。將任務集劃分為三種狀態正常狀態、緊急狀態、失效狀態。 從而明確地提出任務調度器設計目標讓多級關鍵度任務盡可能地處在正常狀態,偶爾處于緊急狀態,但絕對不能處于失效狀態。
應用層主要負責收發CAN/LIN消息,然后進行消息的協處理。前者首先檢查消息 ID是否為該節點應收消息,然后檢驗消息內容的正確性,最后將消息內容(消息標識和數據)送入協議緩沖中。后者查消息轉換表,判斷該消息是否需要協議轉換(部分消息是發送給網關節點的,不需要進行消息轉發),如果不需要轉換,直接調用消息處理函數;否則, 調用消息轉換函數。本發明的積極意義是將實時操作系統引入汽車網關中,適用于汽車車身控制系統等對安全關鍵度要求較高的實時環境。該系統將CAN、LIN網絡有機結合起來,完成了一個完整透明控制網絡的構建,降低了系統消息丟包率,并且保證高關鍵任務優先調度的情況下讓盡可能多的次關鍵或非關鍵任務得到執行。
圖1CAN/LIN網關硬件結構框2CAN/LIN網關消息轉換系統結構圖
具體實施方案本發明在硬件上選用MC9S12D64芯片。由于CAN/LIN網關具有CAN節點和LIN主節點的雙重身份,它的傳輸是基于兩個基本假設的1.任何CAN節點都可以發送一串預先準備好的信息流,在發送相鄰的兩條信息之間不需要釋放總線。在發送前一個消息幀后進行仲裁,只有失敗時才會釋放總線。2.任何CAN節點的內部消息都先進行整理,如果有多條信息等待發送,那么具有最高優先級的信息將先被發送出去。以上功能在只有一個發送緩沖時是不可實現的。要滿足兩個基本假設中的第1條,就必須至少有3個發送緩沖。而對于第2條, 要求所選用的CAN控制器具有對優先級進行整理和區分的功能。對于本系統,選擇的 MC9S12D64內部集成的CAN控制器,具有3個發送緩沖結構,并具有對優先級進行整理和區分的功能,滿足了基于兩個基本假設提出的要求。本發明在軟件設計的驅動層API函數如圖2。1. Sys_Init()CAN發送控制器M0NCAN08的配置,包括通信波特率、采樣率、發沖區數量的配置, 消息ID接收濾波器、標識符屏蔽寄存器的初始化LIN總線的初始化,與CAN總線相似。2. CAN_Send ()由于M0NCAN08具有三個發送緩沖,首先要查詢發送緩沖當前狀態,可用緩沖,按發送優先級順序,選擇一個并將數據(消息ID、消息數消息長度)裝入緩沖區,之后置發送標志位,啟動發送。3. CAN_Receive()請求CAN消息接收信號量(該信號量在CAN接收中斷中釋放),如果緩沖區中有待收消息,接收任務將調用該函數,將消息收入協議緩沖(protocal Buffer)中;如果未有新到消息,隨接收任務掛起。4. LIN_MsgConvert ()消息轉換函數,將CAN消息轉化為LIN消息。首先查詢消息轉換表,收到的CAN消息是否應執行轉換,若需要轉換,則將消息數據抽取,查詢轉換表,將消息ID轉換為LIN消息ID,之后消息打包,發送到LIN總線上;如不需轉換,交由網關處理。5. CAN_MsgConvert ()消息轉換函數,將LIN消息轉化為CAN消息。與LIN_MsgC0nVert ()類CAN_ ProtocalBufLoad()將消息數據送入協議緩沖中。等待系統處理(發送/接收)。6. CAN_ISR_Error ()故障檢測函數。用于檢測總線物理層以及數據鏈路層的故障狀態,并進應處理。7. CAN_ISR_Receive()CAN消息接收中斷。釋放消息接收信號量,用于喚醒接收處理任務。本發明為了解決CAN總線與LIN總線速率不匹配的問題,并以及系統RAM資源的折中考慮,設置4個CAN消息緩沖。Struct {Unsigned char can_rcvidbuf[4];Unsigned char can_rcvdatabuf[8];Unsigned char ept ;Unsigned char old ;}can_rcvbuf [4];其中can_rcvidbuf[4]用于接收 CAN 消息標識。can_rcvdatabuf[8]用于接收 CAN 消息數據。ept 標記量,標記所在接受緩沖是否為空。若空(印t = 0),可用于存放新到達的消息;否則(印t = 1),等待消息處理。old 標記量,記錄消息的年齡。與印t標記量配合使用。如果消息未被處理(印t= 1),在每個接受中斷中進行增1運算055時不再增1)。 作用為消息處理提供選擇依據(率先處理年齡最大的消息);如果消息被取走(印t = 0), 不作動作,直到所在消息緩沖再次被存入新到達消息。本發明利用MC9S12自帶的CAN模塊實現數據鏈路層錯誤檢測。數據鏈路層檢測是通過MCU中集成的CAN控制器MSCAN_S12進行的。錯誤檢測種類1.溢出接收緩沖區消息溢出時觸發。2.接收錯誤接收錯誤計數器達到96時報警。3.發送錯誤發送錯誤計數器達到96時報警。4.接收被動錯誤接收錯誤計數器達到127時,MSCAN08進入接收被動狀態。5.發送被動錯誤發送錯誤計數器達到127時,MSCAN08進入發送被動狀態。6.總線關閉發送錯誤計數器達到255時,總線關閉其中任意一種故障發生,都會觸發CAN數據鏈路層錯誤中斷(中斷號19)。在中斷服務程序中,將錯誤類型記錄下來,在數據鏈路層故障處理任務(Task_CAN_ErrDealD)中進行相應處理。本發明操作系統層在保留uC/OS-II的功能代碼同時,按照車內網絡的強實時性要求,采用基于多級關鍵度的調度機制,改寫了任務調度函數。以下是各任務的具體描述
1. CAN 消息接收任務 TASK_CAN_Rcv ()
[4,5]消息接收任務由接收中斷喚醒,如果超過時限,意味著網關節點丟包。但是如果連續接收,N+1個消息,會造成緩沖隊列溢出,根據上文采用的動態優先級策略,此任務在連續N+1次觸發時,任意N次在時限內完成,即可。(本系統中,N = 4)2. CAN 消息轉換任務 TASK_CAN_MsgConvert ()[1,4]由于LIN總線的可靠性較低,應用中通常連發3條同樣的消息幀,因此,此任務關鍵度看似為[1,3],但這一因素并不影響到任務的關鍵度。錯過時限并不意味著不成功。對于轉發CAN消息來說,沒有定義其時限。所以,還是定為[1,4],原因該任務應在4 個消息到來之間至少執行一次。收到4個CAN消息,仍沒有執行一次LIN消息轉換,那么消息隊列即將溢出。3. LIN 消息接收任務 TASK_LIN_Rcv ()[1,1]由于LIN總線協議并沒有提供出錯重發機制,因此,LIN消息的接受任務的關鍵度一定要置為[1,1]。4. LIN 消息轉換任務 TASK_LIN_MsgConvert ()[1,3]原因同任務2LIN連發三條。如果收到3個LIN消息,仍沒有執行一次CAN 消息轉換,那么該LIN消息失效。5. CAN 物理層故障處理任務(Task_CAN_ErrDeal)[1,1]故障一旦出現,說明CAN總線通信已經不可靠,應馬上響應,做出相應處理.
6. CAN數據鏈路層故障處理任務(Task_CAN_ErrDealD)[1,2]故障一旦出現,說明CAN總線通信已經不可靠,應及時響應,做出相應處理。應用層主要負責收發CAN/LIN消息,然后進行消息的協處理。前者首先檢查消息 ID是否為該節點應收消息,然后檢驗消息內容的正確性,最后將消息內容(消息標識和數據)送入協議緩沖中。后者查消息轉換表,判斷該消息是否需要協議轉換(部分消息是發送給網關節點的,不需要進行消息轉發),如果不需要轉換,直接調用消息處理函數;否則, 調用消息轉換函數。還要保證任務之間的通信。
權利要求
1.一種汽車車身CAN-LIN網關的設計,其特征是采用UCOS-II操作系統,構造了消息緩沖隊列結構,引入多關鍵度任務調度算法,完成對網關的軟硬件設計。
2.根據權利要求1所述的系統,其特征是本發明在硬件設計上選擇帶有CAN控制器的 MC9S12D64 芯片。
3.根據權利要求1所述的系統,其特征是本發明的軟件構架有三部分組成,總線驅動層,操作系統層和應用層。
4.根據權利要求1所述的系統,其特征是驅動層API有SysJnit()、CAN_Send()、 CAN_Receive ()、LIN_MsgConvert ()、CAN_MsgConvert ()、CAN_ISR_Error ()、CAN_ISR_ Receive ()。
5.根據權利要求1所述的系統,其特征是本發明為了解決CAN總線與LIN總線速率不匹配的問題,并以及系統RAM資源的折中考慮,設置4個CAN消息緩沖。
6.采用基于多級關鍵度的調度機制,改寫了任務調度函數。各任務的描述為CAN消息接收任務TASK_CAN_Rcv ()、CAN消息轉換任務TASK_CAN_MsgConvert ()、LIN消息接收任務TASK_LIN_Rcv ()、LIN消息轉換任務TASK_LIN_MsgConvert ()、CAN物理層故障處理任務 (Task_CAN_ErrDeal)、CAN 數據鏈路層故障處理任務(Task_CAN_ErrDealD)。
全文摘要
一種汽車車身CAN-LIN網關的設計,本發明屬于汽車通信系統中的車載總線網關技術,其方式是基于實時操作系統uC/OS-II,運用虛擬CAN節點的設計思想,實現了混合網絡一致、透明的數據通訊,完成了對CAN-LIN網關的軟硬件設計。針對網關節點在垂直網絡中的特殊地位,其協議轉換導致的延時容易造成消息丟棄的現象,本發明構造了消息緩沖隊列結構,降低了系統消息丟包率。同時,成功將多關鍵度任務調度算法引入本系統,使得系統在過載時,仍能保證高關鍵任務優先調度的情況下讓盡可能多的次關鍵或非關鍵任務得到執行。本發明積極地效果是將實時操作系統引入汽車網關中,適用于汽車車身控制系統等對安全關鍵度要求較高的實時環境。
文檔編號H04L12/40GK102291334SQ20101020384
公開日2011年12月21日 申請日期2010年6月21日 優先權日2010年6月21日
發明者姜義成, 姜博, 范振 申請人:哈爾濱工業大學