CAN總線協議的(de)優點
? 布線減少,成本低
? 接線簡(jian)單,節(jie)省(sheng)時(shi)間
? 丟失(shi)消息的(de)自動重傳
? 支持錯誤檢(jian)測
? 靈活的(de)數據傳(chuan)輸速(su)率
CAN 定義
CAN代表控制(zhi)器局域網,專(zhuan)為滿足汽車(che)行業的需(xu)求而(er)設計。在引入CAN之前,每個電子設備(bei)都使用多條電線(xian)連接(jie)到其他設備(bei)以實(shi)現通信。但是當汽車(che)系統(tong)(tong)中(zhong)的功能增加時,由(you)于布線(xian)系統(tong)(tong)繁瑣,維護起來很困難。在CAN總(zong)線(xian)系統(tong)(tong)的幫助下,只(zhi)需(xu)將每個ECU連接(jie)到公(gong)共串行總(zong)線(xian),即可(ke)讓ECU相互通信,而(er)無需(xu)太多復雜(za)性。因此,與汽車(che)系統(tong)(tong)中(zhong)使用的其他協議(即CAN與LIN)相比,CAN由(you)于復雜(za)性較低而(er)且更(geng)加穩健(jian)。
CAN協議可(ke)以被定義為在(zai)一(yi)(yi)個(ge)(ge)通(tong)過串行(xing)總(zong)(zong)線連接的(de)電(dian)子設備網絡中(zhong)傳輸和(he)接收(shou)信息的(de)一(yi)(yi)套(tao)規則。CAN網絡中(zhong)的(de)每個(ge)(ge)電(dian)子設備被稱為一(yi)(yi)個(ge)(ge)節(jie)點。每個(ge)(ge)節(jie)點都(dou)必須有硬件和(he)軟(ruan)件嵌(qian)(qian)入(ru)其中(zhong)進行(xing)數(shu)據(ju)交換。一(yi)(yi)個(ge)(ge)CAN總(zong)(zong)線系統的(de)每個(ge)(ge)節(jie)點都(dou)有一(yi)(yi)個(ge)(ge)主機微控制器單(dan)元、CAN控制器和(he)CAN收(shou)發器。CAN控制器是一(yi)(yi)個(ge)(ge)可(ke)以嵌(qian)(qian)入(ru)在(zai)主機控制器內或(huo)單(dan)獨添加的(de)芯片,它需要管理數(shu)據(ju)并(bing)通(tong)過收(shou)發器在(zai)串行(xing)總(zong)(zong)線上發送數(shu)據(ju),反之亦然。CAN收(shou)發器芯片用(yong)于使信號適應CAN總(zong)(zong)線水平。
CAN是(shi)一個基于消(xiao)息(xi)的協議,每個消(xiao)息(xi)都由一個預先定義的唯一ID來(lai)識別。傳輸的數(shu)(shu)據包(bao)被CAN總線網絡中的所有(you)節點(dian)(dian)接(jie)收,但根據ID,CAN節點(dian)(dian)決定是(shi)否接(jie)受它。當(dang)多個節點(dian)(dian)試圖同時發送(song)數(shu)(shu)據時,CAN總線遵循仲裁過程。
CAN 總(zong)線(xian)電氣規格(ge)
CAN收(shou)發器處理(li)的(de)CAN信(xin)(xin)號(hao)(hao)有單(dan)端(duan)信(xin)(xin)號(hao)(hao)和(he)(he)差(cha)分信(xin)(xin)號(hao)(hao)(CANH和(he)(he)CANL)。CAN_High和(he)(he)CAN_Low線路(lu)在(zai)理(li)想狀態下(xia)為(wei)(wei)2.5V。CAN將邏輯“0”定義(yi)為(wei)(wei)顯性位(wei)(wei),將邏輯“1”定義(yi)為(wei)(wei)隱性位(wei)(wei)。傳(chuan)輸顯性位(wei)(wei)時(shi),CAN_High變為(wei)(wei) 3.5V,CAN_Low變為(wei)(wei)1.5V,即顯性位(wei)(wei)的(de)差(cha)分電壓(ya)為(wei)(wei)2V。當發送隱性位(wei)(wei)時(shi),CAN_High和(he)(he) CAN_Low線被驅動到2.5V,表示隱性位(wei)(wei)的(de)差(cha)分電壓(ya)為(wei)(wei)0V。CANH和(he)(he)CANL線的(de)物理(li)端(duan)應加120歐姆的(de)CAN總線終端(duan)電阻(zu),以避免(mian)任何(he)信(xin)(xin)號(hao)(hao)反射。
圖1. CAN總線差分信號
CAN 的幀(zhen)類型
幀(zhen)是一種(zhong)(zhong)定義的結構或格式(shi),在網絡中攜帶有意義的數據(字(zi)節)。CAN有四種(zhong)(zhong)幀(zhen)類(lei)型(xing):數據幀(zhen)、遠程幀(zhen)、錯誤幀(zhen)、過載幀(zhen)。
數據幀
數據(ju)幀(zhen)包(bao)含用于傳輸的(de)節(jie)點(dian)數據(ju)的(de)幀(zhen)。數據(ju)幀(zhen)由提供信息的(de)附加字(zi)段(duan)組成,即仲裁字(zi)段(duan)、控制字(zi)段(duan)、數據(ju)字(zi)段(duan)、CRC字(zi)段(duan)、2位確認(ren)字(zi)段(duan)和幀(zhen)結束。
有兩種(zhong)類型的數據幀:標(biao)準幀格式、擴展幀格式
兩種(zhong)格式(shi)的唯一區別是(shi)標(biao)準幀(zhen)支(zhi)持11位(wei)標(biao)識符(fu),擴展幀(zhen)支(zhi)持29位(wei)標(biao)識符(fu),由11位(wei)標(biao)識符(fu)和擴展18位(wei)標(biao)識符(fu)組成。IDE位(wei)在(zai)標(biao)準幀(zhen)中是(shi)顯性(xing)的,在(zai)擴展幀(zhen)中是(shi)隱性(xing)的。
標(biao)準幀格式:
標準(zhun)幀主(zhu)要用于發送數據。
圖2. 標準幀
術(shu)語(yu)
? SOF - 幀的開始(shi),表示幀傳輸的開始(shi)。
? Identifier - 11位唯(wei)一的ID,也代表信息(xi)的優先級值越低,優先級越高(gao)。
? RTR - 遠程(cheng)傳輸請(qing)求,它對(dui)數據幀是顯性的,對(dui)遠程(cheng)幀是隱性的。
? IDE - 單(dan)一識別擴展(zhan),它對標準幀(zhen)是(shi)顯性的,對擴展(zhan)幀(zhen)是(shi)隱性的。
? R0 - 保留位。
? DLC - 數(shu)據長(chang)度(du)代碼,定義了(le)正在發送的數(shu)據的長(chang)度(du),它的大(da)小為4位。
? 數(shu)據——要傳輸(shu)的數(shu)據和長度(du)由(you)DLC決定。
? CRC——循環冗余校(xiao)驗,它(ta)包含前(qian)面應用程序(xu)數據(ju)的校(xiao)驗和,用于錯誤檢測(ce)。
? ACK——確認(ren),它(ta)的長(chang)度為(wei)2位(wei),如果接(jie)收到(dao)準確的消息,則(ze)占主導(dao)地位(wei)。
? EOF——幀的末端,必須(xu)是隱(yin)性的。
? IFS——幀(zhen)(zhen)間空(kong)間,它(ta)包含控制器將正確接收的(de)幀(zhen)(zhen)移動到正確位置所需的(de)時間。
擴(kuo)展幀(zhen):
圖3. 擴展(zhan)幀
它與標準幀相同,但有一(yi)些額(e)外的字段。
SRR替(ti)代反(fan)向(xiang)請求。SRR位總是作為隱性位傳輸,以確保基本數據幀與擴展(zhan)數據幀相比具有較高的(de)優先(xian)權,如果兩個信息具有相同的(de)11位標(biao)識(shi)符(fu),它還(huan)包含一個11位標(biao)識(shi)符(fu)以外的(de)18位標(biao)識(shi)符(fu)。
r1- 保留位。
遠程幀(zhen)
遠(yuan)程(cheng)幀(zhen)(zhen)(zhen)與數(shu)(shu)據(ju)(ju)幀(zhen)(zhen)(zhen)相似,但有兩點不(bu)同。遠(yuan)程(cheng)幀(zhen)(zhen)(zhen)是由接收方發(fa)(fa)送(song)的(de),用(yong)于(yu)請求發(fa)(fa)送(song)方提供數(shu)(shu)據(ju)(ju),所以遠(yuan)程(cheng)幀(zhen)(zhen)(zhen)和數(shu)(shu)據(ju)(ju)幀(zhen)(zhen)(zhen)之間的(de)區別是遠(yuan)程(cheng)幀(zhen)(zhen)(zhen)不(bu)包含任何數(shu)(shu)據(ju)(ju)字(zi)段,因為(wei)(wei)它(ta)不(bu)用(yong)于(yu)數(shu)(shu)據(ju)(ju)傳輸。第二(er)個區別是遠(yuan)程(cheng)幀(zhen)(zhen)(zhen)的(de)RTR 位為(wei)(wei)隱性狀(zhuang)態,當總線(xian)上具有相同標識(shi)符的(de)數(shu)(shu)據(ju)(ju)幀(zhen)(zhen)(zhen)和遠(yuan)程(cheng)幀(zhen)(zhen)(zhen)同時(shi)發(fa)(fa)送(song)時(shi),由于(yu)數(shu)(shu)據(ju)(ju)幀(zhen)(zhen)(zhen)RTR位是顯性的(de),數(shu)(shu)據(ju)(ju)幀(zhen)(zhen)(zhen)將在(zai)仲裁中(zhong)贏得(de)總線(xian)控制(zhi)權。
錯(cuo)誤幀
錯(cuo)(cuo)誤(wu)(wu)幀(zhen)是用(yong)于接收(shou)和發送消息時檢(jian)測出(chu)錯(cuo)(cuo)誤(wu)(wu)時,通知錯(cuo)(cuo)誤(wu)(wu)的幀(zhen)。錯(cuo)(cuo)誤(wu)(wu)幀(zhen)由六個顯性(xing)位組(zu)成(cheng)的錯(cuo)(cuo)誤(wu)(wu)標(biao)志和由八個隱性(xing)位組(zu)成(cheng)的錯(cuo)(cuo)誤(wu)(wu)界(jie)定符構成(cheng)。
錯誤標志(zhi)分為:主(zhu)動錯誤標志(zhi)、被動錯誤標志(zhi)
主(zhu)(zhu)動錯(cuo)(cuo)誤標志:當(dang)錯(cuo)(cuo)誤主(zhu)(zhu)動節點(dian)檢(jian)測到一個(ge)總(zong)線錯(cuo)(cuo)誤時(shi)輸出的(de)一個(ge)主(zhu)(zhu)動錯(cuo)(cuo)誤標志,來(lai)中斷當(dang)前的(de)數據發送。其中主(zhu)(zhu)動錯(cuo)(cuo)誤標志由6個(ge)連續的(de)顯性位構成(cheng)。
被(bei)動錯(cuo)誤(wu)標(biao)志(zhi):當錯(cuo)誤(wu)被(bei)動節點檢測到一個(ge)(ge)總線錯(cuo)誤(wu)時輸出的一個(ge)(ge)被(bei)動錯(cuo)誤(wu)標(biao)志(zhi),并(bing)緊接著發送錯(cuo)誤(wu)定界(jie)字段。其中錯(cuo)誤(wu)被(bei)動標(biao)志(zhi)由(you)6個(ge)(ge)連續的隱(yin)性(xing)位(wei)構成。
錯誤計數器:如果在總線(xian)上檢測到一個錯誤,那么(me)TEC或REC計數就(jiu)會(hui)增加。
1. 發送錯誤計數器(qi)(TEC)
2. 接收錯誤(wu)計數器(qi)(REC)
? 當 TEC 和 REC 小于 128 時,發送活動錯誤(wu)幀
? 當 TEC 或 REC 大(da)于 127 且(qie)小于 255 時,傳(chuan)輸被動幀
? 當TEC大(da)于(yu)255時,節(jie)點進入總線關閉狀態,此時不能發(fa)送幀(zhen)
圖4. 錯誤(wu)轉換狀態圖
過載幀
過載(zai)(zai)幀(zhen)是用于接收單元通知發(fa)送(song)單元它尚未完(wan)成接收準備的(de)幀(zhen)。過載(zai)(zai)幀(zhen)中包含兩個字段,過載(zai)(zai)標(biao)(biao)志和(he)過載(zai)(zai)界定符。過載(zai)(zai)標(biao)(biao)志由(you)6個顯性(xing)位和(he)緊隨其(qi)(qi)后的(de)其(qi)(qi)他節點(dian)產(chan)生的(de)過載(zai)(zai)標(biao)(biao)志構成,過載(zai)(zai)界定符由(you)8個隱(yin)性(xing)位組成,在以下(xia)兩種情況下(xia),節點(dian)會發(fa)送(song)過載(zai)(zai)幀(zhen):
1. 當接收單元需要發送節點延緩下一幀傳(chuan)輸
2. 節點在幀間(jian)間(jian)隔(ge)檢測(ce)到非法顯性(xing)位
仲裁
仲裁是一種解決沖突(tu)的(de)(de)機(ji)制,當一個以上的(de)(de)節(jie)(jie)點同(tong)時準備傳(chuan)(chuan)輸(shu)信息時。只要總線是空閑的(de)(de),任何節(jie)(jie)點都可以傳(chuan)(chuan)輸(shu)數據(ju)。如果(guo)多個節(jie)(jie)點同(tong)時準備傳(chuan)(chuan)輸(shu)數據(ju),對總線的(de)(de)訪問就(jiu)(jiu)會(hui)(hui)發(fa)生沖突(tu),可以通過使用標識符的(de)(de)仲裁來解決。在仲裁過程中,每個發(fa)射(she)器都會(hui)(hui)將傳(chuan)(chuan)輸(shu)的(de)(de)比(bi)(bi)(bi)(bi)特(te)(te)值(zhi)與(yu)總線上的(de)(de)比(bi)(bi)(bi)(bi)特(te)(te)值(zhi)進(jin)行比(bi)(bi)(bi)(bi)較。如果(guo)比(bi)(bi)(bi)(bi)特(te)(te)值(zhi)是相同(tong)的(de)(de),節(jie)(jie)點繼續傳(chuan)(chuan)輸(shu)比(bi)(bi)(bi)(bi)特(te)(te)。如果(guo)傳(chuan)(chuan)輸(shu)的(de)(de)比(bi)(bi)(bi)(bi)特(te)(te)值(zhi)與(yu)總線上的(de)(de)比(bi)(bi)(bi)(bi)特(te)(te)值(zhi)不一樣,那么,優勢比(bi)(bi)(bi)(bi)特(te)(te)就(jiu)(jiu)會(hui)(hui)覆蓋劣勢比(bi)(bi)(bi)(bi)特(te)(te)。
CAN報文的仲裁字段由1位(wei)(wei)或29位(wei)(wei)標(biao)識(shi)符和RTR位(wei)(wei)組成。具(ju)有(you)最(zui)低值的標(biao)識(shi)符具(ju)有(you)最(zui)高的優先權(quan)。如果數據幀和遠程幀都有(you)相同的標(biao)識(shi)符,并準備(bei)在(zai)(zai)同一(yi)時間發送數據,那(nei)么數據幀的優先級就高,因為遠程傳輸位(wei)(wei)(RTR)在(zai)(zai)數據幀中是(shi)主導位(wei)(wei),在(zai)(zai)遠程幀中是(shi)隱(yin)性(xing)位(wei)(wei)。
消息(xi)級CAN總線錯(cuo)誤控制機制
與(yu)其他協議相比,即(ji)CAN與(yu)LIN、CAN與(yu)MOD總線相比,CAN協議是(shi)穩健的(de),錯(cuo)誤(wu)檢查使CAN協議達到穩健。通過這些機制,如果檢測到錯(cuo)誤(wu),節點就會傳送一(yi)個錯(cuo)誤(wu)幀(zhen)并銷毀傳送的(de)幀(zhen)。
CRC校驗
循環冗余校驗值由發(fa)送(song)節(jie)點(dian)計算并通過CRC字段發(fa)送(song),該值被所(suo)有節(jie)點(dian)接(jie)收(shou)。然后所(suo)有接(jie)收(shou)節(jie)點(dian)計算CRC值并將(jiang)該值與發(fa)送(song)值匹(pi)配。如果值不同,則生(sheng)成錯誤幀。
ACK時(shi)隙
當發(fa)送節(jie)點(dian)(dian)發(fa)送消(xiao)(xiao)息(xi)時,在確(que)認時隙(xi)中發(fa)送一(yi)(yi)(yi)個隱性位(wei)。如果(guo)接(jie)收到(dao)(dao)一(yi)(yi)(yi)條消(xiao)(xiao)息(xi),則(ze)(ze)確(que)認槽(cao)由顯性位(wei)替換,該(gai)位(wei)將確(que)認至少一(yi)(yi)(yi)個節(jie)點(dian)(dian)正(zheng)(zheng)確(que)接(jie)收到(dao)(dao)該(gai)消(xiao)(xiao)息(xi)。如果(guo)該(gai)位(wei)是隱性的(de),則(ze)(ze)沒有節(jie)點(dian)(dian)正(zheng)(zheng)確(que)接(jie)收到(dao)(dao)消(xiao)(xiao)息(xi)。
形式錯(cuo)誤
當一個(ge)固(gu)定(ding)形式(shi)的位(wei)場含有1個(ge)或(huo)多個(ge)非法位(wei),則檢測(ce)到一個(ge)形式(shi)錯誤,如幀結尾固(gu)定(ding)為隱性位(wei),卻(que)檢測(ce)到了(le)顯性位(wei)。
*內容來源自PathPartner Technology,版(ban)權(quan)歸原作(zuo)者所有,如涉(she)及(ji)版(ban)權(quan)問(wen)題(ti)請聯(lian)系溝(gou)通
如需銷售咨詢,請聯(lian)系: