一、Modbus CRC-16
Modbus CRC-16是屬於邏輯運算的一種,假設現在有一個串資料是0x01, 0x25,想要運算,其算法如下:
- 步驟一:先將一個16bit(在C中可以使用unsigned short)暫存器設為0xFFFF,這邊先命名該暫存器為crc。
- 步驟二:將crc與資料的1個byte做XOR運算,這邊的舉例第一次就是與0x01做XOR,第二次就是0x25
- 步驟三:接下來,將crc向右位移1個bit,並且最高有效位元(MSB)填0。
- 步驟四:在位移前的crc,若其最低有效位元(LSB)是1,則將位移後的CRC對0xA001做運算。
- 接下來繼續重複步驟3~4,直到做滿8次。
- 步驟五:接下來將Data的下一個byte拿來做步驟二到四,直到全部資料皆運算完為止。
我們來看個圖例吧!下圖是將1個byte的資料:0x01拿來運算的過程。