更新:我甚至无法使用此计算器来重现本数据表图8和图9中所示的SMBus PEC !
所以我将arduino与Melexis温度传感器连接起来,并且它没有问题 - 除了我似乎无法使CRC检查工作.
我已经成功完成了读取操作(尽管我的软件忽略了数据包错误代码)但我已经尝试了很多CRC8的实现来检查PEC字节无济于事.我现在使用的代码块来自OneWire:
uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len)
{
uint8_t crc = 0;
while (len--) {
uint8_t inbyte = *addr++;
for (uint8_t i = 8; i; i--) {
uint8_t mix = (crc ^ inbyte) & 0x01;
crc >>= 1;
if (mix) crc ^= 0x8C;
inbyte >>= 1;
}
}
return crc;
}
Run Code Online (Sandbox Code Playgroud)
我重写它只考虑一个字节:
int smbCRC(int message) {
uint8_t crc = 0;
uint8_t inbyte = message & 0xFF;
for (uint8_t i = …Run Code Online (Sandbox Code Playgroud)