摘 要:控制器局域網(wǎng)絡(luò)(Controller Area Network,CAN)在汽車、工業(yè)控制、航空等嵌入式系統(tǒng)開發(fā)中得到了廣泛的應(yīng)用。為確保其通信功能及接口實(shí)現(xiàn)的正確性,需進(jìn)行有針對(duì)性地測(cè)試。為了提高軟件測(cè)試過程中CAN總線接口測(cè)試的效率和質(zhì)量,本文設(shè)計(jì)和開發(fā)了基于CAN總線控制器MCP2515的CAN總線控制軟件,以實(shí)現(xiàn)測(cè)試過程中對(duì)CAN總線收發(fā)數(shù)據(jù)的模擬和監(jiān)視。
關(guān)鍵詞:軟件測(cè)試;CAN總線;傳輸層;應(yīng)用層
中圖分類號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2018)07-0001-05
Abstract:The Controller Area Network is widely used in the development of embedded systems,such as automobile,industrial control,aviation and so on. For the correctness of its communication function and interface implementation,it needs to be tested pertinent. In order to improve the efficiency and quality of CAN bus interface test in software testing,a CAN bus control software based on CAN bus controller MCP2515 is designed and developed to realize the simulation and monitoring of CAN bus and receive data in the test process.
Keywords:software tests;CAN bus;transport layer;application layer
1 MCP2515概述
MCP2515是一款獨(dú)立CAN控制器,能夠簡(jiǎn)化需要與CAN總線連接的應(yīng)用。該器件主要由CAN模塊、控制邏輯、SPI協(xié)議模塊、發(fā)送/接收緩沖器/驗(yàn)收屏蔽寄存器/驗(yàn)收濾波寄存器等幾部分組成,其結(jié)構(gòu)如圖1所示。
1.1 CAN模塊
CAN模塊的主要功能是對(duì)CAN總線上接收和發(fā)送的全部報(bào)文進(jìn)行處理。對(duì)于需要發(fā)送的CAN總線報(bào)文,CAN模塊首先將報(bào)文載入相應(yīng)的報(bào)文緩沖器以及控制寄存器,再啟動(dòng)報(bào)文發(fā)送。報(bào)文的發(fā)送可通過SPI接口設(shè)置控制寄存器中的相應(yīng)位進(jìn)行啟動(dòng),或者通過使能引腳進(jìn)行啟動(dòng)。CAN模塊還能夠通過讀取相應(yīng)的寄存器的方式,對(duì)通訊狀態(tài)以及可能發(fā)生的錯(cuò)誤進(jìn)行檢查。此外,CAN模塊可以對(duì)CAN總線上的報(bào)文進(jìn)行錯(cuò)誤檢查,當(dāng)檢查結(jié)果為正確時(shí),將正確的報(bào)文載入到接收緩沖器中。
1.2 控制邏輯
控制邏輯模塊可通過對(duì)MCP2515的設(shè)置以及對(duì)MCP 2515運(yùn)行的控制,從而實(shí)現(xiàn)傳輸信息與控制。MCP2515上有各接收緩沖器的專用中斷引腳以及一個(gè)多用途中斷引腳,可用來指示有效報(bào)文是否被接收,并轉(zhuǎn)移到接收緩沖器。為了判斷有效報(bào)文是否被正確接收,器件提供了中斷引腳、通用中斷引腳和狀態(tài)寄存器,可用于上述情況的判斷,提高了系統(tǒng)的靈活性。MCP2515還提供了三個(gè)可令裝載在發(fā)送緩沖器中的報(bào)文立即發(fā)送出去的引腳,用戶可自行決定是否使用,若決定不使用,也可使用控制寄存器來啟動(dòng)報(bào)文發(fā)送。
1.3 SPI協(xié)議模塊
主單片機(jī)可通過SPI接口與MCP2515連接,通過專門的SPI命令以及標(biāo)準(zhǔn)的SPI讀/寫指令來讀/寫所有的寄存器。
1.4 發(fā)送/接收緩沖器/驗(yàn)收濾波寄存器/驗(yàn)收屏蔽寄存器
MCP2515設(shè)有兩個(gè)接收緩沖器、三個(gè)發(fā)送緩沖器、六個(gè)驗(yàn)收濾波寄存器以及兩個(gè)驗(yàn)收屏蔽寄存器。
2 傳輸層接口設(shè)計(jì)
2.1 幀類型選擇
CAN2.0B總線協(xié)議規(guī)定報(bào)文傳輸由數(shù)據(jù)幀、遠(yuǎn)程幀、過載幀和錯(cuò)誤幀共4種不同的幀類型表示和控制。在被測(cè)系統(tǒng)的CAN總線控制軟件中,只采用數(shù)據(jù)幀進(jìn)行通信:(1)數(shù)據(jù)幀:將數(shù)據(jù)從發(fā)送器傳輸?shù)浇邮掌鳎唬?)遠(yuǎn)程幀:當(dāng)目標(biāo)節(jié)點(diǎn)需要向數(shù)據(jù)源節(jié)點(diǎn)請(qǐng)求發(fā)送數(shù)據(jù)時(shí),目標(biāo)節(jié)點(diǎn)首先發(fā)送一個(gè)遠(yuǎn)程幀,該遠(yuǎn)程幀的標(biāo)識(shí)符與所需數(shù)據(jù)幀的標(biāo)識(shí)符匹配。數(shù)據(jù)源節(jié)點(diǎn)收到該遠(yuǎn)程幀后,將響應(yīng)遠(yuǎn)程幀請(qǐng)求,并發(fā)送一個(gè)數(shù)據(jù)幀;(3)錯(cuò)誤幀:錯(cuò)誤幀含有錯(cuò)誤標(biāo)志以及錯(cuò)誤定界共兩個(gè)字段。任何一個(gè)節(jié)點(diǎn)檢測(cè)到總線發(fā)生錯(cuò)誤后,會(huì)發(fā)出一個(gè)錯(cuò)誤幀;(4)過載幀:過載幀包含過載標(biāo)志和過載定界符兩個(gè)字段。過載幀在一個(gè)數(shù)據(jù)幀或遠(yuǎn)程幀之后,下一個(gè)數(shù)據(jù)幀或遠(yuǎn)程幀之前被發(fā)送,用于提供延時(shí)。
2.2 幀格式選擇
CAN2.0B總線協(xié)議對(duì)數(shù)據(jù)幀的格式進(jìn)行了詳細(xì)規(guī)定,包括標(biāo)準(zhǔn)數(shù)據(jù)幀和擴(kuò)展數(shù)據(jù)幀。通過對(duì)標(biāo)準(zhǔn)數(shù)據(jù)幀和擴(kuò)展數(shù)據(jù)幀進(jìn)行對(duì)比分析發(fā)現(xiàn),其不同之處為識(shí)別符的長(zhǎng)度:標(biāo)準(zhǔn)數(shù)據(jù)幀具有11位識(shí)別符,而擴(kuò)展數(shù)據(jù)幀具有29位識(shí)別符。
根據(jù)被測(cè)系統(tǒng)的外部CAN總線通訊設(shè)計(jì)的CAN總線通訊軟件選用標(biāo)識(shí)符更長(zhǎng)的擴(kuò)展數(shù)據(jù)幀進(jìn)行數(shù)據(jù)通訊。
2.3 擴(kuò)展數(shù)據(jù)幀結(jié)構(gòu)設(shè)計(jì)
擴(kuò)展數(shù)據(jù)幀共由幀起始、仲裁字段、控制字段、數(shù)據(jù)字段、CRC校驗(yàn)字段、應(yīng)答字段和幀結(jié)尾等7個(gè)不同的控制字段組成,其中數(shù)據(jù)字段的長(zhǎng)度為可變。
2.3.1 幀起始
擴(kuò)展數(shù)據(jù)幀的幀起始僅包含一個(gè)“顯性”數(shù)據(jù)位,標(biāo)志著數(shù)據(jù)幀的開始。總線上的各個(gè)節(jié)點(diǎn)均需要與開始發(fā)送報(bào)文的節(jié)點(diǎn)的幀起始前沿保持同步,且只有總線空閑時(shí)才允許站開始發(fā)送數(shù)據(jù)
2.3.2 仲裁字段
擴(kuò)展數(shù)據(jù)幀的仲裁字段由ID0至ID28共29位的識(shí)別符、SRR位、IDE位、RTR位共同組成。
識(shí)別符由29位組成,其格式包括兩部分:11位基本ID按ID28到ID18的順序發(fā)送;18位擴(kuò)展ID按ID17到ID0順序發(fā)。
SRR位是替代遠(yuǎn)程請(qǐng)求位,在本CAN總線控制軟件中設(shè)置為隱性;IDE位是識(shí)別符擴(kuò)展位,在本CAN總線控制軟件中設(shè)置為隱性;RTR是遠(yuǎn)程發(fā)送請(qǐng)求位,主要用于區(qū)分?jǐn)?shù)據(jù)幀和遠(yuǎn)程幀,在本CAN總線控制軟件中,RTR位設(shè)置為顯性。
2.3.3 控制字段
控制字段由6個(gè)位組成,包括1位標(biāo)識(shí)擴(kuò)展位、1位零保留位和4位數(shù)據(jù)長(zhǎng)度位。在本CAN總線控制軟件中,標(biāo)識(shí)擴(kuò)展位和零保留位設(shè)置為顯性。
2.3.4 數(shù)據(jù)字段
數(shù)據(jù)字段是擴(kuò)展數(shù)據(jù)幀里需要發(fā)送的數(shù)據(jù)段,其字節(jié)數(shù)可變,最大長(zhǎng)度為8個(gè)字節(jié),每字節(jié)包含8位數(shù)據(jù)位,數(shù)據(jù)的長(zhǎng)度由控制字段中的數(shù)據(jù)長(zhǎng)度位定義。
2.3.5 CRC校驗(yàn)字段
CRC校驗(yàn)字段包含一個(gè)15位的循環(huán)冗余校驗(yàn)序列,之后是CRC定界位,CRC定界位設(shè)置為隱性。
2.3.6 應(yīng)答字段
應(yīng)答字段由1位應(yīng)答間隙以及1位應(yīng)答界定符共同組成,數(shù)據(jù)的接收節(jié)點(diǎn)在應(yīng)答間隙返回應(yīng)答。
2.3.7 幀結(jié)尾
每一個(gè)擴(kuò)展數(shù)據(jù)幀均使用7個(gè)隱性的位作為幀結(jié)尾。
3 應(yīng)用層接口設(shè)計(jì)
3.1 消息塊封裝格式
本CAN總線控制軟件的消息塊封裝格式如表1所示。
(1)源/目的地址:消息塊收、發(fā)地址信息;(2)消息類型:消息塊類別;(3)消息長(zhǎng)度:消息塊長(zhǎng)度,由于CAN總線擴(kuò)展數(shù)據(jù)幀的數(shù)據(jù)字段一次最多收發(fā)8Bytes數(shù)據(jù)。當(dāng)收發(fā)消息長(zhǎng)度大于8Bytes時(shí),則拆分和合并消息;(4)消息內(nèi)容:實(shí)際消息內(nèi)容,通過消息類型進(jìn)行區(qū)分,具體見消息塊描述。
為了充分利用擴(kuò)展數(shù)據(jù)幀的仲裁字段,將消息塊的源地址、目的地址和消息類型融合到仲裁字段的識(shí)別符中進(jìn)行設(shè)計(jì),并增加首/尾幀標(biāo)志位。擴(kuò)展數(shù)據(jù)幀仲裁字段的識(shí)別符分配格式如表2所示。
(1)備用:1bits,占29位中的最高位ID28,設(shè)為“顯性”。當(dāng)發(fā)送數(shù)據(jù)長(zhǎng)度大于8字節(jié)時(shí),ID9~I(xiàn)D2為幀號(hào);(2)源地址:消息源地址,5bits,占29位中的ID27~I(xiàn)D23;(3)目的地址:消息目的地址,5bits,占29位中的ID22~I(xiàn)D18;(4)類型塊號(hào):8bits,占29位號(hào)中的ID17~I(xiàn)D10。按照接收到的類型塊號(hào)數(shù)值填寫發(fā)送的類型大塊號(hào),未收到時(shí)上報(bào)默認(rèn)為0;(5)消息協(xié)議ID:8bits,占29位中的ID9~I(xiàn)D2。用于標(biāo)識(shí)消息協(xié)議的ID;當(dāng)發(fā)送數(shù)據(jù)長(zhǎng)度大于8字節(jié)時(shí),ID9~I(xiàn)D2為幀號(hào);(6)首幀標(biāo)志:1bits,占29位中的ID1。標(biāo)志當(dāng)前擴(kuò)展數(shù)據(jù)幀是否為消息塊拆分后的首幀,是則該位置填0,不是則該位置填1;(7)尾幀標(biāo)志:1bits,占29位中的ID0。標(biāo)志當(dāng)前擴(kuò)展數(shù)據(jù)幀是否為消息塊拆分后的尾幀,是則該位置填0,不是則該位置填1。
3.2 基本消息塊類型劃分
根據(jù)被測(cè)系統(tǒng)通過CAN總線的對(duì)外接口,所開發(fā)的CAN總線控制軟件應(yīng)模擬收發(fā)的數(shù)據(jù),可劃分為以下基本消息塊:(1)握手指令消息塊;(2)自檢指令消息塊;(3)查詢軟件信息消息塊;(4)工作方式設(shè)置消息塊;(5)工作參數(shù)設(shè)置消息塊。各消息塊內(nèi)容及具體的格式定義在此不進(jìn)行詳述,可根據(jù)協(xié)議自行定義。
4 通信流程設(shè)計(jì)
CAN總線控制軟件的數(shù)據(jù)傳輸最小單位為字節(jié),每字節(jié)的BIT0為L(zhǎng)SB,即最低有效位;BIT7為MSB,即最高有效位。在通信中,涉及多字節(jié)的數(shù)據(jù)均采用高字節(jié)先傳,低字節(jié)后傳的傳遞方式。接口消息塊中,除特殊說明外,所有備用字節(jié)、比特默認(rèn)數(shù)值均為0。
4.1 報(bào)文發(fā)送流程設(shè)計(jì)
CAN總線控制軟件的報(bào)文發(fā)送流程設(shè)計(jì)如下:(1)為了能夠在報(bào)文發(fā)送時(shí)禁止或使能中斷,主單片機(jī)首先在報(bào)文發(fā)送之前初始化CANINTE.TXInE位;(2)主單片機(jī)再將TXBnCTRL.TXREQ位清零,之后將需要發(fā)送的數(shù)據(jù)載入到發(fā)送緩沖器中;(3)報(bào)文開始發(fā)送后,主單片機(jī)將TXBnCTRL.TXREQ位置為1,同時(shí)將TXBnCTRL.TXERR位、TXBnCTRL.MLOA位和TXBnCTRL.ABTF位置為0;(4)報(bào)文發(fā)送完成后,主單片機(jī)將TXBnCTRL.TXREQ位清零,同時(shí)將CANINTF.TXnIF位置為1,并觸發(fā)中斷;(5)若報(bào)文未能成功發(fā)送,則繼續(xù)將TXBnCTRL.TXREQ置為1,使該報(bào)文處于等待發(fā)送狀態(tài)。
詳細(xì)的報(bào)文發(fā)送流程圖如圖2所示。
4.2 報(bào)文接收流程設(shè)計(jì)
CAN總線控制軟件的報(bào)文接收流程設(shè)計(jì)如下:(1)循環(huán)CAN總線上的數(shù)據(jù)進(jìn)行監(jiān)測(cè),當(dāng)發(fā)現(xiàn)起始幀后,將檢測(cè)到起始幀的報(bào)文載入到MAB中;(2)判斷接收到的報(bào)文是否有效以及是否符合濾波器RXB0或RXB1的濾波條件。當(dāng)報(bào)文有效性檢測(cè)失敗,則產(chǎn)生錯(cuò)誤幀,同時(shí)返回到開始狀態(tài);當(dāng)報(bào)文有效性檢測(cè)通過,但不符合濾波器RXB0或RXB1的濾波條件時(shí),也返回到開始狀態(tài);(3)當(dāng)接收緩沖器為空時(shí),將報(bào)文有效性檢測(cè)通過,且符合濾波器RXB0濾波條件的報(bào)文載入到接收緩沖器RXB0中;(4)當(dāng)接收緩沖器為空時(shí),將報(bào)文有效性檢測(cè)通過,且符合濾波器RXB1濾波條件的報(bào)文載入到接收緩沖器RXB1中。
詳細(xì)的報(bào)文發(fā)送流程圖如圖3所示。
5 軟件實(shí)現(xiàn)
Microsoft Visual C++為創(chuàng)建基于Windows平臺(tái)的應(yīng)用程序提供了強(qiáng)大而靈活的開發(fā)環(huán)境,它既可以用作一組獨(dú)立的工具,也可以用作集成開發(fā)系統(tǒng)。因此,在CAN總線控制軟件的編碼實(shí)現(xiàn)中選擇使用Microsoft Visual C++6.0作為開發(fā)環(huán)境。
CAN總線控制軟件主要實(shí)現(xiàn)與MCP2515板卡的SPI接口的實(shí)時(shí)接收,并顯示被測(cè)系統(tǒng)軟件通過CAN總線收發(fā)的數(shù)據(jù),并可模擬外部的CAN接口向被測(cè)系統(tǒng)軟件發(fā)送數(shù)據(jù)。另外,CAN總線控制軟件還應(yīng)有消息內(nèi)容編輯、CAN參數(shù)設(shè)置等功能。模塊消息發(fā)送區(qū)可手動(dòng)選擇所要模擬發(fā)送的消息塊,之后在對(duì)應(yīng)的消息內(nèi)容編輯區(qū)對(duì)所選擇的消息塊進(jìn)行消息內(nèi)容編輯并發(fā)送。模塊消息接收區(qū)可手動(dòng)選擇需要查看的消息塊內(nèi)容。CAN總線數(shù)據(jù)監(jiān)視區(qū)可手動(dòng)篩選需要監(jiān)控的數(shù)據(jù)源地址和目的地址,并查看篩選后的總線數(shù)據(jù)。CAN參數(shù)設(shè)置區(qū)可對(duì)CAN總線的參數(shù)進(jìn)行配置。
6 結(jié) 論
本文基于MCP2515CAN控制器設(shè)計(jì)了CAN總線控制軟件的傳輸層接口、應(yīng)用層接口以及報(bào)文的發(fā)送流程和接收流程,最后依據(jù)上述設(shè)計(jì)使用Visual C++6.0進(jìn)行軟件編碼,實(shí)現(xiàn)CAN總線控制軟件,在對(duì)被測(cè)系統(tǒng)軟件的CAN總線接口的測(cè)試中取得了良好的效果。
參考文獻(xiàn):
[1] 黃錫滋.軟件可靠性、安全性與質(zhì)量保證 [M].北京:電子工業(yè)出版社,2002.
[2] 饒運(yùn)濤,鄒繼軍,鄭勇蕓,等.現(xiàn)場(chǎng)總線CAN原理及應(yīng)用技術(shù) [M].北京:北京航天航空大學(xué)出版社,2003.
[3] 段星輝,華建文,代作曉,等.CAN總線在某探測(cè)儀上的應(yīng)用研究 [J].微計(jì)算機(jī)信息,2009,25(10):119-121.
作者簡(jiǎn)介:孫龍(1987-),男,山東菏澤人,工程師,碩士。研究方向:軟件測(cè)試技術(shù)、信息系統(tǒng)項(xiàng)目管理;劉暉虎(1985-),男,江西宜豐人,工程師,本科。研究方向:軟件自動(dòng)化測(cè)試技術(shù)、測(cè)試工具開發(fā)。