can匯流排一幀多少位元組多少位

2021-10-16 15:14:21 字數 2128 閱讀 4804

can-bus 匯流排是應用最廣泛的現場匯流排之一,而很多非常熟練的can 工程師,面對一條 can報文到底有多少位的問題時,卻不能非常準確地回答。今天我們就從最基本的幀格式來解惑一條 can 報文的到底有多少位。

can 報文幀分為幾種呢?can-bus 通訊幀共分為資料幀、遠端幀、錯誤幀、過載幀和幀間隔。而資料幀和遠端幀又有標準幀和擴充套件幀兩種。其幀型別以及用途如表 1 所示:

表 1  幀型別及用途

ø資料幀

資料幀從結構上看分為 7 段,分別為起始段、仲裁段、控制段、資料段、crc 校驗段、ack 應答段、幀結束段。如圖 1:

圖 1  標準資料幀跟擴充套件資料幀結構圖

l 幀起始段:該段由單個顯性位構成,在匯流排空閒時才允許傳送,所有節點必須同步於開始傳送的資料幀的起始位;

l 標準幀仲裁段:標準幀的仲裁段由 11 位 id 碼和乙個顯性位 rtr 碼組成,rtr 碼為遠端幀標識位;

l 擴充套件幀仲裁段:擴充套件幀的仲裁段由 29 位 id 碼、一位顯性的 srr 碼、一位隱性的 ide 碼和一位顯性的 rtr 碼組成;

l 標準幀控制段:標準幀的控制段由單位顯性的 ide、保留位 r0 和 4 位資料長度** dlc 組成,dlc 資料段採用 bcd 編碼;

l 擴充套件幀控制段:擴充套件幀的控制段由兩個保留位 r1 和 r0 和 4 位的 dlc 資料段組成,r1 和 r0 都為顯性填充,接收時無論保留位是顯性還是隱性都沒有影響;

l 資料段:乙個資料段為 8 個位元組;

lcrc 校驗段:crc 校驗段由 15 位的校驗碼和 1 個隱性位填充的 crc 界定符組成,crc 校驗範圍為幀起始、仲裁段、控制段和資料段;

lack 段:ack 段由 ack 碼和乙個隱性位 ack 界定符組成,傳送節點在 ack 段傳送兩個隱性位,接收節點在收到的報文 ack 前面的幀格式沒有錯誤時,他將發出 ack 碼為顯性位的報文。

l 幀結束段:由 7 個連續的隱性位組成。

ø遠端幀

遠端幀幀格式跟資料幀類似,也分為標準幀跟擴充套件幀,但是遠端幀屬於被請求傳送節點傳送的報文,而資料幀是傳送節點的報文。如圖 2,遠端幀沒有資料幀。

圖 2  標準遠端幀和擴充套件遠端幀的結構圖

參照資料幀可了解遠端幀的結構,但是兩者之間也有不同:

lsrr 段和 rtr 段:資料幀是顯性電平,遠端幀是隱性電平;

l 節點性質:資料幀是傳送節點發出的報文格式,遠端幀是被請求傳送的節點傳送的報文格式;

lcrc 校驗範圍:資料幀是幀起始、仲裁段、控制段和資料段,而遠端幀則是幀起始、仲裁段和控制段。

了解了資料幀跟遠端幀的標準報文格式後,有些人可能會問了,我有時看到的報文為什麼跟你的標準格式的位數不一樣呢?

ø位填充

can-bus 屬於非同步序列通訊,這種通訊方式沒有時鐘線,所以各個收發器的時鐘不可能完全一致,時鐘不一致就會造成偏差。所以為了解決這個問題,can 匯流排採用同步的方式來校準時鐘。can-bus 規定訊號的跳變沿為同步訊號,只要訊號發生變化,節點時鐘就被同步一次。can-bus 還規定同步的最大週期為 5 個位。

但是問題來了,要是出現連續性的 5 個位甚至更長時間沒有邊沿跳變(例如資料段全為 0x56),那該如何解決呢?can-bus 對這種情況又進行了規範,如果傳輸的位訊號連續 5 個位是相同的,就要插入乙個電平相反的位,這個就是 can-bus 的「位填充」規則。如圖 4。

圖 4  位填充規則

ø0x00 和 0x55

由於位填充規則的存在,所以就存在即使兩個幀都是標準資料幀,但傳送不同 id 或者資料段的時候報文時間會不同,圖 5 為 1m 波特率下 id 跟資料都為 0x00 的標準資料幀報文。原本 108 個位的標準資料幀的真實的報文時間為 123us。

圖 5 標準資料幀 0x00 報文

而 0x55 的標準資料幀報文格式則如圖 6:id 為 555h,資料段為 55h,報文沒有出現連續的相同位,所以填充位最少,8 位的資料段位時間為標準的 8us,全報文時間為 108us。

圖 6  標準資料幀 0x55 報文

下表給出了標準資料幀、擴充套件資料幀、標準遠端幀、擴充套件遠端幀四種幀型別在傳送不同 id 和資料時位時間的差別。

表 2  不同 id 和資料位填充位數不一樣

通過 can-scope 匯流排分析儀的報文接收和示波器,可以將每一幀報文跟波形做一一對應,快速分析匯流排上的報文時間和波形情況,實現 can 匯流排的快速故障定位和干擾排除。

can匯流排一幀多少位元組多少位 CAN匯流排物理層

1 位速率即波特率 can匯流排通訊協議的每一幀可以看作一連串的電平訊號,每乙個電平訊號代表一位 乙個位元組8位的位 所以一幀中包含了很多個位,由傳送單元在非同步的情況下傳送的每秒鐘的位數稱為位速率。2 位時序 一位又分為4段,同步段 ss 傳播時間段 pts 相位緩衝段 1 pbs1 相位緩衝段 ...

乙個漢字佔多少位元組

1 gbk編碼,乙個漢字佔2個位元組。2 utf 16編碼,通常漢字佔2個位元組,cjkv擴充套件b區 擴充套件c區 擴充套件d區中的漢字佔4個位元組 一般字元的unicode範圍是u 0000至u ffff,而這些擴充套件部分的範圍大於u 20000,因而要用兩個utf 16 3 utf 8編碼是...

ARM中的字 半字 位元組是多少位?

位元組永遠都是8bit,字的大小依賴於平台 可以通過sizeof 函式進行檢視 但是可以確定的是,字是多少位,半字永遠是字的一半,雙字永遠是字的2倍大小 字 word 在arm體系結構中,字的長度為32位,而在8位 16位處理器體系結構中,字的長度一般為16位。半字 half word 在arm體系...