CRC校验——以SHT4xA温湿度传感器为例

news2024/11/19 5:26:22

CRC校验——以SHT4xA温湿度传感器为例

  • 一、简介
  • 二、计算方法
    • (一)步骤
    • (二)参考代码(C语言)
    • (三)检验:CRC(0xBEEF)= 0x92
  • 三、参考

一、简介

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

在这里插入图片描述

二、计算方法

具体参考CRC校验——以SHT30温湿度传感器为例(内附SHT30的驱动代码)

(一)步骤

(1) 预置一个值为0xFFFF的16位寄存器,此寄存器为CRC寄存器
(2) 把第一个8位二进制数与16位的CRC寄存器相异或,异或的结果存在CRC寄存器中
(3) CRC寄存器的内容左移一位,用0填补最低位,并检测移出位是0还是1
(4) 如果移出位是0,则重复步骤3,如果移出位是1,则与多项式进行异或
(5) 重复步骤3、4,直到左移8位,这样整个8位数据都进行了处理
(6) 重复步骤2~5,进行下一个字节的处理
(7)最后得到的CRC寄存器的内容即为CRC校验码

在这里插入图片描述

(二)参考代码(C语言)

#include <stdio.h>
typedef unsigned char uint8_t;

/*
 * crc8校验函数,data为要校验的数据,len为要校验的数据的字节数
 */
uint8_t crc8(const uint8_t *data, int len)
{
     const uint8_t POLYNOMIAL = 0x31;
     uint8_t crc = 0xFF;
     int i, j;
   
	 for (i=0; i<len; ++i) 
	 {
     	crc ^= *data++;
 
     	for (j=0; j<8; ++j) 
		{
        	crc = ( crc & 0x80 )? (crc << 1) ^ POLYNOMIAL: (crc << 1);
       	}
  	 }
	
	 return crc;
}

int main(int argc, const char *argv[])
{
	unsigned char data1[2] = {0x61, 0x04};
	unsigned char data2[2] = {0xBE, 0xEF};
	printf("0x%02X\n", crc8(data1, 2));
	printf("0x%02X\n", crc8(data2, 2));

	return 0;
}
/* 输出结果
linux@linux-VirtualBox:~$ ./a.out 
0xE4
0x92
*/


(三)检验:CRC(0xBEEF)= 0x92

多项式:0x31 ( x 8 x^8 x8+ x 5 x^5 x5+ x 4 x^4 x4+1)换成二进制为 9‘b1_0011_0001
检验:CRC(0xBEEF)= 0x92

1.第一个8位数据0xBE:CRC寄存器值为8'hFF,两者异或

          1   0   1   1     1   1  1   0
XOR     1   1   1   1     1   1  1   1
————————————————————
          0   1   0   0     0   0  0   1

1)左移一位,移出0,CRC值变成

           1   0   0   0     0   0   1   0

2)左移一位,移出1,与多项式0x31异或

           0   0   0   0     0   1   0   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            0   0   1   1     0   1   0   1

3)左移一位,移出0,CRC值变成

            0   1   1   0     1   0   1   0

4)左移一位,移出0,CRC值变成

            1   1   0   1     0   1   0   0

5)左移一位,移出1,与多项式0x31异或

           1   0   1   0     1   0   0   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            1   0   0   1     1   0   0   1

6)左移一位,移出1,与多项式0x31异或

           0   0   1   1     0   0   1   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            0   0   0   0     0   0   1   1

7)左移一位,移出0,CRC值变成

            0   0   0   0     0   1   1   0

8)左移一位,移出0,CRC值变成

            0   0   0   0     1   1   0   0


2.第二个8位数据0xEF,CRC寄存器值0x0C,两者异或:
          1   1   1   0    1   1   1   1
XOR    0   0   0   0    1   1   0   0
————————————————————
          1   1   1   0     0   0   1   1

1)左移一位,移出1,与多项式0x31异或

           1   1   0   0     0   1   1   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            1   1   1   1     0   1   1   1

2)左移一位,移出1,与多项式0x31异或

           1   1   1   0     1   1   1   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            1   1   0   1     1   1   1   1

3)左移一位,移出1,与多项式0x31异或

           1   0   1   1     1   1   1   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            1   0   0   0     1   1   1   1

4)左移一位,移出1,与多项式0x31异或

           0   0   0   1     1   1   1   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            0   0   1   0     1   1   1   1

5)左移一位,移出0,CRC值变成

            0   1   0   1     1   1   1   0

6)左移一位,移出0,CRC值变成

            1   0   1   1    1   1   0   0

7)左移一位,移出1,与多项式0x31异或

           0   1   1   1     1   0   0   0
XOR       0   0   1   1     0   0   0   1
————————————————————
            0   1   0   0     1   0   0   1

8)左移一位,移出0,CRC值变成

            1   0   0   1     0   0   1   0

(3)可以看出CRC值最终变成了0x92.

三、参考

模2除法(CRC)循环冗余校验码在线计算器
CRC校验——以SHT30温湿度传感器为例(内附SHT30的驱动代码)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计JAVA疫情防控下高校教职工健康信息管理系统

[附源码]计算机毕业设计JAVA疫情防控下高校教职工健康信息管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

试剂盒和示踪剂—艾美捷FLIVO探针活体凋亡检测分析

针对FLIVO(FLuorescence in vIVO)探针的研究&#xff0c;本篇文章推荐艾美捷ImmunoChemistry&#xff08;ICT&#xff09;FLIVO探针系列的&#xff1a;天冬氨酸蛋白酶(Caspases)活性检测试剂盒&#xff0c;及 FLIVO示踪剂&#xff0c;主要用于细胞凋亡活体检测&#xff0c;助力…

大型分布式系统下缓存应该怎么玩,才能用得高效

大家好&#xff0c;今天我们来聊一聊在大型分布式系统中&#xff0c;缓存应该怎么玩&#xff0c;从毕业到现在也有三年多了&#xff0c;大大小小的系统也经历了几十个&#xff0c;今天就从各个角度来讨论一下&#xff0c;我们的不同的缓存应该怎么玩&#xff0c;才能用的高效。…

N皇后问题(分支限界法)

问题描述&#xff1a; 在 n * n 格的棋盘上放置彼此不受攻击的 n 个皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题等价于在 n * n 的棋盘上放置 n 个皇后&#xff0c;任何 2个皇后不放在同一行或同一列或同一斜线上…

Ansys Speos | 新型计算方法:使用 GPU 提升计算速率

前言 Speos 在2022R2版本中正式推出 GPU 计算功能&#xff0c;相比于 CPU 计算&#xff0c;相同HPC32配置&#xff0c;高性能显卡在仿真计算中将会更显计算优势&#xff0c;在仿真数据量大、材料属性复杂、光源种类多的条件下&#xff0c;Speos 视觉模拟会消耗更多仿真计算时间…

ARM异常处理(1):异常类型、优先级分组和异常向量表

本系列文章将以Cortex-M3内核为例&#xff0c;对ARM的异常(exception)进行分析。 文章目录1 异常类型2 优先级3 向量表1 异常类型 Cortex-M3提供了一个功能丰富的异常体系结构&#xff0c;它支持很多系统异常和外部中断。异常编号1-15表示系统异常&#xff0c;16及以上表示外部…

0116 查找算法 Day5

剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该…

2022快手电商短视频运营白皮书:Q2对比Q1GMV总值增长率达12%

1、2022快手电商短视频运营白皮书&#xff1a;Q2对比Q1GMV总值增长率达12%新榜讯 12月2日&#xff0c;快手电商发布《2022快手电商短视频运营白皮书》。白皮书数据显示&#xff0c;2022年4-6月&#xff0c;随着平台商家对短视频渠道的认知提升&#xff0c;挂车短视频生产量不断…

【人脸识别】MVFace:一个优于CosFace和ArcFace的人脸识别损失

论文题目&#xff1a;《Mis-classifified Vector Guided Softmax Loss for Face Recognition》 论文地址&#xff1a;https://arxiv.org/pdf/1912.00833v1.pdf 代码地址&#xff1a;http://www.cbsr.ia.ac.cn/users/xiaobowang/ 1.背景 迄今为止&#xff0c;提出了几种基于mar…

Hashing to elliptic curve算法改进

1. 引言 前序博客有&#xff1a; ECDSA VS Schnorr signature VS BLS signature 第3节“BLS签名” 私钥pkpkpk&#xff0c;对应的公钥为PpkGPpk\times GPpkG。待签名消息mmm。 BLS signature的签名流程为&#xff1a; 1&#xff09;通过H(m)H(m)H(m)将消息mmm映射为point o…

计算机毕业论文java毕业设计选题源代码javaweb企业门户网站官网

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《javaweb企业门户网站》该项目采用技术&#xff1a;jsp servlet mysqljdbccssjsjQuery等相关技术&#xff0c;项目含有源码、文档、配套开发软件…

[hadoop全分布部署]安装Hadoop、配置Hadoop 配置文件②

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;安装Hadoop、配置Hadoop 配置文件…

手把手教你SSM整合(包教包会)

SSM整合 步骤&#xff08;七步&#xff09; 新建maven项目&#xff0c;添加依赖 可以选择根据模版创建maven项目 <dependencies><!--spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc&…

OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)

使用OpenCV调整图像大小。要调整图像的大小&#xff0c;可以根据每个轴&#xff08;高度和宽度&#xff09;进行缩放&#xff0c;考虑指定的缩放因素&#xff0c;或者只需设置所需的高度和宽度。 调整图像大小时&#xff1a; 如果想在调整后的图像中保持相同的宽高比&#xf…

Redis 7.0 源码调试环境搭建与源码导读技巧

天下武功&#xff0c;无坚不摧&#xff0c;唯快不破&#xff01;我的名字叫 Redis&#xff0c;全称是 Remote Dictionary Server。 有人说&#xff0c;组 CP&#xff0c;除了要了解她外&#xff0c;还要给机会让她了解你。 那么&#xff0c;作为开发工程师的你&#xff0c;是否…

物联网设备带你进入物联网时代,轻松实现数据互联互通

物联网这一词&#xff0c;我们在生活和工作中时常会接触到&#xff0c;但如果要问大家什么是物联网设备&#xff1f;物联网设备有哪些&#xff1f;很多人应该没有一个详细的概念。那么什么是物联网设备呢&#xff1f;物联网设备是指能够连接无线网络&#xff0c;并具有数据传输…

【电力系统经济调度】多元宇宙算法求解电力系统多目标优化问题(Matlab实现)【电气期刊论文复现与算例创新】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

计算机网络复习笔记——运输层

计算机网络复习笔记——运输层 概述 在计算机网络中进行通信的真正实体是位于通信两端主机中的进程 运输层的不同端口对应不同的进程 根据应用需求不同&#xff0c;运输层为应用层提供两种不同的运输协议&#xff0c;面向连接的TCP和无连接的UDP协议 运输层端口号、复用与…

CSS-盒子模型-内容,边框,内边距,外边距,(合并,塌陷情况)

CSS-盒子模型-内容&#xff0c;边框&#xff0c;内边距&#xff0c;外边距&#xff0c;(合并&#xff0c;塌陷情况) 目标&#xff1a;能够认识 盒子模型的组成 &#xff0c;****能够掌握盒子模型 边框、内边距、外边距 的****设置方法 学习路径&#xff1a; 1. 盒子模型的介绍 …

RK3588开发板的性能参数、功耗及功能特点|飞凌动态讲解

内容来源&#xff1a;飞凌嵌入式官网-www.forlinx.com2021年12月16日第六届瑞芯微开发者大会上&#xff0c;瑞芯微发布了全新一代旗舰处理器——RK3588。 相较前一代产品&#xff0c;RK3588的性能提高20%~30%&#xff01;同时采用新一代8nm制程工艺&#xff0c;也将大幅度降低功…