日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAN\CANFD\FlexRay\LIN 一文深度解析常见通信协议

發布時間:2023/12/8 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CAN\CANFD\FlexRay\LIN 一文深度解析常见通信协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文重點介紹一些局域網通信協議,我是通過 B 站 Vector 官方的視頻學習的。

J1939 部分感覺和 CAN 差不多就沒有詳細繼續學習,另外感覺 J1939 官網講的一般。

Vector 官網

Vector 培訓官網

Vector B站主頁

我學習的課程視頻

文章目錄

  • 1 CAN 通信
    • 1.1 CAN 通信節點
    • 1.2 尋址 Address
    • 1.3 Bus Access 總線訪問機制
    • 1.4 CAN Framing 幀格式
      • 幀錯誤檢測機制
      • 發送方錯誤檢測
      • 接收方錯誤檢測
      • 錯誤幀
      • 錯誤狀態
  • 2 CAN FD
  • 3 FlexRay
    • 3.1 FlexRay 物理層
    • 3.2 FlexRay 通信周期
    • 3.3 FlexRay 幀結構
    • 3.4 FlexRay 總線訪問
  • 4 LIN
    • 4.1 LIN 物理層
    • 4.2 LIN 通信原理及幀結構
    • 4.3 LIN 調度機制及報文類型
    • 4.4 LIN 狀態管理和網絡管理
  • 5 J1939
    • 5.1 參數組和信號

1 CAN 通信

CAN 通信適用于局域網場景,高速 CAN 最高 1 MB/S,低速 CAN 最高 125KB/S。常用于工業系統、車載場景等,相比于互聯網的七層或四層網絡通信協議, CAN 通信不需要 IP 地址,而且汽車的各個局部通信網絡,可以有不同的通信速度,匹配了不同的通信需求。不同速度的 CAN 通信使用網關互相通信。網關還可以做中繼器,放大信號,提升傳輸距離。

1.1 CAN 通信節點

  • MicroController:控制器把數據發送給 CAN 控制器
  • CAN Controller:報文的封裝、檢查、總線訪問以及 bit-timing
  • CAN-Transceiver:收發報文
  • 兩端的電阻:保證信息傳輸過程中的阻抗連續性

1.2 尋址 Address

兩種尋址方式:

  • Node Address 點對點尋址:發送者選擇目標地址
  • Broadcast Address 廣播尋址:接收者選擇是否接受

CAN 采用的是廣播尋址。CAN Controller(CAN 控制器)中有 Filter(過濾器),來選擇接受應用需要的數據。

過濾器原理:

  • 第一種:CAN-TX 和 CAN-RX,通過收到的標識符和 CAN-TX 中比較,CAN-TX 中為 1 的段,則是必須匹配的位(必須相等)
  • 第二種和第一種類似,具體忘了,但是原理差不多
  • 第三種:和每個 CAN-Controller 內部寄存的標識符進行匹配
  • 1.3 Bus Access 總線訪問機制

    非破壞性總線仲裁機制。根據標識符判斷優先級,優先級高的優先發送,優先級低的之后再發送(或新一輪的仲裁)。

    仲裁方法:標識符 ID 發到總線上時,進行總線與運算,假設和某個 CAN 節點 A 的標識符 ID (標準振標識符范圍 [0, 2047],標識符 ID 有點類似身份證 ID)不同時,A 停止發送轉為接受模式,即標識符越小優先級越高。

    1.4 CAN Framing 幀格式

    • 標準幀
      • 標準幀(11 ID + 0~8 bytes data)
      • 標準遠程幀(11 ID + 0 byte data)
    • 擴展幀
      • 擴展幀(29 ID + 0~8 bytes data)
      • 擴展遠程幀(29 ID + 0 byte data)
    • SOF:0(顯性電位為 0,隱性電位為 1,總線空閑默認為 1),幀起始,接收節點收到幀起始會和總線時鐘進行同步(硬同步、重同步,這里是硬同步)。
    • 仲裁字段
      • ID:高位在前
      • RTR:遠程幀請求,遠程幀為 0,表示是數據幀,否則是遠程幀。遠程幀表明接受該幀的節點即不主動發送數據,當他收到遠程幀時,才開始發送數據,減少占用 CAN 的通信。
    • 控制字段
      • IDE:表示是否是擴展幀,IDE 為 1 是擴展幀
      • r:保留位
      • DLC:數據長度,合理范圍是 0 - 8,超過則表示 8 字節
    • 數據字段
    • 校驗字段
      • CRC:15位校驗位
      • DEL(delimter):分隔符,無意義,為 1
    • 確認字段
      • ACK:發送節點,該位都為 1,接受節點 CRC 正確則在 ACK 位時,該位置置為 0,否則還是 1。如果發送節點回讀 ACK 是 0,繼續發送,否則停止發送,下一次發送一個錯誤幀。(下一次發送錯誤幀不太理解)
      • DEL
    • EOF + ITM:結束字段 + 幀間隔

    位填充:

    • 出現了五個相同的位(包括填充位),就在下一個位置填充一個相反的位。
    • 范圍從 SOF 開始一直到 CRC。

    幀錯誤檢測機制

    • 位監控:回讀發送出去的位的數據
    • ACK 位:發送數據的節點回讀 ACK 是 0,繼續發送,否則意味著發生錯誤停止發送
    • Stuff Check:填充檢測
    • CRC 檢測
    • Form 檢測:一些分隔符 del 等

    發先幀錯誤后:某一個節點檢查到發送或者接受的幀出現錯誤,會以發送錯誤幀的方式告知其他參與通信的節點,當前正在發送或者接受的幀是有問題的。

    發送方錯誤檢測

    位監控指的是發送方發送出去某一位后,回讀總線數據,如果回讀數據和發送的數據不同,那么就表明總線數據發生錯誤。

    仲裁段標虛線表示不能完全使用位監控。因為仲裁機制,因此這里如果出現了發1讀0,則認為是仲裁失敗而非發送錯誤。發送節點會轉而變成接收節點。但是發0讀1肯定是錯誤,因為仲裁是取較小的值,所以這里肯定是發生了錯誤,因此是虛線。

    除了位監控之外就是 ACK,發送方 ACK 默認為 1,然后回讀 ACK,如果 ACK 不為 0,則表明發生錯誤。

    接收方錯誤檢測

    首先是位填充檢測,從幀起始到 CRC。出現連續六個及以上的連續位表明肯定發生了錯誤。

    CRC 從仲裁字段到 CRC 字段,計算 CRC 是否正確。
    格式檢查,分隔符、結束符。

    ACK 位監控,即回讀 ACK 位,接收方需要根據前面的檢測結果寫 ACK 位,如果數據沒問題寫入 0,否則寫入 1。這時接收方變成了發送方,因此也有了位監控的錯誤檢查。

    錯誤幀

    錯誤幀格式:6位錯誤標識和8位錯誤界定符(分隔符)

    除 CRC 錯誤之外,檢查到錯誤時,會從下一位立即開始發送錯誤幀,CRC 檢查到錯誤會在 ACK 位向接收節點發送 1,然后 ACK 界定符之后發送錯誤幀。

    • 錯誤主動節點:錯誤幀為 6 個 0,8 個 1
    • 錯誤被動節點:錯誤幀為 6 個 1,8 個 1

    錯誤幀的前 6 位錯誤標識符是為了觸發參與通信節點的位填充錯誤,觸發之后其他參與通信的節點也會發送錯誤幀,6 個 0 的情況下的表現為,可能發送的 0 的個數大于 6,如圖所示為 12(6 + 6),6 個 1 的情況下為可能發送完 6 個 1 之后還會發送多個 0,然后再進入錯誤分隔符,錯誤分隔符 + 幀界定符總共 11 個 1,11 個 1 表明總線又再次處于空閑狀態。那么發送節點就可以根據數據進行重發。

    錯誤狀態


    每個節點一定處于上述三種狀態,每個節點有兩個值,TEC\REC,TEC\REC 變化的大致規則:

    • 作為發送節點率先發現錯誤,則 TEC + 8
    • 作為接收節點率先發現錯誤,REC + 8,如果作為接收節點接收到了別人的錯誤幀,則 REC + 1
    • 成功接受 REC - 1,成功發送 TEC - 1

    主動錯誤狀態節點,可以在幀界定符之后繼續發送;而錯誤被動節點必須還要再等待 8 個字符才能開始發送。總線關閉節點不允許訪問總線。

    2 CAN FD

    硬件、協議輕微改動。CAN FD 數據段最多 64 字節。CAN FD 最高支持 8MB/s 的傳輸速率。CAN FD 采用可變速率,數據字段傳輸快。

    CAN FD 沒有遠程幀,只分為兩種:標準幀(標識符 11 位)和擴展幀(標識符 29 位)。

    • SOF:幀起始
    • 標識符ID
    • RRS 代替原來的 CAN 幀的 RTR
    • IDE:表示是否是擴展幀
    • FDF:表示是否是 CAN 幀還是 CAN FD 幀
    • r:保留位
    • BRS(Bit Rate Switch): 之后數據段傳輸是否變換速度,BRS 之前屬于仲裁段,會以低速傳輸;BRS 開始到 CRC 分隔符為止,屬于數據段,可以高速傳輸。CRC 分割符之后,由于需要 ACK 應答,因此又變為低速傳輸。
    • ESI:用來告知其余節點,發送方的錯誤狀態。
    • DLC:0-8 線性表示數據長度,9-15離散的表示數據長度。
    • CRC:根據不同的數據長度使用不同長度的 CRC 校驗。CAN 使用 15 位的 CRC 校驗,且不包含填充位。CAN FD CRC 包含數據填充位。CAN FD 在 CRC 字段的前四位增加了對前面填充位的計數校驗,前面的填充同樣是 5 個相同位跟一個相反的位。CRC 字段不適用之前的填充,而是使用固定位填充,從 CRC 字段開始位置開始填充,每隔四個位填充一位,每次填充的位都取前一個的相反值。
      • 先統計 SOF 開始到 CRC 字段之前填充位的個數對 8 取模,將數值以格林編碼的形式存放在高三位,最后一位偶校驗位,校驗前三位。
      • 當數據段大于 16 字節,使用 21 位 CRC
      • 當數據段小于等于 16 字節,使用 17 位 CRC

    3 FlexRay

    汽車主動安全和被動安全領域對汽車通信提出了更高的要求。

    • 傳輸速率:10MB/s
    • 可擴展性:增加刪除節點
    • 物理層:要保持簡便且魯棒性
    • 傳輸可靠:提高容錯性、確定性

    信息傳輸控制:

    • 事件觸發控制:發送時間根據事件。可能同時需要發送很多數據,最終導致延遲等問題
      • CSMA:CAN 屬于 CSMA(載波監聽多點接入)
    • 時間觸發控制:發送時間提前分配好,提前安排好發送時間是必須的。
      • TDMA:時分多路訪問方式

    3.1 FlexRay 物理層


    對底層拓撲結構不做任何要求,可以是 P2P、Bus、Passive star。電阻作用防止高頻信號的干擾,任意兩節點線長最遠不能超過 24 米,這是為了保持信號完整性。可以通過主動星型拓撲結構代替被動星型,以提高通信質量、補償信號失真,但是成本有所上升。實際應用中,經常上述幾種(包括主動星型)混合應用。

    上圖描述了 FlexRay 的信號到數據的轉化。同樣是通過兩線(Bus Plus、Bus Minus)的電壓差分來得到數據。總線狀態有以下四種:

    • 空閑、低功耗狀態:差分為 0,但兩線都處于低電壓
    • 空閑狀態:差分為 0,電壓不低,處于高低電壓中間
    • Data1:BP 和 BM 電壓差大于 600mV 表明此時數據是 Data1
    • Data0:BP 和 BM 電壓差小于 -600mV 表明此時數據是 Data1

      上圖介紹了 FlexRay 總線物理布局。
    • μC:Micro Controller 微控制器即 CPU
    • CC:通信控制器,組幀、總線訪問、收發報文
    • BD:總線驅動,信號轉換
    • BG:總線監控器(Bus Guardian),在 CC 和 BD 之間可以增加 BG,防止故障節點在未分配給他們的時隙內出現未經授權的傳輸數據(防止故障節點在錯誤時間訪問總線)。

    3.2 FlexRay 通信周期

    以通信周期為一個循環,發送數據。每個周期分為 64 個 Cycle(周期)。每個周期分為四個時間段:靜態段(確定性的傳輸報文)、動態段(傳輸事件驅動的報文)、符號窗口(傳輸特殊符號)、網絡空閑時間段(不會通信)。每個周期靜態段和空閑時段是必須的,其他兩個是可選的。

    靜態段基于 TDMA 通信,靜態段可以平均劃分分為 2 - 1023 個 slot,slot 長度、個數由兩個靜態變量定義。每個 slot 放一個靜態幀,每個靜態幀由頭、有效負載、尾、幀結束組成。CID(通信控制界定符)用來表示幀的結束。

    動態段用來傳輸事件驅動報文。動態段分為多個動態 slot(槽),動態 slot 大小不同,有一個最小單位gdMiniSlot,動態 slot 可由一到多個 gdMiniSlot 組成。動態段最多 2047 個動態 slot,最多可劃分為 7986 個 gdMiniSlot。

    符號窗口大小是固定的,用于傳輸符號而非報文數據。符號有三種:沖突避免符號(用于表示第一個通信周期的開始)、介質測試符號(用于測試總線監控器)、喚醒符號(用于喚醒 FlexRay 網絡)。通信周期的末尾是網絡空閑段,用于同步本地時鐘,不進行數據通信。

    3.3 FlexRay 幀結構

    • 幀頭:存放屬性信息,40位
      • Start bits:5 位
        • 1:保留位 1 位,默認發送 0
        • 2:Payload preamble indicator,動態靜態報文不同,含義也不同
        • 3:Null frame indicator,指示 payload 是正常還是無效
        • 4:Sync frame indicator,判斷該幀是否為同步幀
        • 5:Startup frame indicator,判斷該幀是否為啟動幀
      • Frame id:報文ID
      • Payload length:數據大小,范圍 0-127,單位是 字,規定一個字為兩字節
      • Header CRC:幀頭 CRC,校驗范圍從 4 開始到 Header CRC 之前
      • Cycle count:周期計數器,范圍 0-63
    • 有效負載:最多 254 字節
      • 靜態報文可以使用有效負載指示位,把 payload 前 12 個字節作為傳輸網絡管理向量,可以進行網絡管理
      • 動態報文則可以把 payload 前 2 個字節作為報文標識符,既 message id,用于實現更精細的區分依據。
    • 幀尾:存放 CRC 校驗所求結果,校驗范圍是前面所有。

    3.4 FlexRay 總線訪問


    FlexRay 支持單雙通道。不同通信通道通信相互獨立。

    如上圖是靜態段訪問方式:想要保證數據正確,可以采用節點 K 所示,在不同通信通道發送相同數據;想要增加帶寬,如節點 L 所示,在不同通信通道發送不同的數據。

    動態段發送事件驅動的報文,由于不同通信通道相互獨立,因此可以在相同的槽發送不同的大小的數據。 最遲發送時間,即超過這個時間發送的事件驅動的報文,不允許發送,只能等待下一個周期。

    周期內嚴格按照周期調度表發送幀,為了提高傳輸速率,多個周期可以使用復合調度表,在不同的周期發送不同的幀。例如靜態復用周期和動態復用周期。

    如圖,靜態段,同一節點、相同的槽發送了不同的幀。

    如圖,動態段相對更加靈活,相同的槽可以給不同的節點發送,也可以個相同的節點發送不同的幀,每次發送的幀的大小都可以不同。

    4 LIN

    之前傳感器和執行器也接入 CAN ,隨著 ECU 增多,每個傳感器和執行器都需要 CAN Controller 和CAN 收發器,此外也會增加 CAN 總線的長度、數量,成本高。為此提出了一個解決方案,傳感器和執行器接入低成本總線,低成本總線接入某個 ECU,就可以和整個 CAN 通信。

    典型應用是在舒適領域,后視鏡調節、電動車窗、雨刷等等。

    • NCF:節點性能文件,定義了節點名稱和屬性
    • LDF:LIN 描述文件,描述了 LIN 網絡信息,網絡中所有信號和報文在這里聲明

    4.1 LIN 物理層


    LIN 只需要一根線,不需要控制器,可以接在 UART/SCI 上,因此 LIN 是基于 UART 幀結構通信。

    上圖表示了 LIN 的電信號和數字信號的關系。

    • recessive:為 1
    • dominant:為 0

    LIN 總線有兩種同步:初始同步、重同步。為了降低成本,LIN 總線無時鐘線,從節點采用低成本的 2c 震蕩器,并允許最大 14% 的時鐘偏差。

    上圖所示為初始時鐘同步,LIN 總線空閑時為 1,數據開始傳輸時,由主節點(即主 ECU)實現時鐘同步。主節點,發送同步間隔段和同步段。同步間隔段由至少 13 個 0 和 1 個分隔符(值為 1)組成。同步段的值為 0x55。

    從節點收到同步段,把第一個下降沿和最后一個下降沿相隔時間除以 8,得到主節點的單個位的時間。然后根據結果調整自身速率和主節點保持一致。初始同步實現了所有節點和主節點時鐘同步。

    重同步即數據傳輸過程中利用 UART 通信幀進行時鐘同步。

    4.2 LIN 通信原理及幀結構


    主節點有總任務和從任務,主任務發送了 header,從任務負責發送 response 或接受 response 或不發送也不接受。
    如圖所示,LIN-Master 根據調度表發送 header,t0 時刻 Master 發送了 header,之后從節點 slave1 發送響應,slave3 接收了響應,slave2 不發送也不接受。由此可知,LIN 報文由 header 和 response 組成。

    • 同步間隔段:至少 13 個 1(值為 0,顯性),和一個界定符(值為 1,隱性),其他字段都符合 UART 不超過 10 個位。
    • 同步段:0x55
    • 保護標識符段:PID,6 位 ID 和 2 位奇偶校驗位組成。ID:范圍是 0-63。60、61 用于診斷。 62、63 保留。


      response 由數據段和校驗段組成。數據段最多 8 個字節。校驗方式有兩種,如下:
    • 經典校驗:只包含數據段
    • 增強校驗:包含前面的 PID

    4.3 LIN 調度機制及報文類型


    由上圖可計算 header、response 的數據傳輸時間。但是數據不光有傳輸時間,傳輸過程中還有時間間隔沒有計算,稱為時間余量(Time Reserve)。

    時間余量有兩種:

    • Inter-byte space 即字節間的傳輸間隔
    • Response space 即響應間隔

    一幀 LIN 報文時間余量最大為額定傳輸時間的 40%,即一幀 LIN 報文傳輸時間最大為額定傳輸時間的 1.4 倍。

    幀時隙:【我的理解是前一幀結束到本幀的同步間隔第一個下降沿的時間,但是 b 站 vector 官方不是這么講的,我感覺意思一樣】報文同步間隔下降沿與幀時隙起始時刻相差的時間。

    LIN 幀的槽最大時間為幀時隙 + 幀最大傳輸時間。

    真實的 frame slot 是由若干個最小單位 mini slot 組成。mini slot 與 time base(時機)一致。時機用于主節點執行調度控制,一般為 5ms 或 10ms。主節點可以有多個調度表,并且在其中切換。
    LIN 有四種報文類型:

    • 無條件幀(Unconditional frame 0-59):一個 response 對應一個 header,
    • 事件觸發幀(Event triggered frame 0-59):典型應用是
    • 偶發幀(Sporadic frame 0-59):
    • 診斷幀(60-61,60 master diagnostic request frame,61 slave)

      無條件幀5-8發生變化頻率較低,并且滿足事件觸發幀關聯條件,則可以用事件觸發幀代替無條件幀5-8,當主節點調度表執行到事件觸發幀時,只有關聯的從節點的無條件幀的信號發生變化才會返回 response。當有多個從節點響應時會切換到沖突解決調度表。

    4.4 LIN 狀態管理和網絡管理

    狀態管理的目的是檢測各個節點運行過程中的錯誤。

    每個從節點在其發送的某個無條件幀中包含一個 response error 的標量信號,通過該信號向主節點報告自身狀態。主節點接受并分析。LIN 沒有標準化制定錯誤類型,用戶可以根據需要自行制定。

    網絡管理主要指的是網絡的休眠和喚醒。從節點有三種狀態:

    • 初始化:第一次連接電源、復位或喚醒后進入初始化,初始化完畢后進入運行狀態,初始化不能超過 100ms
    • 運行狀態:可以進行 LIN 報文的收發
    • 總線休眠:運行狀態收到休眠命令或總線靜默4-10秒時,進入休眠狀態。休眠狀態,總線保持隱性電平。主從節點都可以向總線發送喚醒信號,當接收到喚醒信號或者由于內部原因喚醒,后又會進入初始化狀態。

    喚醒信號為:250us - 5ms 的顯性電平(值為 0),150ms - 250ms 總線沒有其他信號,可以再發送喚醒信號,最多連續發 3 次,之后必須等待至少 1.5s 才能繼續發送喚醒信號。

    主節點可以發送休眠命令,使 LIN 子網進入休眠模式。休眠命令為 ID為診斷報文 0x3c,數據字段第一個為 0x00(其他節點會只關注數據節點的第一個字節)。

    5 J1939

    美國工程汽車協會制定的通信標準。物理層和鏈路層都是使用的 CAN,幀格式是 CAN 擴展幀。詳細規定了 29 位 ID,數據單元為 parameter group 即參數組。參數組是由參數組編號(PGN)標識。

    下圖所示,底層是 CAN 通信的物理層和數據鏈路層,上層是應用層以及其他高層。

    有兩種通信方式:


    上圖,#3 和 #11 通過參數組 TSC1 來控制發動機扭矩進行 P2P 通信,#23 通過參數組 RQST 進行廣播通信。

    5.1 參數組和信號

    PDU,Parameter Data Unit ,應用層或網絡層的數據單元。

    PGN,Parameter Group Number,PG 參數組,具有相關性并且傳輸速率相同的一組信號,每個參數組都有唯一的編號,即 PGN。

    總結

    以上是生活随笔為你收集整理的CAN\CANFD\FlexRay\LIN 一文深度解析常见通信协议的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。