張曉光,陶英軒,黃金山
摘? 要:提出了一種基于車載CAN總線協(xié)議網(wǎng)關(guān)的發(fā)送與接收緩沖區(qū)設(shè)計(jì)方法。以接收與發(fā)送雙軟件緩沖區(qū)去配合CAN控制器的硬件緩沖區(qū),設(shè)計(jì)中斷式報(bào)文存儲(chǔ)進(jìn)程將硬緩沖區(qū)數(shù)據(jù)實(shí)時(shí)讀取到接收軟件緩沖區(qū)中,設(shè)計(jì)中斷式數(shù)據(jù)發(fā)送進(jìn)程將發(fā)送軟件緩沖區(qū)數(shù)據(jù)及時(shí)發(fā)送到發(fā)送硬緩沖區(qū),通過(guò)與硬件緩沖區(qū)的這種聯(lián)動(dòng)方式能夠?qū)崟r(shí)地接收?qǐng)?bào)文,保證報(bào)文不丟失;也能夠在目標(biāo)總線負(fù)載率較大時(shí),避免漏發(fā)報(bào)文以及保證發(fā)送報(bào)文周期。
關(guān)鍵詞:CAN;網(wǎng)關(guān);雙緩沖
中圖分類號(hào):TP368.1? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ?文章編號(hào):1005-2550(2021)04-0102-03
Design and Research of Vehicle-mounted Gateway Double Buffer Based on CAN Bus Protocol
ZHANG Xiao-guang, TAO Ying-xuan, HUANG Jin-shan
( Product Development Department, Faw Car Ji Lin, Chang Chun 130012, China )
Abstract: Abstract: A design method of sending and receiving buffer of vehicle-mounted CAN bus gateway is presented. To receive and send double software buffer to match the CAN controller's hardware buffer, the interrupted message store process is designed to read the hard buffer data into the receiving software buffer in real-time, by this way of linkage with hardware buffer can receive a message in real-time, ensure the message is not lost; It is also able to avoid missing message and ensure the massage sending cycle when the target bus load rate is high.
1? ? 引言
隨著汽車CAN總線技術(shù)的快速發(fā)展,汽車CAN總線技術(shù)已經(jīng)非常成熟,汽車CAN控制器(ECU)逐漸增多,車載CAN總線路數(shù)由前幾年的1-2路CAN快速發(fā)展為當(dāng)前的6-7路CAN,各路CAN之間需要網(wǎng)關(guān)傳遞的路由信息也爆發(fā)式增長(zhǎng)。出于節(jié)約成本和集成化的要求,網(wǎng)關(guān)均采用MCU集成CAN控制器的技術(shù)方案實(shí)現(xiàn)CAN總線通信。由于MCU內(nèi)部CAN控制器的硬件接收緩沖區(qū)和硬件發(fā)送緩沖區(qū)很小,當(dāng)CAN網(wǎng)絡(luò)上短時(shí)間內(nèi)出現(xiàn)大量報(bào)文時(shí),接收硬buffer就會(huì)存滿,如不能及時(shí)處理,接收?qǐng)?bào)文將丟失;同樣當(dāng)目標(biāo)總線負(fù)載率過(guò)高,硬件發(fā)送緩沖區(qū)就將形成積壓報(bào)文,使緩存區(qū)溢出,這樣就會(huì)導(dǎo)致漏發(fā)報(bào)文。為此,本文基于CAN總線協(xié)議車載網(wǎng)關(guān),提出雙緩存接收與發(fā)送策略,保證路由信息被及時(shí)接收與發(fā)送。
2? ? CAN總線通信原理
CAN總線,是一種基于ISO國(guó)際標(biāo)準(zhǔn)化的串行通信總線。在汽車產(chǎn)業(yè)中,出于對(duì)安全性、舒適性、方便性、低功耗、低成本的考慮,應(yīng)用于汽車內(nèi)各種電子控制系統(tǒng)中,實(shí)現(xiàn)準(zhǔn)確的數(shù)據(jù)采集及執(zhí)行器功能控制。
1986年德國(guó)博世公司開(kāi)發(fā)出面向汽車的CAN 通信協(xié)議。CAN總線通信協(xié)議逐漸標(biāo)準(zhǔn)化,逐漸形成并完善了CAN協(xié)議ISO11898及ISO11519,使得不同開(kāi)發(fā)商的ECU可實(shí)現(xiàn)無(wú)障礙通信。CAN總線的高性能和高可靠性已被汽車行業(yè)所認(rèn)同,并成為汽車電氣系統(tǒng)的主要通信手段。對(duì)汽車電氣功能的快速發(fā)展提供了信息通道保障。
3? ? CAN ECU網(wǎng)絡(luò)拓?fù)?/p>
現(xiàn)階段汽車行業(yè)內(nèi)CAN網(wǎng)絡(luò)拓?fù)浠静捎脝尉W(wǎng)關(guān)(GW)多子網(wǎng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。如圖1所示:
4? ? 網(wǎng)關(guān)工作主流程設(shè)計(jì)
基于CAN總線協(xié)議對(duì)網(wǎng)關(guān)提出的實(shí)時(shí)性、報(bào)文完整性、報(bào)文重新封裝組合等性能的基本要求,設(shè)計(jì)出網(wǎng)關(guān)主流程,如圖2所示。
當(dāng)某子網(wǎng)節(jié)點(diǎn)發(fā)送報(bào)文后,CAN收發(fā)器將進(jìn)行濾波,如是需網(wǎng)關(guān)路由信息,將向上存儲(chǔ)到CAN控制器接收硬buffer中,并產(chǎn)生接收中斷。接收中斷將打破網(wǎng)關(guān)主流程,并開(kāi)啟中斷流程-報(bào)文存儲(chǔ)進(jìn)程,報(bào)文存儲(chǔ)進(jìn)程將報(bào)文按順序?qū)懭虢邮哲沚uffer中。網(wǎng)關(guān)主流程按照每1ms周期進(jìn)行軟buff數(shù)據(jù)處理,將處理好的數(shù)據(jù)存儲(chǔ)到發(fā)送硬buffer中,等待CAN發(fā)送器發(fā)送。當(dāng)發(fā)送器完成發(fā)送后,觸發(fā)報(bào)文發(fā)送中斷,發(fā)送中斷將打破網(wǎng)關(guān)主流程,并開(kāi)啟數(shù)據(jù)發(fā)送進(jìn)程,將發(fā)送軟buffer數(shù)據(jù)存儲(chǔ)到硬發(fā)送buffer中,再次等待CAN發(fā)送器發(fā)送。
5? ? 網(wǎng)關(guān)雙緩沖區(qū)設(shè)計(jì)
按照主流程設(shè)計(jì)思路,每路CAN均將設(shè)計(jì)3個(gè)緩沖區(qū),分別為應(yīng)用報(bào)文緩沖區(qū),網(wǎng)管報(bào)文緩沖區(qū),診斷報(bào)文緩沖區(qū)。為了保證網(wǎng)關(guān)的實(shí)時(shí)性和可靠性,以及節(jié)省 RAM 空間,需要對(duì)緩沖區(qū)大小上進(jìn)行考量。
5.1? ?緩沖區(qū)最小單元設(shè)計(jì)
針對(duì)CAN總線報(bào)文格式,計(jì)算出存入一條報(bào)文需要的最大內(nèi)存空間(字節(jié)數(shù))為: (11(ID) +4(DLC)+64(DATA) )/? ?8,因?yàn)榍度胧教幚砥鞯拇鎯?chǔ)器是以1 Byte即8 bit為單位設(shè)計(jì)的,所以上面計(jì)算公式中的bit數(shù)要向上取整成8 的整數(shù)倍,11取整成16,4取整成8,得到結(jié)果為:2+1+8= 11。由此可知,最小的緩沖區(qū)大小為11 Byte,即存下一條最大報(bào)文的大小。
5.2? ?接收緩沖區(qū)大小設(shè)計(jì)
對(duì)于應(yīng)用報(bào)文緩沖區(qū)的計(jì)算,根據(jù)奔騰某車型路由表計(jì)算,網(wǎng)關(guān)最大路由負(fù)載出現(xiàn)在EV子網(wǎng),分別為10ms報(bào)文12條,100ms報(bào)文17條,200ms報(bào)文5條,1000ms報(bào)文49條。如未設(shè)置報(bào)文發(fā)送段間隔,那么極限情況下,報(bào)文將出現(xiàn)排隊(duì)無(wú)間隙情況。也就是當(dāng)控制器上電初始化完成后,第一時(shí)間將有12+17+5+49=83條報(bào)文等待傳輸,按照總線波特率為500kb/s時(shí),每幀報(bào)文傳輸時(shí)間為0.25ms,計(jì)算得出這些報(bào)文將連續(xù)傳輸21ms,同時(shí)10ms 周期報(bào)文將發(fā)送2輪,即總計(jì)將有83+24 =107條報(bào)文排隊(duì)發(fā)送,預(yù)計(jì)發(fā)送時(shí)間26ms。因此在此26ms內(nèi),網(wǎng)關(guān)將出現(xiàn)最大負(fù)載量即接收107條報(bào)文??紤]網(wǎng)關(guān)主程序?yàn)槊?ms對(duì)緩存內(nèi)數(shù)據(jù)進(jìn)行處理,假設(shè)目標(biāo)總線負(fù)載率為40%,那么網(wǎng)關(guān)將每1ms可處理報(bào)文數(shù)量為2條,26ms內(nèi)將處理52條報(bào)文,也就是有107-52=55條報(bào)文將被緩存起來(lái)。因此計(jì)算出EV-CAN接收緩沖區(qū)的大小為:55×11= 605Byte。
對(duì)于診斷報(bào)文緩沖區(qū)的計(jì)算,也按照總線波特率為500kb/s時(shí),每幀報(bào)文傳輸時(shí)間為0.25ms。當(dāng)目標(biāo)控制器反饋流控STmin為0ms時(shí),而又不開(kāi)啟28禁用通信診斷指令的前提下,如需最大傳輸數(shù)據(jù)量為2KB。那么網(wǎng)關(guān)將在500ms內(nèi)將收取診斷儀傳輸?shù)?Kb數(shù)據(jù),考慮網(wǎng)關(guān)主程序?yàn)槊?ms 對(duì)緩存內(nèi)數(shù)據(jù)進(jìn)行處理,假設(shè)目標(biāo)總線負(fù)載率為40%,那么網(wǎng)關(guān)將每1ms可處理報(bào)文數(shù)量為2條,而能夠在500ms內(nèi)轉(zhuǎn)發(fā)1KB數(shù)據(jù),即還有1Kbyte數(shù)據(jù)需要緩存。因此,在奔騰某品牌診斷特殊要求下(目標(biāo)總線負(fù)載40%,需要在不打開(kāi)28服務(wù)前提下發(fā)送2KB),計(jì)算出診斷報(bào)文接收緩沖區(qū)的大小為1KB。
對(duì)于網(wǎng)絡(luò)管理報(bào)文的計(jì)算,按照AUTOSAR簡(jiǎn)單網(wǎng)絡(luò)管理規(guī)范,根據(jù)奔騰某車型網(wǎng)絡(luò)架構(gòu),最大節(jié)點(diǎn)出現(xiàn)在舒適CAN,子節(jié)點(diǎn)數(shù)量為8個(gè),即100ms內(nèi)將有8條報(bào)文錄入網(wǎng)關(guān)。計(jì)算出舒適-CAN接收緩沖區(qū)的大小為:8×11=88Byte。
按照上述計(jì)算,將在網(wǎng)關(guān)MCU內(nèi)設(shè)計(jì)7路接收緩沖區(qū),又將緩沖區(qū)進(jìn)行分類,分別為7個(gè)605B大小的應(yīng)用報(bào)文接收緩沖區(qū),1個(gè)1K B大小的診斷報(bào)文接收緩沖區(qū),7個(gè)88 B大小的網(wǎng)絡(luò)報(bào)文接收緩沖區(qū)。
5.3? ?發(fā)送緩沖區(qū)大小設(shè)計(jì)
發(fā)送緩沖區(qū)根據(jù)高優(yōu)先級(jí)先發(fā)、同優(yōu)先級(jí)先入先出的原則,重新調(diào)整發(fā)送順序,等待CAN 控制器將報(bào)文發(fā)出去??紤]到最不利的情況,可能網(wǎng)絡(luò)存在很大的延時(shí),發(fā)送不暢,需要將所有接收緩沖區(qū)的報(bào)文都存入發(fā)送報(bào)文緩沖區(qū),所以發(fā)送緩沖區(qū)大小應(yīng)該和接收緩沖區(qū)一樣。
6? ? 結(jié)束語(yǔ)
通過(guò)對(duì)網(wǎng)關(guān)單位時(shí)間內(nèi)路由數(shù)據(jù)最大化研究,提出了雙緩沖區(qū)網(wǎng)關(guān)設(shè)計(jì)方法,利用該方法解決了低成本網(wǎng)關(guān)丟幀、及時(shí)性差等問(wèn)題。本設(shè)計(jì)已經(jīng)應(yīng)用于奔騰車型上,車輛情況完全正常,沒(méi)有出現(xiàn)數(shù)據(jù)丟失和嚴(yán)重延時(shí)等情況,進(jìn)一步證明了該網(wǎng)關(guān)設(shè)計(jì)方法的可行性和可靠性,同時(shí)降低了汽車零部件的成本,提高了社會(huì)效益。
參考文獻(xiàn):
[1]ISO 15765-1 道路車輛—對(duì)控制器局域網(wǎng)(CAN )的診斷—第一部分:總體信息(Road vehicles — Diagnostics on Controller Area Networks(CAN)— Part1:General information).
[2]ISO 15765-2 道路車輛—對(duì)控制器局域網(wǎng)(CAN )的診斷—第二部分:網(wǎng)絡(luò)層(Road vehicles — Diagnostics on Controller Area Networks(CAN)— Part2:Network layer services).
[3]程安宇,何川,馮輝宗,等.基于SAE J1939協(xié)議的雙緩沖區(qū)網(wǎng)關(guān)設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2010.
[4]孔令偉.? 車載CAN網(wǎng)絡(luò)的網(wǎng)關(guān)設(shè)計(jì)方法研究[D]. 2008.
[5]李爽,孫克怡.? 汽車網(wǎng)絡(luò)的分類及發(fā)展趨向[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用. 2006 (02).
[6]王杰.? 車載網(wǎng)關(guān)設(shè)計(jì)方法及其網(wǎng)絡(luò)管理技術(shù)研究[D]. 2009.
[7]魏偉,姚維,章瑋. CAN/LIN網(wǎng)關(guān)在車身網(wǎng)絡(luò)中的設(shè)計(jì)與應(yīng)用[J]. 電氣自動(dòng)化. 2008 (02).
[8]付少興,陳曉波,李靖一. 單片機(jī)技術(shù)的應(yīng)用與發(fā)展[J]. 通訊世界. 2016 (15).
張曉光
畢業(yè)于東北大學(xué)自動(dòng)化專業(yè),本科學(xué)歷,現(xiàn)就職于一汽奔騰轎車有限公司,主要從事汽車網(wǎng)絡(luò)診斷開(kāi)發(fā)、網(wǎng)關(guān)開(kāi)發(fā)等工作。