CAN總線協(xié)議的優(yōu)點(diǎn)
? 布線減少,成本低
? 接線簡(jiǎn)單,節(jié)省時(shí)間
? 丟失消息的自動(dòng)重傳
? 支持錯(cuò)誤檢測(cè)
? 靈活的數(shù)據(jù)傳輸速率
CAN 定義
CAN代表控制器局域網(wǎng),專為滿足汽車行業(yè)的需求而設(shè)計(jì)。在引入CAN之前,每個(gè)電子設(shè)備都使用多條電線連接到其他設(shè)備以實(shí)現(xiàn)通信。但是當(dāng)汽車系統(tǒng)中的功能增加時(shí),由于布線系統(tǒng)繁瑣,維護(hù)起來(lái)很困難。在CAN總線系統(tǒng)的幫助下,只需將每個(gè)ECU連接到公共串行總線,即可讓ECU相互通信,而無(wú)需太多復(fù)雜性。因此,與汽車系統(tǒng)中使用的其他協(xié)議(即CAN與LIN)相比,CAN由于復(fù)雜性較低而且更加穩(wěn)健。
CAN協(xié)議可以被定義為在一個(gè)通過(guò)串行總線連接的電子設(shè)備網(wǎng)絡(luò)中傳輸和接收信息的一套規(guī)則。CAN網(wǎng)絡(luò)中的每個(gè)電子設(shè)備被稱為一個(gè)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)都必須有硬件和軟件嵌入其中進(jìn)行數(shù)據(jù)交換。一個(gè)CAN總線系統(tǒng)的每個(gè)節(jié)點(diǎn)都有一個(gè)主機(jī)微控制器單元、CAN控制器和CAN收發(fā)器。CAN控制器是一個(gè)可以嵌入在主機(jī)控制器內(nèi)或單獨(dú)添加的芯片,它需要管理數(shù)據(jù)并通過(guò)收發(fā)器在串行總線上發(fā)送數(shù)據(jù),反之亦然。CAN收發(fā)器芯片用于使信號(hào)適應(yīng)CAN總線水平。
CAN是一個(gè)基于消息的協(xié)議,每個(gè)消息都由一個(gè)預(yù)先定義的唯一ID來(lái)識(shí)別。傳輸?shù)臄?shù)據(jù)包被CAN總線網(wǎng)絡(luò)中的所有節(jié)點(diǎn)接收,但根據(jù)ID,CAN節(jié)點(diǎn)決定是否接受它。當(dāng)多個(gè)節(jié)點(diǎn)試圖同時(shí)發(fā)送數(shù)據(jù)時(shí),CAN總線遵循仲裁過(guò)程。
CAN 總線電氣規(guī)格
CAN收發(fā)器處理的CAN信號(hào)有單端信號(hào)和差分信號(hào)(CANH和CANL)。CAN_High和CAN_Low線路在理想狀態(tài)下為2.5V。CAN將邏輯“0”定義為顯性位,將邏輯“1”定義為隱性位。傳輸顯性位時(shí),CAN_High變?yōu)?3.5V,CAN_Low變?yōu)?.5V,即顯性位的差分電壓為2V。當(dāng)發(fā)送隱性位時(shí),CAN_High和 CAN_Low線被驅(qū)動(dòng)到2.5V,表示隱性位的差分電壓為0V。CANH和CANL線的物理端應(yīng)加120歐姆的CAN總線終端電阻,以避免任何信號(hào)反射。
圖1. CAN總線差分信號(hào)
CAN 的幀類型
幀是一種定義的結(jié)構(gòu)或格式,在網(wǎng)絡(luò)中攜帶有意義的數(shù)據(jù)(字節(jié))。CAN有四種幀類型:數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過(guò)載幀。
數(shù)據(jù)幀
數(shù)據(jù)幀包含用于傳輸?shù)墓?jié)點(diǎn)數(shù)據(jù)的幀。數(shù)據(jù)幀由提供信息的附加字段組成,即仲裁字段、控制字段、數(shù)據(jù)字段、CRC字段、2位確認(rèn)字段和幀結(jié)束。
有兩種類型的數(shù)據(jù)幀:標(biāo)準(zhǔn)幀格式、擴(kuò)展幀格式
兩種格式的唯一區(qū)別是標(biāo)準(zhǔn)幀支持11位標(biāo)識(shí)符,擴(kuò)展幀支持29位標(biāo)識(shí)符,由11位標(biāo)識(shí)符和擴(kuò)展18位標(biāo)識(shí)符組成。IDE位在標(biāo)準(zhǔn)幀中是顯性的,在擴(kuò)展幀中是隱性的。
標(biāo)準(zhǔn)幀格式:
標(biāo)準(zhǔn)幀主要用于發(fā)送數(shù)據(jù)。
圖2. 標(biāo)準(zhǔn)幀
術(shù)語(yǔ)
? SOF - 幀的開始,表示幀傳輸?shù)拈_始。
? Identifier - 11位唯一的ID,也代表信息的優(yōu)先級(jí)值越低,優(yōu)先級(jí)越高。
? RTR - 遠(yuǎn)程傳輸請(qǐng)求,它對(duì)數(shù)據(jù)幀是顯性的,對(duì)遠(yuǎn)程幀是隱性的。
? IDE - 單一識(shí)別擴(kuò)展,它對(duì)標(biāo)準(zhǔn)幀是顯性的,對(duì)擴(kuò)展幀是隱性的。
? R0 - 保留位。
? DLC - 數(shù)據(jù)長(zhǎng)度代碼,定義了正在發(fā)送的數(shù)據(jù)的長(zhǎng)度,它的大小為4位。
? 數(shù)據(jù)——要傳輸?shù)臄?shù)據(jù)和長(zhǎng)度由DLC決定。
? CRC——循環(huán)冗余校驗(yàn),它包含前面應(yīng)用程序數(shù)據(jù)的校驗(yàn)和,用于錯(cuò)誤檢測(cè)。
? ACK——確認(rèn),它的長(zhǎng)度為2位,如果接收到準(zhǔn)確的消息,則占主導(dǎo)地位。
? EOF——幀的末端,必須是隱性的。
? IFS——幀間空間,它包含控制器將正確接收的幀移動(dòng)到正確位置所需的時(shí)間。
擴(kuò)展幀:
圖3. 擴(kuò)展幀
它與標(biāo)準(zhǔn)幀相同,但有一些額外的字段。
SRR替代反向請(qǐng)求。SRR位總是作為隱性位傳輸,以確?;緮?shù)據(jù)幀與擴(kuò)展數(shù)據(jù)幀相比具有較高的優(yōu)先權(quán),如果兩個(gè)信息具有相同的11位標(biāo)識(shí)符,它還包含一個(gè)11位標(biāo)識(shí)符以外的18位標(biāo)識(shí)符。
r1- 保留位。
遠(yuǎn)程幀
遠(yuǎn)程幀與數(shù)據(jù)幀相似,但有兩點(diǎn)不同。遠(yuǎn)程幀是由接收方發(fā)送的,用于請(qǐng)求發(fā)送方提供數(shù)據(jù),所以遠(yuǎn)程幀和數(shù)據(jù)幀之間的區(qū)別是遠(yuǎn)程幀不包含任何數(shù)據(jù)字段,因?yàn)樗挥糜跀?shù)據(jù)傳輸。第二個(gè)區(qū)別是遠(yuǎn)程幀的RTR 位為隱性狀態(tài),當(dāng)總線上具有相同標(biāo)識(shí)符的數(shù)據(jù)幀和遠(yuǎn)程幀同時(shí)發(fā)送時(shí),由于數(shù)據(jù)幀RTR位是顯性的,數(shù)據(jù)幀將在仲裁中贏得總線控制權(quán)。
錯(cuò)誤幀
錯(cuò)誤幀是用于接收和發(fā)送消息時(shí)檢測(cè)出錯(cuò)誤時(shí),通知錯(cuò)誤的幀。錯(cuò)誤幀由六個(gè)顯性位組成的錯(cuò)誤標(biāo)志和由八個(gè)隱性位組成的錯(cuò)誤界定符構(gòu)成。
錯(cuò)誤標(biāo)志分為:主動(dòng)錯(cuò)誤標(biāo)志、被動(dòng)錯(cuò)誤標(biāo)志
主動(dòng)錯(cuò)誤標(biāo)志:當(dāng)錯(cuò)誤主動(dòng)節(jié)點(diǎn)檢測(cè)到一個(gè)總線錯(cuò)誤時(shí)輸出的一個(gè)主動(dòng)錯(cuò)誤標(biāo)志,來(lái)中斷當(dāng)前的數(shù)據(jù)發(fā)送。其中主動(dòng)錯(cuò)誤標(biāo)志由6個(gè)連續(xù)的顯性位構(gòu)成。
被動(dòng)錯(cuò)誤標(biāo)志:當(dāng)錯(cuò)誤被動(dòng)節(jié)點(diǎn)檢測(cè)到一個(gè)總線錯(cuò)誤時(shí)輸出的一個(gè)被動(dòng)錯(cuò)誤標(biāo)志,并緊接著發(fā)送錯(cuò)誤定界字段。其中錯(cuò)誤被動(dòng)標(biāo)志由6個(gè)連續(xù)的隱性位構(gòu)成。
錯(cuò)誤計(jì)數(shù)器:如果在總線上檢測(cè)到一個(gè)錯(cuò)誤,那么TEC或REC計(jì)數(shù)就會(huì)增加。
1. 發(fā)送錯(cuò)誤計(jì)數(shù)器(TEC)
2. 接收錯(cuò)誤計(jì)數(shù)器(REC)
? 當(dāng) TEC 和 REC 小于 128 時(shí),發(fā)送活動(dòng)錯(cuò)誤幀
? 當(dāng) TEC 或 REC 大于 127 且小于 255 時(shí),傳輸被動(dòng)幀
? 當(dāng)TEC大于255時(shí),節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài),此時(shí)不能發(fā)送幀
圖4. 錯(cuò)誤轉(zhuǎn)換狀態(tài)圖
過(guò)載幀
過(guò)載幀是用于接收單元通知發(fā)送單元它尚未完成接收準(zhǔn)備的幀。過(guò)載幀中包含兩個(gè)字段,過(guò)載標(biāo)志和過(guò)載界定符。過(guò)載標(biāo)志由6個(gè)顯性位和緊隨其后的其他節(jié)點(diǎn)產(chǎn)生的過(guò)載標(biāo)志構(gòu)成,過(guò)載界定符由8個(gè)隱性位組成,在以下兩種情況下,節(jié)點(diǎn)會(huì)發(fā)送過(guò)載幀:
1. 當(dāng)接收單元需要發(fā)送節(jié)點(diǎn)延緩下一幀傳輸
2. 節(jié)點(diǎn)在幀間間隔檢測(cè)到非法顯性位
仲裁
仲裁是一種解決沖突的機(jī)制,當(dāng)一個(gè)以上的節(jié)點(diǎn)同時(shí)準(zhǔn)備傳輸信息時(shí)。只要總線是空閑的,任何節(jié)點(diǎn)都可以傳輸數(shù)據(jù)。如果多個(gè)節(jié)點(diǎn)同時(shí)準(zhǔn)備傳輸數(shù)據(jù),對(duì)總線的訪問就會(huì)發(fā)生沖突,可以通過(guò)使用標(biāo)識(shí)符的仲裁來(lái)解決。在仲裁過(guò)程中,每個(gè)發(fā)射器都會(huì)將傳輸?shù)谋忍刂蹬c總線上的比特值進(jìn)行比較。如果比特值是相同的,節(jié)點(diǎn)繼續(xù)傳輸比特。如果傳輸?shù)谋忍刂蹬c總線上的比特值不一樣,那么,優(yōu)勢(shì)比特就會(huì)覆蓋劣勢(shì)比特。
CAN報(bào)文的仲裁字段由1位或29位標(biāo)識(shí)符和RTR位組成。具有最低值的標(biāo)識(shí)符具有最高的優(yōu)先權(quán)。如果數(shù)據(jù)幀和遠(yuǎn)程幀都有相同的標(biāo)識(shí)符,并準(zhǔn)備在同一時(shí)間發(fā)送數(shù)據(jù),那么數(shù)據(jù)幀的優(yōu)先級(jí)就高,因?yàn)檫h(yuǎn)程傳輸位(RTR)在數(shù)據(jù)幀中是主導(dǎo)位,在遠(yuǎn)程幀中是隱性位。
消息級(jí)CAN總線錯(cuò)誤控制機(jī)制
與其他協(xié)議相比,即CAN與LIN、CAN與MOD總線相比,CAN協(xié)議是穩(wěn)健的,錯(cuò)誤檢查使CAN協(xié)議達(dá)到穩(wěn)健。通過(guò)這些機(jī)制,如果檢測(cè)到錯(cuò)誤,節(jié)點(diǎn)就會(huì)傳送一個(gè)錯(cuò)誤幀并銷毀傳送的幀。
CRC校驗(yàn)
循環(huán)冗余校驗(yàn)值由發(fā)送節(jié)點(diǎn)計(jì)算并通過(guò)CRC字段發(fā)送,該值被所有節(jié)點(diǎn)接收。然后所有接收節(jié)點(diǎn)計(jì)算CRC值并將該值與發(fā)送值匹配。如果值不同,則生成錯(cuò)誤幀。
ACK時(shí)隙
當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送消息時(shí),在確認(rèn)時(shí)隙中發(fā)送一個(gè)隱性位。如果接收到一條消息,則確認(rèn)槽由顯性位替換,該位將確認(rèn)至少一個(gè)節(jié)點(diǎn)正確接收到該消息。如果該位是隱性的,則沒有節(jié)點(diǎn)正確接收到消息。
形式錯(cuò)誤
當(dāng)一個(gè)固定形式的位場(chǎng)含有1個(gè)或多個(gè)非法位,則檢測(cè)到一個(gè)形式錯(cuò)誤,如幀結(jié)尾固定為隱性位,卻檢測(cè)到了顯性位。
*內(nèi)容來(lái)源自PathPartner Technology,版權(quán)歸原作者所有,如涉及版權(quán)問題請(qǐng)聯(lián)系溝通
如需銷售咨詢,請(qǐng)聯(lián)系:sales@aisinochip.com