天天看點

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

STM32 CAN總線-1

CAN是控制器區域網路絡(Controller Area Network)的簡稱。

具有的高可靠性和良好的錯誤檢測能力。為半雙工。

目錄

  • STM32 CAN總線-1
    • 目錄
    • CAN 實體層
        • 1 閉環總線網絡
        • 2 開環總線網絡
        • 3 通訊節點
        • 4 差分信号
        • 5 CAN協定中的差分信号
    • CAN 協定層
      • 1 CAN的波特率及位同步
        • 11 位時序分解
        • 12通訊的波特率
      • 2 CAN的封包種類及結構
        • 21 封包的種類
        • 22 資料幀的結構

1. CAN 實體層

與I2C、SPI等具有時鐘信号的同步通訊方式不同,CAN通訊并不是以時鐘信号來進行同步的,它是一種異步通訊,隻具有CAN_High和CAN_Low兩條信

号線,共同構成一組差分信号線,以差分信号的形式進行通訊。(沒有時鐘)

CAN實體層的形式主要分為閉環總線及開環總線網絡兩種,一個适合于高速通訊,一個适合于遠距離通訊。

1.1 閉環總線網絡

CAN閉環通訊網絡是一種遵循ISO11898标準的高速、短距離網絡,它的總線最大長度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個“120歐”的電阻。

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

1.2 開環總線網絡

CAN開環總線網絡是遵循ISO11519-2标準的低速、遠距離網絡,它的最大傳輸距離為1km,最高通訊速率為125kbps,兩根總線是獨立的、不形成閉環,要求每根總線上各串聯有一個“2.2千歐”的電阻。

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

1.3 通訊節點

1.CAN總線上可以挂載多個通訊節點,節點個數理論上不受限制,隻要總線的負載足夠即可,可以通過中繼

器增強負載。

2.CAN通訊節點由一個CAN控制器(STM32内置有)及CAN收發器組成,控制器與收發器之間

通過CAN_Tx及CAN_Rx信号線相連,收發器與CAN總線之間使用CAN_High及CAN_Low信号線相連。其中CAN_Tx及CAN_Rx使用普通的類似TTL邏輯信号(TTL信号在STM32就是3.3V和0V),而CAN_High及CAN_Low是一對差分信号線,使用比較特别的差分信号。

1.4 差分信号

1.抗幹擾能力強

2.能有效抑制它對外部的電磁幹擾

3.時序定位精确

由于差分信号線具有這些優點,是以在USB協定、485協定、以太網協定及CAN協定的實體層中,都使用了差分信号傳輸。

1.5 CAN協定中的差分信号

CAN協定中對它使用的CAN_High及CAN_Low表示的差分信号做了規定。

以高速CAN協定為例,當表示邏輯1時(隐性電平),CAN_High和CAN_Low線上的電壓均為2.5v,即它們的電壓差V H -V L =0V;而表示邏輯0時(顯性電平),CAN_High的電平為3.5V,CAN_Low線的電平為1.5V,即它們的電壓差為V H -V L =2V。

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

2. CAN 協定層

2.1 CAN的波特率及位同步

CAN屬于異步通訊,沒有時鐘信号線,連接配接在同一個總線網絡中的各個節點會像序列槽異步通訊那樣,節點間使用約定好的波特率進行通訊,特别地,CAN還會使用“位同步”的方式來抗幹擾、吸收誤差,實作對總線電平信号進行正确的采樣,確定通訊正常。

2.1.1 位時序分解

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

圖中表示的CAN通訊信号每一個資料位的長度為19Tq,其中SS段占1Tq,PTS段占6Tq,PBS1段占5Tq,PBS2段占7Tq。信号的采樣點位于PBS1段與PBS2段之間,通過控制各段的長度,可以對采樣點的位置進行偏移,以便準确地采樣。

以下都不是重點,不過可以了解下:

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。

2.1.2通訊的波特率

總線上的各個通訊節點隻要約定好1個Tq的時間長度以及每一個資料位占據多少個Tq,就可以确定CAN通訊的波特率。

例如,假設1Tq=1us,而每個資料位由19個Tq組成,則傳輸一位資料需要時間T1bit =19us,進而每秒可以傳輸的資料位個數為:

1x106­/19 = 52631.6 (bps)

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

2.2 CAN的封包種類及結構

當使用CAN協定進行通訊時,需要對資料、操作指令(如讀/寫)以及同步信号進行打包,打包後的這些内容稱為封包。

2.2.1 封包的種類

在原始資料段的前面加上傳輸起始标簽、片選(識别)标簽和控制标簽,在資料的尾段加上CRC校驗标簽、應答标簽和傳輸結束标簽,把這些内容按特定的格式打包好,就可以用一個通道表達各種信号,各種各樣的标簽就如同SPI中各種通道上的信号,起到了協同傳輸的作用。當整個資料包被傳輸到其它裝置時,隻要這些裝置按格式去解讀,就能還原出原始資料,這樣的封包就被稱為CAN的“資料幀”。

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

2.2.2 資料幀的結構

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1

資料幀以一個顯性位(邏輯0)開始,以7個連續的隐性位(邏輯1)結束,在它們之間,分别有仲裁段、控制段、資料段、CRC段和ACK段。

以下不是重點,不過需要了解下:

幀起始

SOF段(Start Of Frame),譯為幀起始,幀起始信号隻有一個資料位,是一個顯性電平,它用于通知各個節點将有資料傳輸,其它節點通過幀起始信号的電平跳變沿來進行硬同步。

仲裁段

當同時有兩個封包被發送時,總線會根據仲裁段的内容決定哪個資料包能被傳輸,這也是它名稱的由來。

仲裁段的内容主要為本資料幀的ID資訊(辨別符),資料幀具有标準格式和擴充格式兩種,差別就在于ID資訊的長度,标準格式的ID為11位,擴充格式的ID為29位,它在标準ID的基礎上多出18位。

在CAN協定中,ID起着重要的作用,它決定着資料幀發送的優先級,也決定着其它節點是否會接收這個資料幀。CAN協定不對挂載在它之上的節點配置設定優先級和位址,對總線的占有權是由資訊的重要性決定的,即對于重要的資訊,可給它打包上一個優先級高的ID,使它能夠及時地發送出去。

也正因為它這樣的優先級配置設定原則,使得CAN的擴充性大大加強,在總線上增加或減少節點并不影響其它裝置。

R5 STM32 CAN總線協定-1實體層協定層STM32 CAN總線-1
仲裁段ID的優先級也影響着接收裝置對封包的反應。因為在CAN總線上資料是以廣播的形式發送的,所有連接配接在CAN總線的節點都會收到所有其它節點發出的有效資料,因而CAN控制器大多具有根據ID過濾封包的功能,它可以控制自己隻接收某些ID的封包

RTR位(Remote Transmission Request Bit),譯作遠端傳輸請求位,它是用于區分資料幀和遙控幀的,當它為顯性電平時表示資料幀,隐性電平時表示遙控幀。

IDE位(Identifier Extension Bit),譯作辨別符擴充位,它是用于區分标準格式與擴充格式,當它為顯性電平時表示标準格式,隐性電平時表示擴充格式。

SRR位(Substitute Remote Request Bit),隻存在于擴充格式,它用于替代标準格式中的RTR位。由于擴充幀中的SRR位為隐性位,RTR在資料幀為顯性位,是以在兩個ID相同的标準格式封包與擴充格式封包中,标準格式的優先級較高。

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

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

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

ACK段,ACK段包括一個ACK槽位,和ACK界定符位。類似I2C總線,在ACK槽位中,發送節點發送的是隐性位,而接收節點則在這一位中發送顯性位以示應答。在ACK槽和幀結束之間由ACK界定符間隔開。

幀結束,EOF段(End Of Frame),譯為幀結束,幀結束段由發送節點發送的7個隐性位表示結束。

繼續閱讀