CRC計算

各位大大,小弟最近添購了一個新東西,結果收到的時候,看到裡面的通訊協定,需要計算CRC,可小弟我這幾天算了半天,就是沒結果,想請教各位大大正確的算法及步驟,感謝!

資料傳送端所發出的訊號格式:
Request:Slave address + Function + Address + Word + CRC
1. Slave address — 01﹙hex﹚,1 byte
2. Function — 03﹙hex﹚,1 byte
3. Address — 0000 ~ FFFF﹙hex﹚,2 byte
4. Word — ﹙hex﹚,2 byte,Read count

CRC相關計算步驟如下:
1. 預置16 位元暫存器為十六進位FFFF(即全為1)。稱此為CRC 之暫存器。
2. 把第一個8 位元組與16 位CRC 暫存器之較低位元組做互斥或運算,把結果置於CRC 暫存器內。
3. 把CRC 暫存器的內容右移一位元(朝低位),用0 填補最高位元,再檢查最低位元。
4. 如果最低位元為0:重複第3 步驟 (再次位移)
    如果最低位元為1:CRC 暫存器與多項式A001 (1010 0000 0000 0001) 做互斥或運算。
5. 重複步驟3 和4,直到右移8 次為止,將全部8 位數位元組全部進行處理。
6. 重複步驟2 到步驟5,進行下一個8 位數位元組的處理。
7. 最後得到的CRC 暫存器即為CRC 碼。

目前小弟僅從資料中看到測試的字串:FF0301000010(5024)→5024應該是CRC吧?

廠商說,出場時前兩位就是FF了。

想請大大們教小弟如何正確地算出CRC

P.S. 因為我用資料中的資傳丟出去,結果設備就是沒東西傳回來。

感謝~~

你可以到NI的網頁中的"技術支援服務"中的"範例程式碼"找你目前使用設備或儀器的範例(只要不是非常冷門應該都有).你沒說你使用的Labview的版本無法給你程式.下面程式碼圖片也是從網站下載是EUROTHRM 24xx的CRC(寫)範例

 

http://www.ni.com/code/zht/

![](upload://lVxMFKuCPxQZ4qoC3IfCtJwE468.jpeg)

以下和DonWang舉的範例結果一樣

http://zone.ni.com/devzone/cda/epd/p/id/1488

![](upload://45JrctBVvUJnZsriYrnfYO5pCfZ.jpeg)