在經典CAN中,使用15位CRC,在硬件可使用移位和異或運算完成CRC的計算,而CAN FD規(guī)范中對幀數據長度進行了擴展,對于數據長度小于等于16字節(jié)的CAN FD幀,采用17位CRC,對于數據長度大于16字節(jié)的CAN FD幀采用21位CRC。CAN總線中使用的若干版本CRC生成多項式g整理如表1所示。
表1
3、CRC是如何完成校驗工作的
CAN幀基于CRC多項式的安全校驗是發(fā)送器根據發(fā)送的比特計算校驗值,并在CAN幀結構CRC字段中提供該結果。接收器使用相同的多項式來計算總線上所見位的校驗值,將自我計算的校驗值與接收的校準值進行比較,如果匹配,則認為幀被正確接收,接收節(jié)點在ACK時隙位中發(fā)送顯性狀態(tài),從而覆蓋發(fā)送器的隱性狀態(tài)。在不匹配的情況下,接收節(jié)點在ACK定界符之后發(fā)送錯誤幀。
目前CAN FD的控制器CRC校驗實現過程會相對復雜一點,在一個CAN總線網絡中,幀起始被檢測到后所有的節(jié)點開始使用三組多項式g15、g17和g21同步計算CRC序列,其中也包含發(fā)送節(jié)點,由于CRC的計算受CAN幀類型和DLC長度影響,直到CAN幀的控制域以及DLC確認后才選擇采用對應的CRC生成序列,確定的CRC序列會在幀結構中CRC字段被采納用于發(fā)送或者用于接收比較。
4、有關CRC的ISO CAN FD、non-ISO CAN FD兼容性問題
當前CAN FD協(xié)議有兩個版本,為提高故障(錯誤)檢測能力,新版本特別引入了一個3位填充位計數器和一個額外的奇偶校驗位。此外,CRC計算方法也發(fā)生了變化。這些改進使最新的CAN FD協(xié)議與博世(BOSCH)開發(fā)的原始CAN FD協(xié)議不兼容。負責ISO的工作組已完成其文件,并已將其提交給DIS(國際標準草案)在進行投票程序。
為了避免誤解,CiA建議使用術語“ISO CAN FD”和“non-ISO CAN FD”。所有符合ISO 11898-2:2015的產品都應稱為“ISO CAN FD”。執(zhí)行博世(BOSCH)原始CAN FD協(xié)議的產品應命名為“non-ISO CAN FD”,在這個過度階段的產品主要目的是用于前期評估和開發(fā),將來所有產品都將符合ISO標準。
請注意,早前一些供應商提供的組件或者工具是針對non-ISO CAN FD協(xié)議的,包括目前在售的部分CAN FD產品,CiA建議僅使用ISO CAN FD產品進行設計和開發(fā),不過你可繼續(xù)使用non-ISO CAN FD做評估和前期開發(fā),因為協(xié)議的改變對于用戶界面是不可見,但注意的是不能同一個網絡混用non-ISO CAN FD和ISO CAN FD接口設備,這樣會造成CAN總線錯誤無法完成發(fā)送和接收,如果僅僅是發(fā)送或接收傳統(tǒng)的CAN幀將不會受到任何影響,幸運的是部分設備供應商提供的組件或者工具允許用戶選擇支持ISO或者non-ISO模式,這樣能很好地在過渡時期幫助你完成工作。
總結
傳統(tǒng)CAN以及目前CAN FD采取的校驗機制,保證傳輸過程中遭受破壞的幀數據幾乎不會被接收以及應答成功,能有效防止物理層傳輸錯誤,讓用戶界面不需要額外關注幀傳輸數據的正確性。