基于CAN/LIN息線(xiàn)的汽車(chē)混合網(wǎng)關(guān)設計
數據接收是從總線(xiàn)上接收數據,進(jìn)行必要的協(xié)議轉換,再將轉換后的數據存人相應的緩沖區。網(wǎng)關(guān)中有3個(gè)接收子程序,分別對應兩路CAN控制器及一路LIN發(fā)送器。數據接收采用中斷方式,由于不同網(wǎng)絡(luò )有不同的實(shí)時(shí)性要求,因此為3個(gè)接收程序設定了不同的中斷級別。高速CAN的實(shí)時(shí)性要求最高,中斷級別也設為最高;而LIN總線(xiàn)的實(shí)時(shí)性在三者中最低,故中斷級別也最低。當一個(gè)接收中斷發(fā)生后,進(jìn)入接收中斷子程序,判斷相應的緩沖區是否已滿(mǎn)(低速CAN的接收程序在接收到數據后需要根據數據的目的網(wǎng)絡(luò )確定緩存區為BUF2還是BUF3)。如果緩沖區已滿(mǎn),則產(chǎn)生一個(gè)溢出錯誤標志;如果沒(méi)有滿(mǎn),則將數據進(jìn)行相應的協(xié)議轉換,并將轉換后的數據存入相應的緩存區,退出中斷并完成接收。圖6所示為低速CAN數據接收過(guò)程的簡(jiǎn)要流程。
3.4 數據的處理
網(wǎng)關(guān)的數據處理是指協(xié)議的轉換和數據在緩沖區的存儲與轉發(fā)。每當接收到一組數據時(shí),首先進(jìn)行協(xié)議轉換,然后再將其存入到相應的緩存區。高低速CAN的協(xié)議相同,并不需要轉換,因此主要是進(jìn)行CAN協(xié)議和LIN協(xié)議之間的轉換。
CAN協(xié)議和LIN協(xié)議都是以幀(frame)為數據單位進(jìn)行通信的。在進(jìn)行LIN協(xié)議到CAN協(xié)議的轉換時(shí),首先是將LIN幀分解,從標識符場(chǎng) (identfield)提取出其中的ID標識符,從數據場(chǎng)(data field)提取出有效數據,然后根據這些信息封裝成符合要求的CAN幀格式。CAN協(xié)議到LIN協(xié)議的轉換過(guò)程亦是如此。先將CAN幀分解,從仲裁域 (arbitration field)和數據域(data field)中提取出有用信息,然后封裝成符合要求的LIN幀格式。
數據的4個(gè)緩沖區BUF1~BUF4為FIFO(First InFirst Out)緩沖區,本文采用循環(huán)隊列(circular queue)來(lái)實(shí)現數據的先進(jìn)先出。兩個(gè)指針Read和Write分別指示隊頭元素和隊尾元素在緩沖區空間中的位置,它們的初值在隊列初始化時(shí)均應置為 0,每讀取或寫(xiě)入一次數據,都要對緩沖區的參數進(jìn)行調整。寫(xiě)數據時(shí),將新元素插入Write所指的位置,然后將Write加1;讀數據時(shí),刪去Read所指的元素,然后將Read加1并返回被刪元素。
4 網(wǎng)關(guān)通信測試
將網(wǎng)關(guān)的高速CAN接口和低速CAN接口分別與單獨的CAN節點(diǎn)電路相連,LIN接口與單獨的LIN從節點(diǎn)相連,組成測試網(wǎng)絡(luò )。測試的主要內容為高速 CAN和低速CAN之間的通信,低速CAN和LIN網(wǎng)絡(luò )之間的通信。高速CAN網(wǎng)絡(luò )采用速率為500 kb/s,低速CAN網(wǎng)絡(luò )采用的速率為100kb/s,LIN網(wǎng)絡(luò )采用的速率為10 kb/s。利用PC機的串口發(fā)送測試數據,同時(shí)在另一個(gè)串口終端上進(jìn)行數據的監測。測試結果表明,發(fā)送數據內容與監測到的數據內容一致。
5 總 結
以AT91SAM7A3為核心設計的一款CAN/LIN混合網(wǎng)關(guān),實(shí)現了汽車(chē)網(wǎng)絡(luò )中高速CAN總線(xiàn)、容錯CAN總線(xiàn)及LIN總線(xiàn)三類(lèi)網(wǎng)絡(luò )之間的通信,使汽車(chē)中的各類(lèi)網(wǎng)絡(luò )的信息能夠有效共享,實(shí)現了不同性質(zhì)網(wǎng)絡(luò )的互聯(lián)。
評論