CRC-8-CCITT

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

Day16:今天来聊一下如何使用njRAT RAT Trojan控制Windows电脑攻防

攻击者会使用Trojan horses(木马程序)来诱骗使用者在电脑上执行预先设计的操作, 一旦木马...

[DAY 8] _用标准库开发,以STM32F030为例

我今天来讲一下我用STM32F030这颗MCU标准库开发的环境吧,首先要懂的建环境,需要复制那些标准...

[Day30] 30 天 Java 从陌生到更陌生

终於来到最後一天了!!还记得这个教程的名字为「30 天 Java 从陌生到更陌生」吗? 为什麽会「更...

19. Cookie/ LocalStorage/ SessionStorage 的差别

Cookie HTTP cookie 简称为Cookie,当使用者浏览网页时,web server会...

Day13 线性回归实作

https://github.com/PacktPublishing/Machine-Learni...