CAN總線通信的CRC校驗方法

時間:2019-07-10

  數據校驗是爲保證數據的完整性進行的一種驗證操作。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橙色块方框所示,一个传统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所示。
    

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采取的校验机制,保证传输过程中遭受破坏的帧数据几乎不会被接收以及应答成功,能有效防止物理层传输错误,让用户界面不需要额外关注帧传输数据的正确性。

上一篇:PLC的編程方法與應用指令的比較
下一篇:如何降低開關電源電路EMI

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技術資料