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