王睿朝,陳思嘉,徐成竹,衛(wèi) 威,方偉家
(北京福田戴姆勒汽車有限公司,北京 101400)
隨著汽車電子電氣技術(shù)的不斷發(fā)展,車載總線上的電子控制單元不斷增加,而各電控單元間的信息交互也更加頻繁,這也導(dǎo)致總線錯(cuò)誤的發(fā)生幾率大大提升。為保證整個(gè)網(wǎng)絡(luò)的穩(wěn)定運(yùn)行,主機(jī)廠會(huì)對(duì)所有電控單元的網(wǎng)絡(luò)行為作出統(tǒng)一的定義。當(dāng)檢測到總線錯(cuò)誤時(shí),所有電控單元都應(yīng)依據(jù)主機(jī)廠既定的策略作后續(xù)處理。
應(yīng)答:所有接收方應(yīng)檢查接收數(shù)據(jù)幀的一致性,并應(yīng)對(duì)一致的幀進(jìn)行應(yīng)答,對(duì)不一致的幀進(jìn)行標(biāo)記。未被應(yīng)答的幀已損壞并應(yīng)被發(fā)送節(jié)點(diǎn)標(biāo)記。圖1為CAN數(shù)據(jù)幀格式。
應(yīng)答場:應(yīng)答場為2位,包括應(yīng)答間隙和應(yīng)答分隔符。在應(yīng)答場中,發(fā)送節(jié)點(diǎn)應(yīng)發(fā)送2個(gè)隱性位。如圖2所示。
應(yīng)答間隙:所有接收到匹配的CRC序列的節(jié)點(diǎn),在應(yīng)答間隙發(fā)送應(yīng)答 (發(fā)送1個(gè)顯性位覆蓋發(fā)送節(jié)點(diǎn)發(fā)送的隱性位)。應(yīng)答間隙電平變化如圖3所示。
圖1 CAN數(shù)據(jù)幀格式
圖2 應(yīng)答場
應(yīng)答分隔符:作為應(yīng)答場的第2個(gè)位,應(yīng)答分隔符應(yīng)該是1個(gè)隱性位。因此,應(yīng)答間隙應(yīng)被2個(gè)隱性位包圍 (CRC分隔符,應(yīng)答分隔符)。
應(yīng)答錯(cuò)誤:無論何時(shí)只要發(fā)送方在應(yīng)答間隙檢測不到顯性位 (發(fā)送方發(fā)送的報(bào)文沒有被其他任何節(jié)點(diǎn)正確接收)都應(yīng)檢測到應(yīng)答錯(cuò)誤。應(yīng)答錯(cuò)誤可被任何節(jié)點(diǎn)檢測出。
圖3 應(yīng)答間隙電平變化
只要檢測到一個(gè)錯(cuò)誤,LLC子層都應(yīng)得知。因此,MAC子層應(yīng)發(fā)起錯(cuò)誤標(biāo)志的傳輸。CAN的層結(jié)構(gòu)如圖4所示。
錯(cuò)誤幀由2個(gè)不同的場組成,第1個(gè)場為來自2個(gè)不同節(jié)點(diǎn)的錯(cuò)誤標(biāo)志的疊加,后面第2個(gè)場為錯(cuò)誤分隔符。
錯(cuò)誤標(biāo)志分為主動(dòng)錯(cuò)誤標(biāo)志和被動(dòng)錯(cuò)誤標(biāo)志。主動(dòng)錯(cuò)誤標(biāo)志由6個(gè)連續(xù)的顯性位組成,被動(dòng)錯(cuò)誤標(biāo)志由6個(gè)連續(xù)的隱性位組成,其中的部分或全部可被其他節(jié)點(diǎn)的顯性位覆蓋。被動(dòng)錯(cuò)誤標(biāo)志又為由發(fā)送方發(fā)起的和由接收方發(fā)起的。
圖4 CAN的層結(jié)構(gòu)
應(yīng)答錯(cuò)誤的錯(cuò)誤標(biāo)志是由發(fā)送方發(fā)起的被動(dòng)錯(cuò)誤標(biāo)志,如圖5所示。
圖5 應(yīng)答錯(cuò)誤的錯(cuò)誤標(biāo)志
應(yīng)答錯(cuò)誤的錯(cuò)誤計(jì)數(shù):當(dāng)發(fā)送方在發(fā)送錯(cuò)誤標(biāo)志時(shí),發(fā)送錯(cuò)誤計(jì)數(shù)器應(yīng)+8。
例外:發(fā)送方處于被動(dòng)錯(cuò)誤狀態(tài),因沒有檢測到顯性應(yīng)答且當(dāng)發(fā)送它的被動(dòng)錯(cuò)誤標(biāo)志時(shí)沒有檢測到顯性位從而產(chǎn)生應(yīng)答錯(cuò)誤。
出現(xiàn)此例外的正常原因:系統(tǒng)啟動(dòng)期間只有一個(gè)節(jié)點(diǎn)在線,此節(jié)點(diǎn)發(fā)送一些報(bào)文,無法得到應(yīng)答,從而檢測到一個(gè)錯(cuò)誤并重復(fù)發(fā)送這些報(bào)文。根據(jù)ISO 11898-1,13.1.4.2,c),1),它將進(jìn)入被動(dòng)錯(cuò)誤狀態(tài),但是不會(huì)總線關(guān)閉。
例外情況下,發(fā)送錯(cuò)誤計(jì)數(shù)器保持不變。節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換如圖6所示。
任何節(jié)點(diǎn)在發(fā)送主動(dòng)錯(cuò)誤標(biāo)志、被動(dòng)錯(cuò)誤標(biāo)志或過載標(biāo)志后應(yīng)能容許多達(dá)7個(gè)連續(xù)顯性位。在主動(dòng)錯(cuò)誤標(biāo)志或過載標(biāo)志情況之后檢測到第14個(gè)連續(xù)顯性位或在被動(dòng)錯(cuò)誤標(biāo)志之后檢測到第8個(gè)連續(xù)的顯性位之后,且在每增加8個(gè)連續(xù)顯性位之后,每個(gè)發(fā)送方的發(fā)送錯(cuò)誤計(jì)數(shù)器+8,每個(gè)接收方的接收錯(cuò)誤計(jì)數(shù)器+8。幀傳輸成功后 (得到應(yīng)答,在幀結(jié)束完成傳輸前沒有檢測到任何錯(cuò)誤),發(fā)送錯(cuò)誤計(jì)數(shù)器-1,除非它已為0。
圖6 節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換圖
產(chǎn)生應(yīng)答錯(cuò)誤的原因如下。
1)正常原因:系統(tǒng)啟動(dòng)期間只有1個(gè)節(jié)點(diǎn)在線,此節(jié)點(diǎn)發(fā)送一些報(bào)文,無法得到應(yīng)答,從而檢測到一個(gè)錯(cuò)誤并重復(fù)發(fā)送這些報(bào)文。根據(jù)ISO 11898-1,13.1.4.2,c),1),它將進(jìn)入被動(dòng)錯(cuò)誤狀態(tài),但是不會(huì)總線關(guān)閉。
2)硬件錯(cuò)誤:發(fā)送方正確發(fā)送置位的ACK Slot,接收方在線,正確接收從SOF至ACK Slot所有信息,但未對(duì)發(fā)送方進(jìn)行置位回復(fù);或發(fā)送方正確發(fā)送置位的ACK Slot,接收方將位置信息誤讀。電控單元通信示意圖如圖7所示。
圖7 電控單元通信示意圖
應(yīng)答錯(cuò)誤的檢測:應(yīng)答錯(cuò)誤會(huì)導(dǎo)致發(fā)送錯(cuò)誤計(jì)數(shù)器值大于127(錯(cuò)誤計(jì)數(shù)功能由CAN芯片內(nèi)部寄存器實(shí)現(xiàn)),從而進(jìn)入并一直保持被動(dòng)錯(cuò)誤狀態(tài),而不會(huì)導(dǎo)致總線關(guān)閉。這點(diǎn)是應(yīng)答錯(cuò)誤區(qū)別于其他錯(cuò)誤的顯著標(biāo)志,其他幾種錯(cuò)誤會(huì)進(jìn)一步導(dǎo)致發(fā)送方進(jìn)入總線關(guān)閉狀態(tài)。目前,CAN芯片無法單獨(dú)檢測應(yīng)答錯(cuò)誤,而是采用排除法,檢測到發(fā)送方持續(xù)保持被動(dòng)錯(cuò)誤狀態(tài)而不進(jìn)入總線關(guān)閉狀態(tài),即認(rèn)為檢測到應(yīng)答錯(cuò)誤。Bosch是通過20ms驗(yàn)證時(shí)間記錄被動(dòng)錯(cuò)誤狀態(tài)診斷故障代碼來認(rèn)為發(fā)送方持續(xù)保持被動(dòng)錯(cuò)誤狀態(tài)的。
應(yīng)答錯(cuò)誤的處理策略 (圖8):CAN相關(guān)診斷未開啟時(shí),當(dāng)發(fā)送節(jié)點(diǎn)檢測到所發(fā)送報(bào)文的應(yīng)答錯(cuò)誤后,會(huì)嘗試重新發(fā)送該報(bào)文直到發(fā)送成功。重復(fù)發(fā)送該報(bào)文過程中,若CAN相關(guān)診斷開啟,則從CAN相關(guān)診斷開啟時(shí)開始計(jì)時(shí)。若該報(bào)文繼續(xù)發(fā)送TTx_TimeOut時(shí)間后,仍處于應(yīng)答錯(cuò)誤狀態(tài),則要求發(fā)送節(jié)點(diǎn)停止發(fā)送報(bào)文,并等待TTx_Recovery超時(shí) (發(fā)送節(jié)點(diǎn)在等待TTx_Recovery期間應(yīng)進(jìn)行CAN芯片的重新初始化),時(shí)間參數(shù)見表1。超時(shí)后發(fā)送節(jié)點(diǎn)再次開始發(fā)送報(bào)文。發(fā)送節(jié)點(diǎn)處于應(yīng)答錯(cuò)誤狀態(tài)期間,需保證以下行為。
圖8 應(yīng)答錯(cuò)誤處理策略示意圖
表1 時(shí)間參數(shù)
1)在TTx_Recovery期間,發(fā)送節(jié)點(diǎn)應(yīng)做好接收?qǐng)?bào)文的準(zhǔn)備。
2)發(fā)送節(jié)點(diǎn)不會(huì)因應(yīng)答錯(cuò)誤而進(jìn)入總線關(guān)閉狀態(tài)。
3)報(bào)文超時(shí)監(jiān)控不受應(yīng)答錯(cuò)誤影響。
4)應(yīng)答錯(cuò)誤的處理行為只在CAN相關(guān)診斷開啟狀態(tài)下激活。
應(yīng)答錯(cuò)誤的處理行為的實(shí)現(xiàn):應(yīng)答錯(cuò)誤的處理行為是通過檢測被動(dòng)錯(cuò)誤狀態(tài)后觸發(fā)中斷實(shí)現(xiàn)的。中斷是通過設(shè)置中斷使能寄存器 (圖9)、中斷標(biāo)志寄存器 (圖10)實(shí)現(xiàn)的。以MC9S12XE-Family Controller Area Network為例。
圖11為電控單元檢測到應(yīng)答錯(cuò)誤后,按照上述策略處理應(yīng)答錯(cuò)誤的測試驗(yàn)證。
圖9 中斷使能寄存器
圖10 中斷標(biāo)志寄存器
圖11 應(yīng)答錯(cuò)誤處理策略的測試驗(yàn)證