CAN_BUS_CRC解碼原理介紹
2007-07-14 16:13
323 查看
1. 目的:CRC檢查是針對突發性、單一位元或奇數個位元錯誤進行檢查的動作,已表示資料傳輸的過程中是否錯誤。
2. 工作原理:CRC主要的運作方式是將資料位元D(X)除以多項式G(X)進行運算,不同的CRC檢查則有不同的多項式G(X)產生,經過除法運算後可得知餘數R(X)來進行判斷。
3. 運算規範:檢測資料是否傳輸正確可依照下列運算式進行驗證。
方法一:
資料位元D(X)在尾端+波形顯示之CRC_R(X)=檢測位元T(X)
檢測位元T(X)÷特定多項式G(X)=0顯示資料傳送正確
≠0 顯示資料傳送錯誤
方法二:
資料位元D(X)在尾端+補上G(X)次方數個0=T `(X)
檢測位元T `(X)÷特定多項式G(X)=餘數位元R(X)
餘數位元R(X)=波型上餘數位元R(X) 顯示資料傳送正確
≠波形上餘數位元R(X) 顯示資料傳送錯誤
範例:由於工作原理相同,在此統一採方法二進行檢測。下圖使用LA擷取PISO-200之CAN_BUS模組板之標準格式訊號,每1 bit為8us。首先針對訊號分析做解碼動作,其特別規範為每相同訊號連續5 bits即給予1 bit反向訊號,如同下圖A-B區段內容中因有5 bits 1而後面緊接1 bits 0,其1 bit 0之訊號不列入CRC檢查運算內,這點請注意。首先進行訊號分析,START=0 (T-A區段)、BASIC ID=11111111111(A-B區段)、RTR=0 (B-C區段)、IDE=0 RB0=0 CTRL=0001(C-D)、Data=10001000 (D-E區段)、CRC R(X)=0101100100101001 (E-F)、ACK=01 (F-G)、STOP=1111111 (G-H)。
CAN_BUS_CRC多項次固定G(X)=X15+X14+X10+X8+X7+X4+X3+1必須轉換為位元形式,從最高位元至常數位元依序排列,位元不足部份補為0,共有16 bits。
X15 X14 X13 X12 X11 X10 X9 X8 X7 X6 X5 X4 X3 X2 X 1
1 1 0 0 0 1 0 1 1 0 0 1 1 0 0 1
※ 依據上式可得G(X)=1100010110011001
※ CAN_BUS_CRC資料位元串D(X)
=CRC R(X)碼前資料位元數
=011111111111000000110001000 (T-E區段)
※ CAN_BUS_CRC 餘數碼R(X)
=CRC波形上訊號
=0101100100101001 (E-F區段)
進型運算時因G(X)為15階多項式,因此必須在D(X)尾端加上15個0,可得檢測位元T `(X)=D(X)+000000000000000
=011111111111000000110001000000000000000000
運算R(X)=010110010010100與波形上CRC_R(X)相符合,因此判段資料傳輸正確無誤。運算數據與波形上比對採前15 bits 最後1 bit 為CRC Del界定符,唯一單獨隱性位元,在此不列入比較。
2. 工作原理:CRC主要的運作方式是將資料位元D(X)除以多項式G(X)進行運算,不同的CRC檢查則有不同的多項式G(X)產生,經過除法運算後可得知餘數R(X)來進行判斷。
3. 運算規範:檢測資料是否傳輸正確可依照下列運算式進行驗證。
方法一:
資料位元D(X)在尾端+波形顯示之CRC_R(X)=檢測位元T(X)
檢測位元T(X)÷特定多項式G(X)=0顯示資料傳送正確
≠0 顯示資料傳送錯誤
方法二:
資料位元D(X)在尾端+補上G(X)次方數個0=T `(X)
檢測位元T `(X)÷特定多項式G(X)=餘數位元R(X)
餘數位元R(X)=波型上餘數位元R(X) 顯示資料傳送正確
≠波形上餘數位元R(X) 顯示資料傳送錯誤
範例:由於工作原理相同,在此統一採方法二進行檢測。下圖使用LA擷取PISO-200之CAN_BUS模組板之標準格式訊號,每1 bit為8us。首先針對訊號分析做解碼動作,其特別規範為每相同訊號連續5 bits即給予1 bit反向訊號,如同下圖A-B區段內容中因有5 bits 1而後面緊接1 bits 0,其1 bit 0之訊號不列入CRC檢查運算內,這點請注意。首先進行訊號分析,START=0 (T-A區段)、BASIC ID=11111111111(A-B區段)、RTR=0 (B-C區段)、IDE=0 RB0=0 CTRL=0001(C-D)、Data=10001000 (D-E區段)、CRC R(X)=0101100100101001 (E-F)、ACK=01 (F-G)、STOP=1111111 (G-H)。
CAN_BUS_CRC多項次固定G(X)=X15+X14+X10+X8+X7+X4+X3+1必須轉換為位元形式,從最高位元至常數位元依序排列,位元不足部份補為0,共有16 bits。
X15 X14 X13 X12 X11 X10 X9 X8 X7 X6 X5 X4 X3 X2 X 1
1 1 0 0 0 1 0 1 1 0 0 1 1 0 0 1
※ 依據上式可得G(X)=1100010110011001
※ CAN_BUS_CRC資料位元串D(X)
=CRC R(X)碼前資料位元數
=011111111111000000110001000 (T-E區段)
※ CAN_BUS_CRC 餘數碼R(X)
=CRC波形上訊號
=0101100100101001 (E-F區段)
進型運算時因G(X)為15階多項式,因此必須在D(X)尾端加上15個0,可得檢測位元T `(X)=D(X)+000000000000000
=011111111111000000110001000000000000000000
10101101101110011001110100 | |
1100010110011001 ♁ | 11111111111000000110001000000000000000000 1100010110011001 |
♁ | 1110100111100101 1100010110011001 |
♁ | 1011000111110010 1100010110011001 |
♁ | 1110100011010110 1100010110011001 |
♁ | 1011010100111101 1100010110011001 |
♁ | 1110000101001000 1100010110011001 |
♁ | 1001001101000100 1100010110011001 |
♁ | 1010110110111010 1100010110011001 |
♁ | 1101000001000110 1100010110011001 |
♁ | 1010111011111000 1100010110011001 |
♁ | 1101011011000010 1100010110011001 |
♁ | 1001101011011000 1100010110011001 |
♁ | 1011111010000010 1100010110011001 |
♁ | 1111011000110110 1100010110011001 |
♁ | 1100111010111100 1100010110011001 |
010110010010100 |
相关文章推荐
- CAN / LIN BUS
- CANBUS / Vehicle network hacking papers and projects and related foundational work
- An Introduction to the CAN Bus: How to Programmatically Control a Car
- CAN-bus收发器TJA1040T典型接法
- 有关CAN-BUS与LIN-BUS的区别 !
- 网络中收集的CAN-BUS 知识
- Linux Canbus调试笔记
- can-bus器件,控制器,收发器
- 现场总线can-bus简述丨现场总线can-bus入门
- libcanbus官方主页
- CAN-bus 使用
- A20_can_BUS 使用
- 《揭秘CAN-bus不被人关注的重要知识点》(1)
- STM32 CANBus RAM Layout
- ./i2cdetect -y 2 Error: Can't use SMBus Quick Write command on this bus
- Canbus ID filter and mask
- Can and LIN Bus Systems
- CAN (Controller Area Network) BUS
- CAN-BUS开发日记初步(1)
- How to configure and use CAN bus