CRC-8-CCITT
SMBus PEC
/* https://en.wikipedia.org/wiki/System_Management_Bus#Packet_Error_Checking */
/* https://blog.csdn.net/zjli321/article/details/52998468 */
/* https://crccalc.com/ */
#include <stdio.h>
// cal_table_high_first
unsigned char crc8(unsigned char value)
{
unsigned char i, crc;
crc = value;
/* 数据往左移了8位,需要计算8次 */
for (i=8; i>0; --i)
{
if (crc & 0x80) /* 判断最高位是否为1 */
{
/* 最高位为1,不需要异或,往左移一位,然后与0x07异或 */
/* 0x07(多项式:x^8+x^3+x^2+1,100000111),最高位不需要异或,直接去掉 */
crc = (crc << 1) ^ 0x07; }
else
{
/* 最高位为0时,不需要异或,整体数据往左移一位 */
crc = (crc << 1);
}
}
return crc;
}
unsigned int crc8_checksum(unsigned int value)
{
unsigned char d = 0x00, result = 0x00;
for (int i = sizeof(value); i > 0; --i)
{
d = value >> (8 * (i-1));
result = crc8(result ^ d);
}
return result;
}
int main(void) {
printf("Hello World\n");
printf("%X\n", crc8(0xB1));
printf("%X\n", crc8(crc8(0xB1) ^ 0x6A));
printf("%X\n", crc8(crc8(crc8(0xB1) ^ 0x6A) ^ 0x03));
printf("\n");
printf("%02X\n", crc8_checksum(0xB16A03));
printf("\n");
printf("%02X\n", crc8(0xB0));
printf("%02X\n", crc8(crc8(0xB0) ^ 0x6A));
printf("%02X\n", crc8(crc8(crc8(0xB0) ^ 0x6A) ^ 0x30));
printf("%02X\n", crc8(crc8(crc8(crc8(0xB0) ^ 0x6A) ^ 0x30) ^ 0x20));
printf("\n");
printf("%02X\n", crc8_checksum(0xB06A3020));
printf("\n");
return 0;
}
https://en.wikipedia.org/wiki/Cyclic_redundancy_check
https://crccalc.com/
https://blog.csdn.net/zjli321/article/details/52998468
http://lms.ctl.cyut.edu.tw/sys/read_attach.php?id=1871500
http://wiki.csie.ncku.edu.tw/embedded/I2C
<<: 服务组织控制(Service Organization Control :SOC)
>>: Gulp 直接将 watch, browserSync 加入任务函式中 DAY98
攻击者会使用Trojan horses(木马程序)来诱骗使用者在电脑上执行预先设计的操作, 一旦木马...
我今天来讲一下我用STM32F030这颗MCU标准库开发的环境吧,首先要懂的建环境,需要复制那些标准...
终於来到最後一天了!!还记得这个教程的名字为「30 天 Java 从陌生到更陌生」吗? 为什麽会「更...
Cookie HTTP cookie 简称为Cookie,当使用者浏览网页时,web server会...
https://github.com/PacktPublishing/Machine-Learni...