詳解CAN/CAN FD通信中的循環冗餘校驗(CRC)方法

2021-01-19 ZLG致遠電子

數據校驗是為保證數據的完整性進行的一種驗證操作。CAN通信採用CRC校驗作為一種重要的錯誤檢測手段,是節點判斷CAN幀信息的完整性並產生確認應答的依據。


在現場總線通信和控制的實際應用中,工業應用環境往往是極端的溫度以及電磁噪聲或是其他的惡劣環境,系統在這種條件下能否正常工作至關重要,試想一下倘若生產線設備發送的位置信息在傳輸過程出現了錯誤,輕則可能造成生產癱瘓,重則可能導致設備損壞甚至人員傷害。


在CAN總線通信過程中CAN控制器具備完整的錯誤檢測能力,其中包含:位錯誤檢測、格式錯誤檢測、填充錯誤檢測、應答錯誤檢測和CRC錯誤檢測。作為一種重要的錯誤檢測手段,CRC錯誤檢測是接收節點判斷CAN幀信息的完整性並向總線確認應答的依據。


 常見的校驗方法

1、最簡單的校驗是數據發送後進行主動回讀,結果一致才確認傳輸成功,很顯然這種傳輸溝通的方式很直觀並非常精準,但是由於回讀的操作使得數據傳輸量翻倍,也就是傳輸對帶寬要求高且效率低下。


2、奇偶校驗,就是傳輸中使用額外1個位來記錄傳輸數據二進位數中1的個數是奇數還是偶數,這個方案適合絕大多數硬體,傳輸開銷適中,因此被廣泛使用,例如常見的串口通信。


3、累加和校驗,該算法原理是對數據逐一進行累加後得到一個數值,接收方在接收數據同時也進行數據的累加並最終與發送過來的累加和進行比較,該算法計算簡單,無論在硬體或是軟體實現都能保證較高的效率,常用於低速串行數據通信校驗和晶片代碼的完整性判斷。


4、CRC檢驗,該算法是基於一個多項式除法取餘的結果,其根據位數需求和多項式變化有數十種版本,憑藉其硬體實現簡單,位反轉偵錯能力較強及運算開銷適中的優點被廣泛應用與數字網絡傳輸以及數據存儲領域,如磁碟數據校驗、USB、GSM/CDMA通信,在計算機應用中經常接觸到的RAR和ZIP文件的壓縮/解壓數據完整性檢查也採用了該算法。


5、MD5、SHA為代表的信息摘要校驗,數據摘要算法也被稱為哈希(Hash)算法、散列算法,摘要算法用於數據量比較大的場合。它通過對所有數據提取指紋信息以實現數據籤名、數據完整性校驗等功能,由於其不可逆性,有時候會被用做敏感信息的加密,如軟體註冊授權文件的內容保護,還有經常遇到的網際網路下載大文件(例如大小到GB級別的ISO鏡像)通常會帶有MD5、SHA1等信息方便用戶檢查傳輸數據的完整性。


 CAN幀中的CRC檢驗

1、CRC域在CAN幀中的位置

 

圖1


如圖1橙色塊方框所示,一個傳統CAN幀結構中,CRC域放置在數據結束後應答檢測之前,對於CAN FD也是相同的位置,該信息對於用戶應用界面來說是不可見的,可以通過CANscope總線分析儀解碼窗口或者帶有CAN協議解碼能力的示波器從總線模擬波形上得到對應的CRC數據展示,見圖2。

 

圖2


2、CRC的在CAN幀中的生成


在經典CAN中,使用15位CRC,在硬體可使用移位和異或運算完成CRC的計算,而CAN FD規範中對幀數據長度進行了擴展,對於數據長度小於等於16位元組的CAN FD幀,採用17位CRC,對於數據長度大於16位元組的CAN FD幀採用21位CRC。CAN總線中使用的若干版本CRC生成多項式g整理如表1所示。

表1


3、CRC是如何完成校驗工作的

CAN幀基於CRC多項式的安全校驗是發送器根據發送的比特計算校驗值,並在CAN幀結構CRC欄位中提供該結果。接收器使用相同的多項式來計算總線上所見位的校驗值,將自我計算的校驗值與接收的校準值進行比較,如果匹配,則認為幀被正確接收,接收節點在ACK時隙位中發送顯性狀態,從而覆蓋發送器的隱性狀態。在不匹配的情況下,接收節點在ACK定界符之後發送錯誤幀。


目前CAN FD的控制器CRC校驗實現過程會相對複雜一點,在一個CAN總線網絡中,幀起始被檢測到後所有的節點開始使用三組多項式g15、g17和g21同步計算CRC序列,其中也包含發送節點,由於CRC的計算受CAN幀類型和DLC長度影響,直到CAN幀的控制域以及DLC確認後才選擇採用對應的CRC生成序列,確定的CRC序列會在幀結構中CRC欄位被採納用於發送或者用於接收比較。


4、有關CRC的ISO CAN FD、non-ISO CAN FD兼容性問題

當前CAN FD協議有兩個版本,為提高故障(錯誤)檢測能力,新版本特別引入了一個3位填充位計數器和一個額外的奇偶校驗位。此外,CRC計算方法也發生了變化。這些改進使最新的CAN FD協議與博世(BOSCH)開發的原始CAN FD協議不兼容。負責ISO的工作組已完成其文件,並已將其提交給DIS(國際標準草案)在進行投票程序。



為了避免誤解,CiA建議使用術語「ISO CAN FD」和「non-ISO CAN FD」。所有符合ISO 11898-2:2015的產品都應稱為「ISO CAN FD」。執行博世(BOSCH)原始CAN FD協議的產品應命名為「non-ISO CAN FD」,在這個過度階段的產品主要目的是用於前期評估和開發,將來所有產品都將符合ISO標準。


請注意,早前一些供應商提供的組件或者工具是針對non-ISO CAN FD協議的,包括目前在售的部分CAN FD產品,CiA建議僅使用ISO CAN FD產品進行設計和開發,不過你可繼續使用non-ISO CAN FD做評估和前期開發,因為協議的改變對於用戶界面是不可見,但注意的是不能同一個網絡混用non-ISO CAN FD和ISO CAN FD接口設備,這樣會造成CAN總線錯誤無法完成發送和接收,如果僅僅是發送或接收傳統的CAN幀將不會受到任何影響,幸運的是部分設備供應商提供的組件或者工具允許用戶選擇支持ISO或者non-ISO模式,這樣能很好地在過渡時期幫助你完成工作。


傳統CAN以及目前CAN FD採取的校驗機制,保證傳輸過程中遭受破壞的幀數據幾乎不會被接收以及應答成功,能有效防止物理層傳輸錯誤,讓用戶界面不需要額外關注幀傳輸數據的正確性。



 如有任何疑問,可以:

 添加小Z微信號:zlgmcu-888

 撥打ZLG立功科技·致遠電子官方技術熱線:400-888-4005.

相關焦點

  • 解讀CRC的校驗原理
    為了防止錯誤所帶來的影響,在數據的接收端必須進行差錯校驗。雖然差錯校驗也可以完全由硬體來承擔,但由於單片機和PC都具有很強的軟體編程能力,這就為實施軟體的差錯校驗提供了前提條件,而軟體的差錯校驗有經濟實用並且不增加硬體開銷的優點。   1 CRC法的原理   傳統的差錯檢驗法有:奇偶校驗法,校驗和法,行列冗餘校驗法等。
  • CRC循環冗餘校驗的原理與算法及FPGA實現
    CRC基本原理  在串行數據流的最有效的檢錯方案是CRC(Cyclic Redundancy check)循環冗餘檢驗,CRC循環冗餘校驗最根本的原理就是將原始數據除以某個固定的數,然後所得的餘數就是CRC校驗碼,根據校驗碼位數的不同常用的CRC循環冗餘校驗算法有:CRC8、CRC12、CCITT
  • 循環冗餘校驗CRC是什麼?它如何提高民機信號傳輸的完整性?
    相關數據收發設備,需遵循同一 「總線協議」,才能實現正常通信。例如針對 A429 總線,ARINC(航空無線電通信公司) 發布了三份總線規範文件。02 總線傳輸信號的完整性根據飛機系統的安全性評估過程,如果某些信號的錯誤或異常,對飛機安全有重要影響,那麼我們對這些信號通常有非常高的完整性要求。
  • CRC校驗原理及其實現
    例如原始數據為:0001 0011,數據中1的個數(或各位相加)為3,所以奇校驗位為0。這種校驗方法很簡單,但這種校驗方法有很大的誤碼率。假設由於傳輸過程中的幹擾,接收端接收到的數據是0010 0011,通過奇校驗運算,得到奇校驗位的值為0,雖然校驗通過,但是數據已經發生了錯誤。
  • 通信原理中CRC校驗原理與過程
    什麼是CRC校驗?CRC即循環冗餘校驗碼:是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息欄位和校驗欄位的長度可以任意選定。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。CRC校驗原理:其根本思想就是先在要發送的幀後面附加一個數(這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位序列的,下同),生成一個新幀發送給接收端。
  • 幾種常見的校驗算法
    Modbus、MAVlink、USB等通信協議也有校驗信息。 在自定義數據存儲時,有經驗的工程師都會添加一定校驗信息。 你平時通信,或者數據存儲時,你有用到校驗信息嗎?下面就介紹幾種常見的校驗算法。
  • 基於FPGA的循環冗餘校驗碼設計
    為了最大限度地保證通信過程中信息的完整性,需 要採用信道編碼技術對可能發生的差錯進行有效地控制,而 循環冗餘校驗碼就是其中一個最有效的編碼技術。本文引用地址:http://www.eepw.com.cn/article/201703/344838.htm1  循環冗餘校驗碼基本思想循環冗餘校驗碼是一種校錯能力很強且使用非常廣泛 的差錯檢驗方法。
  • 單片機通信中的CRC算法原理及程序設計
    1 引 言本文引用地址:http://www.eepw.com.cn/article/172509.htm  在單片機的近、遠程通信中,為了確保傳輸報文(數據和信息)的正確性和加快報文的傳輸速度,採用CRC算法。在信道上傳輸的每一個字節,通過CRC算法校驗,從參數表中獲得其校驗值,使報文無差錯地快速傳輸。
  • 用C語言實現CRC校驗計算
    循環冗餘位校驗(CycliclRedundncyCheck英文簡稱CRC)是目前運用非常廣泛的一種數據容錯方法,在數據傳輸,數據壓縮等領域運用極其廣泛。CRC的實現分為硬體和軟體兩種方法,其中軟體實現的關鍵在於計算速度。如果單純模擬硬體實現方法,則計算速度較慢。筆者在編制一個數據通訊軟體中,運用了一種新穎的查表法計算CRC,速度很快,效果極佳。
  • CRC校驗源碼學習
    圖 1,圖 2 說明了 CRC 校驗中 CRC 值是如何計算出來的,體現的多項式正是 X16+X12+X5+1。 Serial Data 即是需要校驗的數據。從把數據移位開始計算,將數據位(從最低的數據位開始)逐位移入反向耦合移位寄存器(這個名詞我也不懂,覺得蠻酷的,就這樣寫了,嘿)。當所有數據位都這樣操作後,計算結束。此時,16 位移位寄存器中的內容就是 CRC 碼。
  • can總線基本概念
    CAN 是Controller Area Network 的縮寫(以下稱為CAN),是ISO國際標準化的串行通信協議。在汽車產業中,出於對安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統被開發了出來。
  • CRC校驗---之avrbootloader
    在主函數裡是這樣調用的crc=strXMODEM.CRC16hi<<8;crc+=strXMODEM.CRC16lo;crc為主機發送過來的校驗碼//AVR的16位整數是低位在先,XMODEM的CRC16是高位在先if(calcrc(&strXMODEM.Xdata[0],128)!
  • CRC的校驗原理及其軟體實現
    arc= (str[i] ^ crc) & 0x00ff;  crc=_irol_(crc,8);                   //整形循環右移指令  crc= crc & 0x00ff;  crc= crc ^ crctable[arc];  }  return(crc);  }
  • can canfd 兼容_canfd與can兼容嗎 - CSDN
    CAN-FD與CAN2.0 A/B節點共同組網要求總結參考文檔    引言    上篇公眾號文章(點擊文章標題即可直接跳轉閱讀)--《細說汽車電子通信總線之CAN 2.0 總線協議詳解》詳細介紹了目前汽車電子ECU中使用最為廣泛的傳統CAN 2.0 A/B總線協議。
  • CAN FD協議實用指南
    3) 更好的可靠性CAN FD使用改進的循環冗餘校驗(CRC)和"受保護的填充位計數器",從而降低了未被檢測到的錯誤的風險。這在汽車和工業自動化等安全攸關的應用中至關重要。因此,有必要找到一種方法,只在數據傳輸過程中提高速度。解決方案:CAN FD框架CAN FD協議引入了經過調整的CAN數據幀,以實現額外的數據字節和靈活的比特率。
  • USB 3.0中的CRC校驗原理及實現
    摘要:循環冗餘(CRC)是USB協議中重要的錯誤檢測措施。在此分析了USB 3.0數據包的基奉格式以及USB 3.0協議中CRC校驗的特點,針對USB 3.0數據高速傳輸的要求,設計實現並行發送端CRC產生和接收端CRC校驗電路,功能仿真結果證明了其有效性。
  • 關於CRC8/CRC16/CRC32,你要找的全部在這
    循環冗餘校驗(英語:Cyclic redundancy check,通稱「CRC」)是一種根據網絡數據包或電腦文件等數據產生簡短固定位數校驗碼的一種散列函數,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。一句話:CRC是將數據計算出散列的方式,一般用於校驗數據的完整性。
  • 開啟CAN通信學習(二)——基於Kvaser的CAN通信案例
    1 案例硬體介紹Kvaser是瑞典的一家專門提供CAN和LIN總線分析儀及數據記錄儀的公司,在CAN產品開發領域已經有近30年的經驗,本案例選擇的CAN通信硬體型號是Kvaser Leaf Light v2,產品如下圖所示:【公眾號dotNet工控上位機:thinger_swj
  • modbus的CRC校驗程序
    //功能: modbus代碼校驗//參數: 字符型指針或數組首地址,數據個數//返回值: crc數據//備註:在收到和發送的過程中都需要調用。char uchCRCLo=0xFF; /* 低CRC 字節初始化 */ unsigned long uIndex; /* CRC循環中的索引 */ while(usDataLen--) { uIndex=uchCRCHi^*puchMsg++; uchCRCHi=uchCRCLo^auchCRCHi[uIndex]; uchCRCLo=auchCRCLo
  • CRC算法及工作原理
    在諸多檢錯手段中,CRC是最著名的一種。CRC的全稱是循環冗餘校驗,其特點是:檢錯能力極強,開銷小,易於用編碼器及檢測電路實現。從其檢錯能力來看,它所不能發現的錯誤的機率僅為0.0047%以下。從性能上和開銷上考慮,均遠遠優於奇偶校驗及算術和校驗等方式。