CAN通訊協議層 秉火STM32學習筆記

2021-10-13 18:33:37 字數 3515 閱讀 5593

首先非常感謝秉火團隊為我們提供學習stm32的豐富資料及詳細教程,此筆記僅用作個人學習記錄,以此加深記憶,如果讀者也喜歡,請一同感謝並支援秉火團隊。

1. can 的波特率及位同步ss 段(sync seg)

ss 譯為同步段,若通訊節點檢測到匯流排上訊號的跳變沿被包含在ss 段的範圍之內,則表示節點與匯流排的時序是同步的,當節點與匯流排同步時,取樣點採集到的匯流排電平即可被確定為該位的電平。ss 段的大小固定為1tq。

pts 段(prop seg)

pts 譯為傳播時間段,這個時間段是用於補償網路的物理延時時間。是匯流排上輸入比較器延時和輸出驅動器延時總和的兩倍。pts 段的大小可以為1~8tq。

pbs1 段(phase seg1)

pbs1 譯為相位緩衝段,主要用來補償邊沿階段的誤差,它的時間長度在重新同步的時候可以加長。pbs1 段的初始大小可以為1~8tq。

pbs2 段(phase seg2)

pbs2 這是另乙個相位緩衝段,也是用來補償邊沿階段誤差的,它的時間長度在重新同步時可以縮短。pbs2 段的初始大小可以為2~8tq。

通訊的波特率

匯流排上的各個通訊節點只要約定好1 個tq 的時間長度以及每乙個資料位佔據多少個tq,就可以確定can 通訊的波特率。

例如,假設上圖中的1tq=1us,而每個資料位由19 個tq 組成,則傳輸一位資料需要時間t1bit =19us,從而每秒可以傳輸的資料位個數為:

1x106/19 = 52631.6 (bps)

這個每秒可傳輸的資料位的個數即為通訊中的波特率。

同步過程分析

波特率只是約定了每個資料位的長度,資料同步還涉及到相位的細節,這個時候就

需要用到資料位內的ss、pts、pbs1 及pbs2 段了。

根據對段的應用方式差異,can 的資料同步分為硬同步和重新同步。其中硬同步只是當存在「幀起始訊號」時起作用,無法確保後續一連串的位時序都是同步的,而重新同步方式可解決該問題,這兩種方式具體介紹如下:

(1) 硬同步

若某個can 節點通過匯流排傳送資料時,它會傳送乙個表示通訊起始的訊號(即幀起始訊號),該訊號是乙個由高變低的下降沿。而掛載到can 匯流排上的通訊節點在不傳送資料時,會時刻檢測匯流排上的訊號。

如下圖可以看到當匯流排出現幀起始訊號時,某節點檢測到匯流排的幀起始訊號不在節點內部時序的ss 段範圍,所以判斷它自己的內部時序與匯流排不同步,因而這個狀態的取樣點採集得的資料是不正確的。所以節點以硬同步的方式調整,把自己的位時序中的ss段平移至匯流排出現下降沿的部分,獲得同步,同步後取樣點就可以採集得正確資料了。

(2) 重新同步

前面的硬同步只是當存在幀起始訊號時才起作用,如果在一幀很長的資料內,節點訊號與匯流排訊號相位有偏移時,這種同步方式就無能為力了。因而需要引入重新同步方式,它利用普通資料位的高至低電平的跳變沿來同步(幀起始訊號是特殊的跳變沿)。重新同步與硬同步方式相似的地方是它們都使用ss 段來進行檢測,同步的目的都是使節點內的ss段把跳變沿包含起來。

重新同步的方式分為超前和滯後兩種情況,以匯流排跳變沿與ss 段的相對位置進行區分。第一種相位超前的情況如下圖 ,節點從匯流排的邊沿跳變中,檢測到它內部的時序比匯流排的時序相對超前2tq,這時控制器在下乙個位時序中的pbs1 段增加2tq 的時間長度,使得節點與匯流排時序重新同步。

2. can 的報文種類及結構

報文的種類

在原始資料段的前面加上傳輸起始標籤、片選(識別)標籤和控制標籤,在資料的尾段加上crc 校驗標籤、應答標籤和傳輸結束標籤,把這些內容按特定的格式打包好,就可以用乙個通道表達各種訊號了,各種各樣的標籤就如同spi 中各種通道上的訊號,起到了協同傳輸的作用。

為了更有效地控制通訊,can 一共規定了5 種型別的幀。

幀型別幀用途

資料幀用於節點向外傳輸資料

遙控幀用於向遠端節點傳輸資料

錯誤幀用於向遠端節點通知校驗錯誤,請求重新傳送上乙個資料

幀間隔用於將資料幀及遙控幀與前面的幀分離開來

資料幀的結構

資料幀以乙個顯性位(邏輯0)開始,以7 個連續的隱性位(邏輯1)結束,在它們之間,分別有仲裁段、控制段、資料段、crc 段和ack 段。

幀起始sof 段(start of frame),譯為幀起始,幀起始訊號只有乙個資料位,是乙個顯性電平,它用於通知各個節點將有資料傳輸,其它節點通過幀起始訊號的電平跳變沿來進行硬同步。

仲裁段當同時有兩個報文被傳送時,匯流排會根據仲裁段的內容決定哪個資料報能被傳輸,這也是它名稱的由來。 仲裁段的內容主要為本資料幀的id 資訊(識別符號),資料幀具有標準格式和擴充套件格式兩種,區別就在於id 資訊的長度,標準格式的id 為11 位,擴充套件格式的id 為29 位,它在標準id 的基礎上多出18 位

rtr位

位(remote transmission request bit),譯作遠端傳輸請求位,它是用於區分資料幀和遙控幀的,當它為顯性電平時表示資料幀,隱性電平時表示遙控幀。

ide 位

(identifier extension bit),譯作識別符號擴充套件位,它是用於區分標準格式與擴充套件格式,當它為顯性電平時表示標準格式,隱性電平時表示擴充套件格式。

srr 位

(substitute remote request bit),只存在於擴充套件格式,它用於替代標準格式中的rtr 位。由於擴充套件幀中的srr 位為隱性位,rtr 在資料幀為顯性位,所以在兩個id相同的標準格式報文與擴充套件格式報文中,標準格式的優先順序較高。

控制段在控制段中的r1 和r0 為保留位,預設設定為顯性位。它最主要的是dlc 段(datalength code),譯為資料長度碼,它由4 個資料位組成,用於表示本報文中的資料段含有多少個位元組,dlc 段表示的數字為0~8。

資料段資料段為資料幀的核心內容,它是節點要傳送的原始資訊,由0~8 個位元組組成,msb先行。

crc 段

為了保證報文的正確傳輸,can 的報文包含了一段15 位的crc 校驗碼,一旦接收節點算出的crc 碼跟接收到的crc 碼不同,則它會向傳送節點反饋出錯資訊,利用錯誤幀請求它重新傳送。crc 部分的計算一般由can 控制器硬體完成,出錯時的處理則由軟體控制最大重發數。在crc 校驗碼之後,有乙個crc 界定符,它為隱性位,主要作用是把crc 校驗碼與後面的ack 段間隔起來。

幀結束eof 段(end of frame),譯為幀結束,幀結束段由傳送節點傳送的7 個隱性位表示結束。

關於其它的can 報文結構如下表

CAN通訊方式 秉火STM32學習筆記

首先非常感謝秉火團隊為我們提供學習stm32的豐富資料及詳細教程。本筆記僅用作個人學習記錄,以此加深記憶,如感覺有幫助,可感謝支援秉火團隊。can 協議簡介 can 是控制器區域網路 controller area network 的簡稱,它是由研發和生產汽車電子產品著稱的德國bosch 公司開發的...

STM32中的通訊協議

按照資料傳送方式分 序列通訊 一條資料線 適合遠距離傳輸 並行通訊 多條資料線 成本高 抗干擾性差 按照通訊的資料同步方式分 非同步通訊 以1個字元為1幀 傳送與接收時鐘不一致 同步通訊 位同步 時鐘一致 按照資料的傳輸方向分 單工 只能往乙個方向傳播 半雙工 資料傳輸可以沿兩個方向,但是需要分時 ...

STM32開發 UART應用層通訊協議分析

拿到乙份uart的通訊協議,上手來操作之前先做一下分析。先看一下它的幀格式說明 1 幀頭標誌head 不論是命令幀還是響應幀,幀頭標誌都是0x92。2 協議版本 協議版本號 4bit 目前值為1 加密方式 4bit 0表示採取 資料不加密 校驗和 方式。所以,當前此欄位完整值為0x10 3 控制欄位...