最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

CAN基礎(chǔ)知識

出處:維庫電子市場網(wǎng) 發(fā)布于:2023-03-08 11:37:01

   簡介

   CAN總定義:

  CAN(Control Area Network)屬于現(xiàn)場總線的范疇,是一種高性能、高可靠性、易于開發(fā)和低成本的串行總線。

    CAN是由德國Bosch公司在1986年為汽車監(jiān)測和控制而設計的。由于其高性能、高可靠性、實時性等優(yōu)點,隨后也廣泛用于工業(yè)自動化、多種控制設備、交通工具、醫(yī)療儀器以及建筑、環(huán)境控制等多種領(lǐng)域,其在每個領(lǐng)域的廣泛使用促進了標準化的進程。

    1991年9月PHILIPS SEMICONDUCTORS制訂并發(fā)布了CAN技術(shù)規(guī)范V2.0,該技術(shù)規(guī)范包括A和B兩部分。2.0A曾在CAN技術(shù)規(guī)范1.2中定義的CAN報文格式,提供11位地址;而2.0B給出了標準和擴展的兩種報文格式,提供29位地址。此后ISO在1993年11月也正式發(fā)布了CAN的國際標準ISO11898。其中ISO11898-1定義了CAN數(shù)據(jù)鏈路層;ISO11898-2定義了非容錯CAN物理層;ISO11898-3定義了11898-3的容錯物理層。CAN總線協(xié)議只定義了物理層和數(shù)據(jù)鏈路層,要將CAN總線應用于實際的工程項目和產(chǎn)品開發(fā)中必須制定上層應用協(xié)議。目前汽車上應用的協(xié)議有:ISO15675(傳輸層協(xié)議)、ISO14229(應用層協(xié)議)等。

   說明: 1:CAN收發(fā)器(示意圖中的單元)根據(jù)兩總線CAN_H和CAN_L的電位差來判斷總線電平;

            2:實際中CAN_H與CAN_L由雙絞線組成;

            3:數(shù)據(jù)傳遞終端的電阻器,是為了避免數(shù)據(jù)傳輸反射回來,使數(shù)據(jù)遭到破壞;

            4:電阻阻值為120Ω;

            5:CAN通信實際上為單元之間的數(shù)據(jù)傳輸

   CAN總線的特點

   1、 多主控制方式。在總線空閑時,所有單元都可往總線上發(fā)送消息(多主控制)。訪問總線的單元可獲得發(fā)送權(quán)(采用CSMA/CA方式)。當多個單元同時發(fā)送時,CANID小的節(jié)點獲得發(fā)送權(quán)。

   2、 非破壞性總線仲裁技術(shù)。當總線發(fā)生沖突時,高優(yōu)先級報文可以不受影響的進行傳輸,保證高優(yōu)先級的實時性要求;而低優(yōu)先級的報文退出傳輸。

   3、 高可靠性。每幀都有位填充,CRC校驗等多種錯誤檢測,保證了極低的錯誤率;發(fā)送期間丟失仲裁或者由于錯誤而破壞了的數(shù)據(jù)幀可自動重發(fā)(這一點由CAN控制器自己重發(fā),無需人為重新裝載發(fā)送數(shù)據(jù))。

   4、 自動關(guān)閉總線。CAN控制器可以檢測和判斷總線上的錯誤類型,是短暫的數(shù)據(jù)錯誤(如外部噪聲),還是持續(xù)數(shù)據(jù)錯誤(如單元內(nèi)部故障、驅(qū)動器故障、短路故障等)。當錯誤為持續(xù)性故障時,CAN控制器可自動關(guān)閉,脫離總線,以免影響總線上的其他節(jié)點正常通信。

  CAN總線拓撲圖

   CAN控制器根據(jù)兩根線上的電位差來判斷總線電平??偩€電平分為顯性和隱性電平,二者必居其一。發(fā)送方通過使總線電平變化,將消息發(fā)送給接收方。下圖1是一個CAN總線連接示意圖。

    下圖1由兩個CAN網(wǎng)絡組成,其中一個網(wǎng)絡通信速率為500K,另外一個為125K。每個CAN網(wǎng)絡由CANH和CANL兩根線組成,各個節(jié)點(ABS、SAS、ETM、ECM)分別連接在CANH和CAHL上。在每個CAN網(wǎng)絡的頭尾分別連接了兩個終端電阻,終端電阻的大小為120歐姆。

    下圖1左邊陰影部分是某個節(jié)點的內(nèi)部電路模塊,包含CPU、CAN控制器(CAN Controller,一般單片機都集成了CAN控制器模塊)以及CAN收發(fā)器(CAN transceiver)。其中CPU負責將需要發(fā)送的數(shù)據(jù)傳遞給CAN控制器,以及接收從CAN控制器中解析的數(shù)據(jù);CAN控制器將Rx腳的二進制的0/1轉(zhuǎn)換為具體的報文,然后將報文傳遞給CPU,以及將CPU需要發(fā)送的報文轉(zhuǎn)換為二進制0/1,然后通過Tx腳傳遞給CAN收發(fā)器。CAN控制器的主要功能是電平轉(zhuǎn)換,將CANH和CANL上的電平轉(zhuǎn)換為Rx腳上的0/1,將Tx腳上的0/1在CANH和CANL進行轉(zhuǎn)換。

CAN總線協(xié)議詳解


信號電平

高速CAN,定義 當CANH 和 CANL 電壓相同(CANH = CANL = 2.5V)時為邏輯“1”,CANH和CANL 電壓相差 2V(CANH = 3.5V, CANL = 1.5V) 時為邏輯“0”。高速CAN收發(fā)器在共模電壓范圍內(nèi)(-12V ~ 12V),將CANH和CANL電壓相差大于 0.9V 解釋為顯性狀態(tài)(Dominant),而將CANH和CANL電壓相差小于 0.5V 解釋為為隱性狀態(tài)(Recessive)。

CAN總線采用不歸零碼位填充技術(shù),也就是說CAN總線上的信號有兩種不同的信號狀態(tài),分別是顯性的(Dominant)邏輯0和隱形的(recessive)邏輯1,信號每傳輸完后不需要返回到邏輯0(顯性)的電平。


CAN總線協(xié)議詳解

圖2 a

發(fā)送過程: CAN控制器將CPU傳來的報文轉(zhuǎn)換為邏輯電平(即邏輯0-顯性電平或者邏輯1-隱性電平)通過Tx腳傳遞給CAN收發(fā)器。CAN收發(fā)器接收邏輯電平之后,再將其轉(zhuǎn)換為差分電平輸出到CAN總線上。

CAN總線協(xié)議詳解

圖2 b

接收過程: CAN收發(fā)器將CAN_H 和 CAN_L 線上傳來的差分電平轉(zhuǎn)換為邏輯電平輸出到CAN控制器的Rx腳,CAN控制器再把該邏輯電平轉(zhuǎn)化為相應報文發(fā)送到CPU上。

CAN總線協(xié)議詳解

圖2 c


幀類型

CAN總線在報文傳輸中,可傳輸以下4種不同類型的幀報文:

數(shù)據(jù)幀:數(shù)據(jù)幀裝載的是發(fā)送數(shù)據(jù),它將數(shù)據(jù)從發(fā)送節(jié)點傳輸?shù)浇邮展?jié)點;

遠程幀:遠程幀請求具有相同標識符(CANID)的數(shù)據(jù)幀的發(fā)送,實際很少使用;

錯誤幀:任何節(jié)點檢測到總線錯誤時都可以發(fā)送錯誤幀。由于總線錯誤幀沒有CANID,所以當檢測到錯誤幀時,只知道有錯誤,但無法定位該錯誤幀是哪個模塊發(fā)送的;

過載幀:過載幀用于在先行的和后續(xù)的數(shù)據(jù)幀之間提供附加的延時。

幀格式

在CAN2.0B規(guī)范中,數(shù)據(jù)幀和遠程幀有兩種幀格式,其區(qū)別主要在于標識符(即CANID)的長度:具有11位標識符的稱為標準幀,而具有29位的幀稱為擴展幀,如下圖3所示。數(shù)據(jù)幀和遠程幀都可以使用標準幀或遠程幀格式。幀與幀之間是通過幀間隔進行分開。


數(shù)據(jù)幀由7部分組成:幀起始、仲裁段、控制段、數(shù)據(jù)段、CRC段、ACK段、幀結(jié)束。

CAN總線協(xié)議詳解


圖中D表示顯性,R表示隱性,D/R表示都有可能。ACK位槽表示發(fā)送端R,接收端D。


CAN總線的應答位(ACK)用來表示節(jié)點已經(jīng)收到有效的幀。任何節(jié)點如果準確無誤地接收到幀,則要向總線上發(fā)送顯性位,該顯性位將掩蓋發(fā)送節(jié)點輸出的隱性位,使總線上表現(xiàn)為顯性。如果發(fā)送節(jié)點檢測應答位為隱性,那么說明沒有節(jié)點收到有效幀。接收節(jié)點可能在應答位輸出隱性表示它沒有收到有效幀,但另外有收到有效幀的節(jié)點也可能輸出顯性表示它收到有效幀,這樣總線上總體上表現(xiàn)為顯性,發(fā)送節(jié)點也無從得知是否總線上所有節(jié)點都收到有效的幀。

   注意:

  1)并不是只有和發(fā)送ID匹配的節(jié)點才會返回ACK,其實總線上的任意一個節(jié)點都可以接收到master節(jié)點發(fā)送的數(shù)據(jù)并返回ACK,這是在底層完成的,還沒有到達ID號過濾這層操作。

   2)協(xié)議有如下規(guī)定,所以CRC錯誤的場景下不會反饋顯性ACK
————————————————
版權(quán)聲明:本文為CSDN博主「DASA13」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012723003/article/details/126592095

幀起始(SOF):幀起始(SOF)標志著數(shù)據(jù)幀和遠程幀的起始,僅由一個“顯性”位組成。

    仲裁域由標識符和RTR位組成,標準幀格式與擴展幀格式的仲裁域格式不同。標準格式里,仲裁域由11位標識符和RTR位組成。標識符位有ID28~IDl8。擴展幀格式里,仲裁域包括29位標識符、SRR位、IDE(Identifier Extension,標志符擴展)位、RTR位。其標識符有ID28~IDO。

RTR它是區(qū)別數(shù)據(jù)幀和遠程幀的標志。全稱為“遠程發(fā)送請求(Remote TransmissionRequest)”。RTR位在數(shù)據(jù)幀里必須為“顯性”,而在遠程幀里必須為“隱性”。

    為了區(qū)別標準幀格式和擴展幀格式,CANl.0~1.2版本協(xié)議的保留位r1現(xiàn)表示為IDE位。IDE位為顯性,表示數(shù)據(jù)幀為標準格式;IDE位為隱性,表示數(shù)據(jù)幀為擴展幀格式。在擴展幀中,替代遠程請求(Substitute Remote Request,SRR)位為隱性。仲裁域傳輸順序為從位到位,其中7位不能全為零。

標準幀IDE、R0,擴展幀R1、R0,必須以顯性電平發(fā)送。

其實CAN標準幀和擴展幀只是在ID的長度上不一樣,以能擴展更多的CAN節(jié)點,更好地支持上層協(xié)議而已。


長度為1位,幀起始(SOF)表示數(shù)據(jù)幀的起始,由一個單獨的顯性位組成。CAN節(jié)點發(fā)送數(shù)據(jù)的原則是先監(jiān)聽后發(fā)送,即如果CAN節(jié)點需要發(fā)送數(shù)據(jù),先監(jiān)聽總線是否空閑,如果總線空閑,則往總線發(fā)送幀起始(SOF),獲得發(fā)送權(quán),否則一直等待直到總線空閑才發(fā)送幀起始(SOF)。


標準幀和擴展幀的仲裁段不同,長度分別是12bit和32bit。如上圖3所示,在標準幀格式中,仲裁段由11位標識符(CANID)和遠程發(fā)送請求位(RTR)組成。在擴展幀中,仲裁段由29位標識符(CANID)、代替遠程請求位(SRR)、擴展位(IDE)、遠程發(fā)送請求位(RTR)組成。擴展幀標識符由11位基本ID和18位擴展ID組成。在標準幀中,遠程發(fā)送請求位(RTR)和IDE固定位0。而擴展幀中,代替遠程請求位(SRR)和IDE固定為1, 遠程發(fā)送請求位(RTR)固定位0。

標識符(CANID):用于區(qū)分發(fā)送數(shù)據(jù)內(nèi)容,比如我們定義ID 234發(fā)送某傳感器采集到的溫度值,ID 235發(fā)送某傳感器采集到的電流值。對于發(fā)送節(jié)點來講,當它需要發(fā)送溫度數(shù)據(jù)值,只需要將溫度值裝入ID為234的報文,需要發(fā)送電流數(shù)據(jù)時,只需要將采集到的電流數(shù)據(jù)裝入ID為235的報文。對報文接收節(jié)點來講,一旦收到ID為234時,就知道里面裝載的是溫度值,一收到ID為235時,就知道里面裝載的是電流值。

代替遠程請求位(SRR):SRR是一個隱性位。在擴展幀中11位標識符的下一位是SRR位,而在標準幀中11位標識符的下一位是RTR位,因此SRR稱作代替遠程請求位。當標準幀和擴展幀沖突時,并且擴展幀的基本標識符與標準幀的標識符相同時,標準幀優(yōu)先級高于擴展幀。

標識符擴展位(IDE):表示該報文為標準格式或擴展格式。為顯性時,表示為標準幀,為隱性時,表示為擴展幀。

注:如前所述,CAN模塊采用先監(jiān)聽后發(fā)送的原則,即如果CAN模塊需要發(fā)送數(shù)據(jù)時,先監(jiān)聽總線,如果發(fā)現(xiàn)總線空閑,則開始發(fā)送報文。如果網(wǎng)絡上兩個CAN模塊剛好同時需要發(fā)送報文,他們同時檢測到總線空閑。且同時發(fā)送幀起始(SOF)。那么CANID小的模塊發(fā)送優(yōu)先級高,搶占發(fā)送權(quán)。


控制段表示數(shù)據(jù)段的數(shù)據(jù)段的長度,由保留位和數(shù)據(jù)長度碼共6bit組成,如下圖3所示。發(fā)送數(shù)據(jù)段的長度是可變的,具體長度由控制段決定。長度位0-8字節(jié)。DLC編碼和數(shù)據(jù)段長度對應關(guān)系如下表所示。

CAN總線協(xié)議詳解


保留位:在標準格式由R1(顯性)和R0(隱形)組成。


包括CRC序列(15bit)和CRC界定符(1位,固定為隱性),圖下圖3所示。

CRC序列:該序列是對幀起始、幀仲裁段、控制段、數(shù)據(jù)段的進行CRC計算。

CRC界定符:CRC界定符是一個位隱性位。


ACK段包含2bit,包括應答位和應答界定符。

在ACK段,發(fā)送節(jié)點發(fā)送兩個隱性位。當接收節(jié)點正確接收到有效報文后,接收模塊就會在ACK段的位發(fā)送顯性位來告知發(fā)送模塊數(shù)據(jù)被正常接收了。應答界定符固定為隱性。

幀結(jié)束(EOF):

幀結(jié)束由7個隱性位組成,每個數(shù)據(jù)幀和遠程幀都必須包含完整的幀結(jié)束分。



因此一幀報文長度為:1(SOF)+11(ID)+1(RTR)+6(控制段)+64(數(shù)據(jù)段)+15(CRC)+1(CRC界定符)+2(ACK)+7(EOF)+3(幀間隔)=111位。在不考慮位填充的情況下,一幀8個字節(jié)的標準幀,需要占用111位。

當考慮位填充時,通過示波器測量數(shù)據(jù)和ID全位0和全位1的數(shù)據(jù)幀占用總線時間。

當ID和Data全為1時,波特率位500K,報文占用總線時間為254us。

當ID和Data全為0時,波特率位500K,報文占用總線時間為252us。

通過以上測試,可以看出當我們需要以快速度在CAN總線上傳輸報文時,快速度大概是250us每幀報文,也就說快1s能夠傳輸不到4000條報文。


包含幀起始、仲裁段、控制段、CRC段、ACK段、幀結(jié)束。與數(shù)據(jù)幀相比,RTR位為1,且缺少數(shù)據(jù)段。

CAN總線協(xié)議詳解


錯誤幀由兩部分組成:錯誤標志,錯誤界定符。錯誤標志長度為6個位,由于總線網(wǎng)絡中有多個節(jié)點,每個檢測到錯誤的節(jié)點都會發(fā)送錯誤幀,考慮到錯誤疊加,錯誤標志長度位6-12位。根據(jù)錯誤節(jié)點所處的狀態(tài)不同,錯誤標志也是不一樣的。當節(jié)點處于主動錯誤時,發(fā)送的錯誤標志為顯性,當節(jié)點處于被動錯誤時,發(fā)送的錯誤標識為隱性。錯誤界定符由8個隱性位組成。

注:當某個節(jié)點因為本身原因,持續(xù)檢測到錯誤,為了防止該節(jié)點一直發(fā)送錯誤幀而對其他正常工作的節(jié)點正常工作產(chǎn)生影響,所以該節(jié)點進入被動錯誤后,節(jié)點發(fā)送的錯誤幀為隱性,這樣就不會影響其他節(jié)點正常工作。

CAN總線協(xié)議詳解


過載幀由兩部分組成:過載標志和過載界定符。

以下3中情況,都會引發(fā)過載幀的發(fā)送。

1、 CAN控制器要求延遲下一個數(shù)據(jù)幀或遠程幀的發(fā)送。

2、 在幀間隔段的第1和第2位檢測到顯性(數(shù)據(jù)幀或者遠程幀的發(fā)送需要等到3位長度的幀間隔發(fā)送完后才可以嘗試發(fā)送);

3、 如果一個CAN節(jié)點在出錯界定符或者過載界定符的第8位(1位)采樣到1個顯性位,節(jié)點就會發(fā)送一個過載幀(而非錯誤幀),此時錯誤計數(shù)器不會增加(數(shù)據(jù)幀或者遠程幀的發(fā)送需要等錯誤界定符或者過載界定符發(fā)送完畢后,再等3個位長都的幀間隔才能發(fā)送數(shù)據(jù))。

注:由上述1-3可以看出,為了阻止后續(xù)數(shù)據(jù)幀、遠程幀的發(fā)送可以插入過載幀。

過載標志由6個顯性位組成。過載標志和主動錯誤標志一樣。過載標志的形式破壞了幀間隔,因此,所有其他節(jié)點檢測到上述過載條件將發(fā)出過載標志。如果在幀間隔段的第3位檢測到一個顯性位,則該位將解釋為幀起始。

過載界定符由8位隱性位組成。過載界定符的形式和錯誤界定符的形式一樣。在過載標志位被發(fā)送后,節(jié)點一直檢測總線,直到檢測到一個從顯性到隱性位的跳變。此時,總線上的每個節(jié)點都完成了過載標志的發(fā)送,并開始同時發(fā)送剩余的隱性位。

CAN總線協(xié)議詳解


數(shù)據(jù)幀和遠程幀通過幀間隔與總線上的其他幀(數(shù)據(jù)幀、遠程幀、錯誤幀和過載幀)分隔開。過載幀和錯誤幀與他們之前的幀之間沒有幀間隔,多個超載幀之間也沒有幀間隔。

幀間隔包含間隔和總線空閑。對于處于被動錯誤狀態(tài)的節(jié)點來說,其間隔幀除了包含間歇、總線空閑外,還包含延時發(fā)送。間歇包含3個隱性位。間歇期間,所有節(jié)點均不允許發(fā)送數(shù)據(jù)幀和遠程幀,其的作用是標示一個過載條件(第三位除外)。

總線空間的時長可以是任意長度。在此期間,總線被認為是空閑的,任何需要發(fā)送報文的節(jié)點在此期間都可以發(fā)送報文。一條因為其他報文正在發(fā)送而被掛起的報文,將在其延時結(jié)束后的第1位(如果此時總線還是空閑的情況下)開始發(fā)送,此時檢測到總線的一個顯性位將認為一個幀起始

延時傳送是指節(jié)點發(fā)送一個報文后,在開始發(fā)送下一報文或者認可總線處于空閑前,在間隔后發(fā)出8個隱性位。如果在此期間由其他節(jié)點開始發(fā)送報文。延時傳送降低了被動錯誤節(jié)點向總線發(fā)送報文的優(yōu)先級,這樣做是為了降低被動錯誤狀態(tài)節(jié)點因自生故障干擾總線的可能性。

CAN總線協(xié)議詳解


在總線空閑時,開始發(fā)送的節(jié)點獲得發(fā)送權(quán)。

當多個節(jié)點同時開始發(fā)送時,各發(fā)送節(jié)點從仲裁段的位開始進行仲裁。連續(xù)輸出顯性電平多的單元可繼續(xù)發(fā)送。仲裁過程如下圖所示,節(jié)點1仲裁失敗。

CAN總線協(xié)議詳解


由于CAN總線傳輸時,沒有類似其他串行通信的CLK線,所以如果連續(xù)傳輸多個相同位時會有時鐘誤差的累加。為了解決此問題,引入位填充的概念。當同樣的電平持續(xù)5位時添加一個位的反型數(shù)據(jù),當電平發(fā)生跳變時,進行再同步,以解決時鐘誤差累加問題。位填充的構(gòu)成如下圖所示。位填充:在連續(xù)5個相同的位之后,插入一個額外的碼流的相反位。

CAN總線協(xié)議詳解


CAN節(jié)點在發(fā)送位的同時也會對總線進行監(jiān)測,如果所發(fā)送的位值與所檢測到的位值不相符,則認為檢測到一個位錯誤。位錯誤是由總線上發(fā)出數(shù)據(jù)幀、遠程幀、錯誤幀、過載幀的節(jié)點和發(fā)出ACK的節(jié)點檢測到的。但以下情況除外:在仲裁段發(fā)出隱性電平,但是實際檢測到顯性電平,將被認為仲裁失敗而非位錯誤;在仲裁段作為位填充發(fā)出隱性電平,但實際檢測到顯性電平,將被認為填充錯誤,而非位錯誤。發(fā)送節(jié)點在發(fā)送ACK段發(fā)送隱性電平,但檢測到顯性電平是,將判定位其他接收單元發(fā)送的ACK應答,而非位錯誤。發(fā)送被動錯誤(6個隱性位)但檢測出顯性電平,間不被認為位錯誤。

檢測節(jié)點:發(fā)送節(jié)點和接收節(jié)點


如果在報文發(fā)送期間,檢測出6個連續(xù)顯性或者隱性位,則將認為是一個填充錯誤。

檢測節(jié)點:發(fā)送節(jié)點和接收節(jié)點


如果接收節(jié)點在接收數(shù)據(jù)過程中計算的CRC值與發(fā)節(jié)點發(fā)送的CRC不一致,則接收節(jié)點會發(fā)送一個錯誤幀。

檢測節(jié)點:接收節(jié)點


當一個固定形式的位檢測出1個或多個非法位,則被認為是格式錯誤。具體包括數(shù)據(jù)幀和遠程幀的CRC界定符、ACK界定符、EOF界定符以及錯誤界定符、超載界定符。

檢測節(jié)點:接收節(jié)點


只要在應答間隙檢測到顯性,則發(fā)送節(jié)點認為這是一個ACK錯誤。

檢測節(jié)點:發(fā)送節(jié)點


當任意節(jié)點檢測到錯誤時,將會輸出錯誤幀。處于主動錯誤的節(jié)點輸出主動錯誤,處于被動錯誤的節(jié)點輸出被動錯誤。

當節(jié)點檢測到位錯誤、填充錯誤、格式錯誤、ACK錯誤,從檢測出錯誤的下1位開始發(fā)送錯誤標志。

當節(jié)點檢測到CRC錯誤時,在ACK界定符后的下1位發(fā)送錯誤標志。

注意:對于數(shù)據(jù)幀和遠程幀來講,需要在各種幀(數(shù)據(jù)幀、遠程幀、錯誤幀、過載幀)發(fā)送結(jié)束后的再插入一個間隔幀,才可以數(shù)據(jù)幀。所以我們可以大致計算出當一幀數(shù)據(jù)發(fā)送失敗后,大概多長時間CAN控制器才會才重發(fā)這幀報文(即錯誤幀長度再加上一個幀間隔,根據(jù)發(fā)送節(jié)點所處的是主動錯誤還是被動錯誤狀態(tài),幀間隔長度會不一樣,所以計算時需要注意)。


具體如下表。

CAN總線協(xié)議詳解


注:第3點當發(fā)送節(jié)點發(fā)送一個錯誤標志時,發(fā)送錯誤計數(shù)器值加8。這里有兩個例外情況:一是當發(fā)送節(jié)點處于被動錯誤時,并檢測到一個應答錯誤或者發(fā)送被動錯誤標志期間沒有檢測到顯性位(這種情況是因為整個網(wǎng)絡中只有發(fā)送節(jié)點一個節(jié)點存在,所以不能因為只有發(fā)送節(jié)點存在而一直將發(fā)送錯誤計數(shù)器往上加,直至發(fā)送節(jié)點進入bus off狀態(tài))二是發(fā)送節(jié)點因為仲裁期間發(fā)生填充錯誤而發(fā)送錯誤標志。以上兩種情況,發(fā)送錯誤計數(shù)器值不變。


當節(jié)點的發(fā)送錯誤計數(shù)器值在0-127之間且接收錯誤計算器值在0-127之間時,節(jié)點處于主動錯誤狀態(tài);

當節(jié)點的發(fā)送錯誤計數(shù)器值在128-255之接或者接收錯誤計數(shù)器值在128-255之間,節(jié)點處于被動錯誤。

當發(fā)送錯誤計數(shù)器值大于255時候,節(jié)點進入總線關(guān)閉(bus off),接收錯誤用于不會大于255,即接收錯誤不會使節(jié)點進入bus off。

注:只有發(fā)送錯誤才能讓節(jié)點進入總線關(guān)閉。另外需要注意,當總線關(guān)閉可以設置CAN控制器時自動恢復(即檢測到128次11個連續(xù)隱性位自動恢復到主動錯誤狀態(tài))還是不自動恢復。在汽車行業(yè),一般都是不讓CAN控制器自動恢復,而是人為控制進入快慢恢復過程。

CAN總線協(xié)議詳解


標稱位時間,是指理想情況下發(fā)送1位所需要的時間,例如對于速率為500k的CAN總線,標稱為時間=1/500k=2us

一個標稱位時間可以劃分為4個不重疊的段,分別為同步段(SS)、傳播時間段(PTS)、相位緩沖段1(PBS1)、相位緩沖段2(PBS2)。

同步段(SS):多個連接在總線上的節(jié)點通過此段實現(xiàn)位時序調(diào)整,同步每個位的發(fā)送和接收工作。由隱性到顯性或者顯性到隱性電平變換發(fā)生在這個段中。

傳播時間段(PTS):用于吸收網(wǎng)絡上的物理延遲的段。所謂網(wǎng)絡上的物理延時指發(fā)送節(jié)點的輸出延遲、總線上信號的傳播延遲、接收單元的輸入延遲。這個段的時間為以上各延時時間的和的兩倍。

相位緩沖段1(PBS1)和相位緩沖段2(PBS2):當信號邊沿不能包含于SS段中時,可在此段進行補償。由于各發(fā)送節(jié)點、接收節(jié)點以各自獨立的內(nèi)部時鐘工作,細微的時鐘誤差會累計起來,PBS段可用于吸收此誤差。通過對相位緩沖段加減SJW。

如下圖所示,假設1個位由10個Tq組成,可以通過改變PTS和PBS1以及PBS2段的大小來實現(xiàn)不同的采樣點。一般情況下傳輸速率越高采樣點越低。對于500K傳輸速率來講,采樣點一般選擇在75%-81.25%之間。采樣點分為單點采樣和多點采樣,一般情況下,單點采樣就可以滿足要求。

注:一般直接選擇單片機的外部晶振作為CAN總線的時鐘源,而非PLL倍頻再分頻的時鐘作為時鐘源。

CAN總線協(xié)議詳解


采樣點:所謂采樣點是讀取總線電平,并將讀取到的電平作為位值的點。位置在PBS1結(jié)束處。


接收單元在空閑狀態(tài)檢測出幀起始時進行的同步調(diào)整。在檢測出邊沿時不考慮SJW的值而認為是SS段。硬同步如下圖所示。

CAN總線協(xié)議詳解


在接收過程中檢測出總線上的電平變化時進行的同步調(diào)整。每當檢測出邊沿時,根據(jù)邊沿出現(xiàn)的位置加長PBS1段或者縮短PBS2段,以調(diào)整同步。調(diào)整的幅度大小為SJW。

如下圖所示,當邊沿出現(xiàn)在SS段后時,說明接收節(jié)點的SS段早于發(fā)送節(jié)點的SS段,接收節(jié)點為了在盡可能靠近發(fā)送節(jié)點的采樣點處進行采樣,在PBS1插入一個SJW。

CAN總線協(xié)議詳解


如下圖所示,當邊沿出現(xiàn)在SS段前時,說明接收節(jié)點的SS段晚于發(fā)送節(jié)點的SS段,接收節(jié)點為了在盡可能靠近發(fā)送節(jié)點的采樣點處進行采樣,再將上1位的PBS2減少一個SJW。

CAN總線協(xié)議詳解


1、1個位中只進行同步調(diào)整

2、只有當上次采樣點的總線值和邊沿后的總線值不同時,該邊沿才能用于調(diào)整同步(即電平發(fā)生變化)

3、在總線空閑且存在隱性電平到顯性電平邊沿,則一定要進行硬件同步。

4、在總線非空閑檢測到的隱性電平到顯性電平的邊沿如果滿足條件1和2,將進行再同步。



CAN總線發(fā)送數(shù)據(jù)時,將示波器兩個通道,一個夾H,一個夾L,兩個表筆接地端夾電路板地,點Math,用減法,得出CH1-CH2波形,將示波器時基設置到100Ms/Div來捕捉。捕捉波形如下:



前面是怎么解碼出0x29的呢?

首先SOF=顯性也就是高電平邏輯0,接著11位標識符0x029,就是0 000 0010 1001,接著3個顯性RTR\IDE\r0,也是000,我們得到15個邏輯位0 000 0010 1001 000。注意前面有出現(xiàn)5個連續(xù)0,需要補位1.所以我們得到16位數(shù)據(jù)0 000 01010 1001 000。其中0高電平,1低電平。




 核對一下A-B之間16個us、是不是對上了。

 這個是后面DLC,4us,1000=8








再看一個幀解碼:




錯誤幀:


CAN總線設計規(guī)范對于CAN節(jié)點的輸出電壓有著嚴格的規(guī)定,單個節(jié)點的輸出電壓如果不符合規(guī)范,則在現(xiàn)場組網(wǎng)后容易出現(xiàn)信號電平不可靠的情況,導致錯誤幀的出現(xiàn),各節(jié)點間無法進行通信。具體要求如表1所示,為測試標準“ISO 11898-2輸出電壓標準”。


表 1 ISO 11898-2輸出電壓標準

本文引用地址:https://www.eepw.com.cn/article/201612/330616.htm


所以每個廠家在產(chǎn)品投入使用前,都要測試CAN節(jié)點DUT(被測設備)的輸出電壓幅值。一般是使用ISO 11989-2輸出電壓標準的CAN測試方法,如下描述:


如表1所示負載條件下,選擇被測DUT的適應條件,如圖 1所示,Rtest為網(wǎng)絡負載電阻,正常為60Ω,高負載時為45Ω。測量和差分電壓等級和CANL CANH線電壓: VCAN_H,VCAN_L,然后計算差分電壓Vdiff和共模電壓VCM。其中Vdiff和VCM的計算方法如下:


Vdiff = VCAN_H – VCAN_L
VCM = 0.5 * (VCAN_H + VCAN_L)


如果測試結(jié)果符合表1所示,則通過測試。



圖 1 輸出電壓測試原理

關(guān)鍵詞:CAN  

版權(quán)與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

車聯(lián)網(wǎng)時代,汽車電子的接口類型有can總線,lin總線,rs485,rs232,或者以太網(wǎng)總線等等
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!