馬建輝 胡代榮 郭坤
摘 要: 提出并驗(yàn)證了一種汽車CAN總線網(wǎng)關(guān)的報(bào)文接收和發(fā)送方法。以軟件緩沖區(qū)配合CAN控制器的硬件緩沖區(qū),設(shè)計(jì)軟件緩沖區(qū)管理任務(wù),通過(guò)與硬件緩沖區(qū)的聯(lián)動(dòng)能夠?qū)崟r(shí)地接收?qǐng)?bào)文,保證報(bào)文不丟失。同時(shí),在CAN控制器硬件緩沖區(qū)未滿時(shí)及時(shí)將報(bào)文發(fā)送到總線上,不漏發(fā)報(bào)文,也不影響周期報(bào)文的周期準(zhǔn)確性。
關(guān)鍵詞: BCM; 低功耗; RKE; CAN總線; 網(wǎng)關(guān); 報(bào)文
中圖分類號(hào): TN915.05?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2018)11?0005?03
A messages receiving and transmitting method of automotive CAN bus gateway
MA Jianhui1, 2, 3, HU Dairong1, 2, 3, GUO Kun1, 2, 3
(1. Qilu University of Technology (Shandong Academy of Sciences), Jinan 250353, China;
2. Institute of Automation, Shandong Academy of Sciences, Jinan 250014, China;
3. Shandong Key Laboratory of Automotive Electronics Technology, Jinan 250014, China)
Abstract: A massage receiving and transmitting method of automotive CAN bus gateway is proposed and verified. The management tasks of the software buffer were designed to make the software buffer match up the hardware buffer of the CAN controller. The interaction of software buffer with the hardware buffer can realize the real?time message receiving, and ensure the message not to be lost. At the same time, the message is timely sent to the bus before the hardware buffer of CAN controller is completely filled up, which can send all the messages without missing, and maintain the periodic accuracy of periodic messages.
Keywords: BCM; low?power consumption; BKE; CAN bus; gateway; massage
隨著汽車電子部件的增多和智能化程度的提高,CAN總線系統(tǒng)已經(jīng)成為汽車的重要組成部分。根據(jù)功能劃分、拓?fù)浣Y(jié)構(gòu)設(shè)計(jì)和實(shí)時(shí)性的不同要求,汽車一般會(huì)設(shè)計(jì)多個(gè)CAN網(wǎng)絡(luò)。CAN網(wǎng)絡(luò)之間的信息交互由網(wǎng)關(guān)實(shí)現(xiàn),網(wǎng)關(guān)包括多個(gè)CAN接口,接入不同的CAN網(wǎng)絡(luò),實(shí)現(xiàn)報(bào)文的接收和轉(zhuǎn)發(fā)[1]。在所有的CAN網(wǎng)絡(luò)節(jié)點(diǎn)中,從報(bào)文接收和發(fā)送的角度看,網(wǎng)關(guān)的負(fù)荷是最高的。CAN網(wǎng)絡(luò)采用非破壞性仲裁方式競(jìng)爭(zhēng)總線,任一節(jié)點(diǎn)可以在任意時(shí)刻向總線發(fā)送數(shù)據(jù),連接多個(gè)CAN網(wǎng)絡(luò)的網(wǎng)關(guān)可能會(huì)在較短的時(shí)間內(nèi)接收到大量報(bào)文,并需要在短時(shí)間內(nèi)轉(zhuǎn)發(fā)大量需要路由的報(bào)文。進(jìn)行周期報(bào)文的轉(zhuǎn)發(fā)時(shí),根據(jù)不同汽車廠家的要求,報(bào)文周期一般需要保證在規(guī)定值的±10%以內(nèi),這對(duì)網(wǎng)關(guān)的實(shí)時(shí)性、準(zhǔn)確性都提出了較高的要求。
出于成本節(jié)約和集成化的要求,汽車電子零部件采用MCU內(nèi)部的CAN控制器結(jié)合物理層芯片實(shí)現(xiàn)CAN總線通信[2]。由于低成本MCU的內(nèi)部CAN控制器的硬件接收緩沖區(qū)和硬件發(fā)送緩沖區(qū)很小,當(dāng)CAN網(wǎng)絡(luò)上短時(shí)間內(nèi)出現(xiàn)大量報(bào)文時(shí),如果未能及時(shí)讀取硬件接收緩沖區(qū)中的數(shù)據(jù)并清零標(biāo)志位,便無(wú)法接收新的報(bào)文;當(dāng)CAN網(wǎng)關(guān)短時(shí)間內(nèi)需要轉(zhuǎn)發(fā)大量報(bào)文時(shí),如果硬件發(fā)送緩沖區(qū)已滿,但仍存在需要發(fā)送的報(bào)文時(shí),如果未能及時(shí)轉(zhuǎn)發(fā)報(bào)文,可能會(huì)造成漏發(fā)報(bào)文或者周期不準(zhǔn)確的錯(cuò)誤[3]。如果選用CAN控制器硬件接收緩沖區(qū)和硬件發(fā)送緩沖區(qū)都比較大的MCU,會(huì)增加成本,影響經(jīng)濟(jì)效益和社會(huì)效益。
為此,本文提出并驗(yàn)證了一種汽車CAN總線網(wǎng)關(guān)的報(bào)文接收和發(fā)送方法[4],能夠?qū)崟r(shí)地接收?qǐng)?bào)文,保證報(bào)文不丟失,同時(shí)在CAN控制器硬件緩沖區(qū)未滿時(shí)及時(shí)將報(bào)文發(fā)送到總線上,不漏發(fā)報(bào)文,也不影響周期報(bào)文的周期準(zhǔn)確性。
針對(duì)CAN報(bào)文的接收和發(fā)送,分別定義軟件接收緩沖區(qū)和軟件發(fā)送緩沖區(qū),并創(chuàng)建緩沖區(qū)管理任務(wù)。緩沖區(qū)為結(jié)構(gòu)體數(shù)組形式的環(huán)形隊(duì)列[5],結(jié)構(gòu)體成員包括報(bào)文ID、報(bào)文長(zhǎng)度和報(bào)文數(shù)據(jù),數(shù)組長(zhǎng)度根據(jù)CAN網(wǎng)絡(luò)矩陣表、網(wǎng)關(guān)報(bào)文周期和網(wǎng)絡(luò)負(fù)載率進(jìn)行設(shè)置,保證在CAN網(wǎng)絡(luò)正常通信的情況下,不會(huì)出現(xiàn)緩沖區(qū)溢出的情形[6]。軟件緩沖區(qū)數(shù)組元素通過(guò)索引進(jìn)行尋址,接收數(shù)組和發(fā)送數(shù)組各包括存入索引和取出索引。將索引加1時(shí),如果索引值等于數(shù)組長(zhǎng)度,將索引值置零。
以中斷方式接收CAN網(wǎng)絡(luò)報(bào)文[7],在CAN控制器接收中斷服務(wù)程序中,將CAN控制器硬件接收緩沖區(qū)中的數(shù)據(jù)存入由接收數(shù)組存入索引尋址的接收緩沖區(qū)位置,向緩沖區(qū)管理任務(wù)發(fā)送“接收到新報(bào)文”的信號(hào),同時(shí),將存入索引加1,如果存入索引值等于數(shù)組長(zhǎng)度,將存入索引值置零。
當(dāng)應(yīng)用需要發(fā)送報(bào)文時(shí),首先通過(guò)CAN控制器的寄存器判斷硬件發(fā)送緩沖區(qū)是否已滿,如果未滿,將待發(fā)送報(bào)文填充到硬件發(fā)送緩沖區(qū),CAN控制器自動(dòng)完成報(bào)文發(fā)送任務(wù)[8];如果已滿,將待發(fā)送報(bào)文存入由發(fā)送數(shù)組存入索引標(biāo)記的軟件發(fā)送緩沖區(qū)位置,將存入索引加1,同時(shí)開啟CAN報(bào)文發(fā)送中斷。如果存入索引值等于數(shù)組長(zhǎng)度,將存入索引值置零。
CAN控制器成功發(fā)送報(bào)文后,觸發(fā)報(bào)文發(fā)送中斷,在CAN報(bào)文發(fā)送中斷服務(wù)程序中向緩沖區(qū)管理任務(wù)發(fā)送“硬件發(fā)送緩沖區(qū)未滿”信號(hào)。
在緩沖區(qū)管理任務(wù)中,如果接收到的信號(hào)是“接收到新報(bào)文”,進(jìn)入軟件接收緩沖區(qū)管理子任務(wù);如果接收到的信號(hào)是“硬件發(fā)送緩沖區(qū)未滿”,進(jìn)入軟件發(fā)送緩沖區(qū)管理子任務(wù)。
整體工作流程如圖1所示。
由于網(wǎng)關(guān)報(bào)文眾多且硬件緩沖區(qū)資源有限,為了保證網(wǎng)關(guān)不丟失任何報(bào)文并實(shí)現(xiàn)報(bào)文周期的準(zhǔn)確性,可以采用配置各個(gè)CAN節(jié)點(diǎn)的報(bào)文發(fā)送時(shí)段的方法,它能夠避免因多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送報(bào)文導(dǎo)致總線競(jìng)爭(zhēng)以及報(bào)文過(guò)于密集的現(xiàn)象,該方法能夠改善總線報(bào)文在時(shí)間軸上的分布[9],降低對(duì)CAN控制器硬件緩沖區(qū)的要求,但是這種方法需要分析總線波特率、網(wǎng)絡(luò)內(nèi)所有報(bào)文的優(yōu)先級(jí)和周期,不僅需要每個(gè)CAN節(jié)點(diǎn)都實(shí)現(xiàn)這種方法,而且靈活性很差,一旦由于網(wǎng)絡(luò)拓?fù)涞母淖冊(cè)黾踊驕p少了某個(gè)節(jié)點(diǎn),便會(huì)影響整個(gè)設(shè)計(jì)。
基于此,本方法采用軟件緩沖區(qū)的方式[10],采用中斷方式觸發(fā)報(bào)文軟件緩沖區(qū)管理任務(wù),如圖2所示,報(bào)文接收中斷,表明硬件接收緩沖區(qū)存在待解析的報(bào)文,觸發(fā)軟件接收緩沖區(qū)管理子任務(wù),報(bào)文發(fā)送中斷,表明硬件發(fā)送緩沖區(qū)未滿,可以進(jìn)行報(bào)文發(fā)送,觸發(fā)軟件發(fā)送緩沖區(qū)管理子任務(wù)。采用這種方法,當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生改變或者增減CAN網(wǎng)絡(luò)報(bào)文時(shí),不必修改本方法的設(shè)計(jì),靈活性很高,而且以實(shí)時(shí)中斷的方式觸發(fā)報(bào)文緩沖區(qū)管理任務(wù),能夠保證數(shù)據(jù)的一致性和報(bào)文周期的準(zhǔn)確性。
此外,針對(duì)及時(shí)轉(zhuǎn)發(fā)報(bào)文的要求,如果采用周期性掃描數(shù)據(jù)緩沖區(qū)的方法判斷是否有需要發(fā)送的數(shù)據(jù)包,在很多情況下,由于不存在需要發(fā)送的數(shù)據(jù)包,這時(shí)仍然進(jìn)行周期性掃描,會(huì)白白浪費(fèi)嵌入式系統(tǒng)寶貴的計(jì)算資源。另外,如果設(shè)置的掃描周期時(shí)間較長(zhǎng),會(huì)造成需要轉(zhuǎn)發(fā)的短周期報(bào)文不滿足周期準(zhǔn)確性要求,如果設(shè)置的掃描周期時(shí)間較短,會(huì)加大系統(tǒng)負(fù)荷。因此,本方法采用中斷方式觸發(fā)報(bào)文緩沖區(qū)管理任務(wù),能夠保證數(shù)據(jù)的一致性和報(bào)文周期的準(zhǔn)確性。
首先,通過(guò)比較接收數(shù)組的存入索引和取出索引,判斷是否存在待處理報(bào)文。如果存入索引和取出索引相等,表示不存在待處理的報(bào)文,直接退出軟件接收緩沖區(qū)管理子任務(wù);如果兩者不相等,表示存在待處理的報(bào)文。讀取接收數(shù)組中由取出索引標(biāo)記的元素,根據(jù)報(bào)文ID、長(zhǎng)度和數(shù)據(jù)進(jìn)行相應(yīng)處理,然后將取出索引加1,如果取出索引值等于數(shù)組長(zhǎng)度,將取出索引置零。再次判斷存入索引是否等于取出索引,循環(huán)這個(gè)過(guò)程,直至處理完所有未被處理的報(bào)文。流程圖如圖3所示。
首先,通過(guò)比較發(fā)送數(shù)組的存入索引和取出索引,判斷是否存在待發(fā)送報(bào)文。兩者相等表示不存在未被發(fā)送的報(bào)文,關(guān)閉報(bào)文發(fā)送中斷,退出軟件發(fā)送緩沖區(qū)管理子任務(wù);如果兩者不相等,首先,通過(guò)CAN控制器寄存器判斷硬件發(fā)送緩沖區(qū)是否已滿,如果已滿,直接退出軟件發(fā)送緩沖區(qū)管理子任務(wù)。如果未滿,讀取發(fā)送數(shù)組中由取出索引標(biāo)記的元素,將報(bào)文ID、長(zhǎng)度和數(shù)據(jù)賦值到CAN控制器硬件發(fā)送緩沖區(qū)對(duì)應(yīng)的寄存器,然后將取出索引加1,如果取出索引值等于數(shù)組長(zhǎng)度,將取出索引值置零。再次比較發(fā)送數(shù)組的存入索引和取出索引,直到退出軟件發(fā)送緩沖區(qū)管理子任務(wù)。軟件發(fā)送緩沖區(qū)管理流程圖如圖4所示。
本文提出的方法采用CAN控制器硬件緩沖區(qū)較小的MCU進(jìn)行網(wǎng)關(guān)設(shè)計(jì),降低了汽車零部件的成本,提高了社會(huì)效益。而且,本方法可以適用于普通的CAN節(jié)點(diǎn),具有很強(qiáng)的通用性。
參考文獻(xiàn)
[1] 王渝卉,郝礦榮,丁永生,等.車載CAN網(wǎng)關(guān)實(shí)時(shí)性分析與改進(jìn)[J].機(jī)電工程,2012,29(8):873?876.
WANG Yuhui, HAO Kuangrong, DING Yongsheng, et al. Real?time analysis and optimization of vehicle CAN?CAN gateway [J]. Journal of mechanical & electrical engineering, 2012, 29(8): 873?876.
[2] 劉侃,滿慶豐.基于MC9S12HY64的電動(dòng)車儀表盤設(shè)計(jì)[J].儀表技術(shù)與傳感器,2014(12):22?24.
LIU Kan, MAN Qingfeng. Dashboard design for electric cars based on MC9S12HY64 [J]. Instrument technique and sensor, 2014(12): 22?24.
[3] 馮源,豆海利,趙剛.基于S12X系列雙核單片機(jī)的CAN網(wǎng)關(guān)設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2016,24(1):191?195.
FENG Yuan, DOU Haili, ZHAO Gang. Design of CAN bus gateway based on S12 series dual?core MCU [J]. Computer measurement & control, 2016, 24(1): 191?195.
[4] 山東省科學(xué)院自動(dòng)化研究所.一種汽車CAN總線網(wǎng)關(guān)的報(bào)文接收和發(fā)送方法:中國(guó),201611178709.6 [P].2016?12?19.
Institute of Automation, Shandong Academy of Sciences. A method for receiving and transmitting messages of an automotive CAN bus gateway: China, 201611178709.6 [P]. 2016?12?19.
[5] 程安宇,何川,馮輝宗,等.基于SAE J1939協(xié)議的雙緩沖區(qū)網(wǎng)關(guān)設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2010,30(z1):15?17.
CHENG Anyu, HE Chuan, FENG Huizong, et al. Design of gateway with double buffer based on SAE J1939 [J]. Journal of computer applications, 2010, 30(S1): 15?17.
[6] 趙公旗,馮寶存,趙紅玉,等.淺談車載總線負(fù)載對(duì)網(wǎng)絡(luò)傳輸影響及優(yōu)化[J].汽車電器,2015(12):22?24.
ZHAO Gongqi, FENG Baocun, ZHAO Hongyu, et al. Influence of vehicle busload on network transmission and its optimization [J]. Auto electric parts, 2015(12): 22?24.
[7] 謝曉兵,董筠,周新發(fā),等.CAN總線并發(fā)通信時(shí)下位機(jī)應(yīng)用軟件設(shè)計(jì)[J].空間控制技術(shù)與應(yīng)用,2015,41(2):51?56.
XIE Xiaobing, DONG Jun, ZHOU Xinfa, et al. Design for communication of CAN bus of lower application software in concurrent communication [J]. Aerospace control and application, 2015, 41(2): 51?56.
[8] 孫新安.CAN控制器的軟件編程[J].有色金屬加工,2017,46(5):61?66.
SUN Xinan. CAN controller software programming [J]. Non?ferrous metals processing, 2017, 46(5): 61?66.
[9] 劉宇,宋桂秋.時(shí)間參數(shù)為非正態(tài)分布的CAN總線數(shù)據(jù)傳輸可靠性分析[J].機(jī)械與電子,2014(11):16?20.
LIU Yu, SONG Guiqiu. Analysis of non?normal distribution time parameters data transmission reliability in CAN bus [J]. Achinery & electronics, 2014(11): 16?20.
[10] 張哲宇,王義.汽車CAN?FlexRay總線網(wǎng)關(guān)研究與設(shè)計(jì)[J].貴州大學(xué)學(xué)報(bào)(自然科學(xué)版),2017,34(5):93?99.
ZHANG Zheyu, WANG Yi. Research and design of automotive CAN?FlexRay bus gateway [J]. Journal of Guizhou University (natural science), 2017, 34(5): 93?99.