0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机中常用的轻量级校验算法

strongerHuang 来源:strongerHuang 2023-03-24 10:22 次阅读

UART有一个奇偶校验,CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息

在自定义数据存储时,有经验的工程师都会添加一定校验信息。

你平时通信,或者数据存储时,你有用到校验信息吗?下面就介绍几种常见的校验算法

校验和

校验和是最基本,也是嵌入式软件工程师最常用的一种校验算法,其实现方法很简单,简单到只有几行代码。

实现的方式方法很多,不同的编程语言,不同的应用有所不同,下面以C语言8位校验和为例:

uint8_t CheckSum(uint8_t *Buf, uint8_t Len)
{
  uint8_t i = 0;
  uint8_t sum = 0;
  uint8_t checksum = 0;


  for(i=0; i

异或校验

【异或校验】与【校验和】类似,对数据进行“异或”,最终得到一个“异或值”。

uint8_t CheckXOR(uint8_t *Buf, uint8_t Len)
{
  uint8_t i = 0;
  uint8_t x = 0;


  for(i=0; i
 校验和、异或校验的方式有很多种,比如有的还会传入一个参数作为异或校验的值。


当然,以上代码仅供学习参考,实际应用需结合项目情况修改代码。

CRC校验

CRC:Cyclic Redundancy Check,即循环冗余校验。

CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

CRC校验属于冗余校验中的一种,大学学计算机相关专业的同学都应该学过CRC校验(学习时可能没几个同学搞明白了)

CRC有多种变体,比如:CRC-1、 CRC-5-USB、 CRC-8、 CRC-16、 CRC-32、 CRC-64等。其中,在嵌入式领域,CRC-16用的比较多。

常见CRC参数模型:

bf686df8-c97c-11ed-bfe3-dac502259ad0.png  

比如一种在单片机上实现CRC16的源码:

uint8_t CRCTAB_H[256] = {/*表省略*/};
uint8_t CRCTAB_L[256] = {/*表省略*/};
void CRC16(uint8_t *pData, uint8_t Len, uint8_t *CRC_H, uint8_t *CRC_L)
{
  uint8_t  i;
  uint8_t  index;
  uint8_t  crc_h = 0xFF;
  uint8_t  crc_l = 0xFF;


  for(i=0; i
 CRC校验不同场景实现方式不同,网上也有很多公开的库和源码,比如:

LibCRC – C语言中的开源CRC库:

https://github.com/lammertb/libcrc

网上还有在线计算CRC校验值以及代码生成工具,感兴趣的读者可以自行了解。

MD5算法

MD5:Message-Digest Algorithm 5,即“信息-摘要算法。

从名字来看就知道它是从MD3、MD4发展而来的一种加密算法,其主要通过采集文件的信息摘要,以此进行计算并加密。

通过MD5算法进行加密,文件就可以获得一个唯一的MD5值,这个值是独一无二的,就像我们的指纹一样,因此我们就可以通过文件的MD5值来确定文件是否正确,密码进行加密后也会生成MD5值,论坛就是通过MD5值来验证用户的密码是否正确的。

bf9501ba-c97c-11ed-bfe3-dac502259ad0.png


MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。

MD5的源码在网上都能找到现成的,而且有不同编程语言(C、 C++JAVA)版本。

比如由网友talent518分享的C语言版本:

https://github.com/talent518/md5

其他更多

随着变成技术越来越发达,校验算法也越来越多,有通用的算法,也有特殊领域特定的算法。

比如我之前做过密码相关的开发,使用了由密码管理局发布的SM3密码杂凑算法

还有从MD4算法改进而来的SHA-1算法(Secure Hash Algorithm 1即安全散列算法1)。

本文就分享到这里,市面上的校验算法还有很多,如有需要可自行上网了解。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2551

    浏览量

    461057
  • 算法
    +关注

    关注

    23

    文章

    4481

    浏览量

    91314
  • crc
    crc
    +关注

    关注

    0

    文章

    195

    浏览量

    29274
  • C语言
    +关注

    关注

    180

    文章

    7551

    浏览量

    131904
  • uart
    +关注

    关注

    22

    文章

    1167

    浏览量

    100391

原文标题:单片机中常用的轻量级校验算法

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于C8051F的CRC校验算法的实现

    基于C8051F的CRC校验算法的实现 
    发表于 03-14 17:14

    轻量级的ui框架如何去制作

    原创分享:自制轻量级单片机UI框架框架元素用户接口代码开源平时常看csdn,但是从来没有自己写过。正好这几天需要用单片机做一个简易的ui界面,于是自己写了一个轻量级的ui框架。发个cs
    发表于 07-14 07:39

    如何自制轻量级单片机UI框架?

    如何自制轻量级单片机UI框架?
    发表于 10-14 06:13

    算法移植到STM32单片机中常见的问题有哪些?

    算法移植到STM32单片机中常见的问题有哪些?
    发表于 11-22 07:10

    单片机中常用的滤波算法说明

    单片机常用滤波算法 说明:假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许
    发表于 01-05 07:13

    常用校验算法有哪些?

    常用校验算法有哪些,是不是和通信规约有关。比如MODBUS一般都用CRC16(不确定是不是叫这个)。这些校验算法是之前积累下来的吗。自己也可以定义一个校验算法吧,只要发送端和接收端用
    发表于 11-03 06:50

    基于C8051F的CRC校验算法的实现

    介绍了CRC(循环冗余码校验)原理及集成混合信号片上系统单片机C8051F的新特性,推导获得以字节为单位的数据序列CRC码递推算法,利用C8051F单片机的自带CAN2.0B总线接口控
    发表于 03-14 08:39 46次下载

    IP协议校验算法程序

     IP 协议采用统一的校验算法,其计算比较简单:设校验和初值为0,然后对数据每16位求异或,结果取反,便得校验和。校验时将数据(含校验和)按
    发表于 08-13 10:55 968次阅读

    LTE系统的CRC校验算法及DSP实现

    通过对两种常用CRC校验算法的研究分析,为TD-LTE测试仪表系统选择了一种最优的CRC校验算法,并在TMS320C64xDSP中实现。将CRC校验程序在CCS3.3中运行,其结果验证
    发表于 02-23 14:58 30次下载

    单片机常用算法设计

    单片机常用算法归纳
    发表于 04-05 14:01 4次下载

    一种基于矩阵的并行CRC校验算法

    针对高速网络通信中高位宽并行数据的实时校验需求,提出了一种可单周期实现的、面向128位并行数据的循环冗余校验算法(Cyclic Redundancy Check,CRC )。该算法首先根据CRC
    发表于 10-30 16:39 3次下载
    一种基于矩阵的并行CRC<b class='flag-5'>校验算法</b>

    如何使用SMART编写CRC的校验算法程序

    本文档的主要内容详细介绍的是如何使用SMART编写CRC的校验算法程序。
    发表于 10-24 08:00 4次下载
    如何使用SMART编写CRC的<b class='flag-5'>校验算法</b>程序

    如何使用51单片机实现CRC校验算法

    介绍了CRC(循环冗余码校验)原理及集成混合信号片上系统单片机C8051F的新特性,推导获得以字节为单位的数据序列CRC码递推算法,利用C8051F单片机的自带CAN2.0B总线接口控
    发表于 12-17 16:09 17次下载
    如何使用51<b class='flag-5'>单片机</b>实现CRC<b class='flag-5'>校验算法</b>

    CRC校验算法原理及c语言实现

    CRC校验算法原理及c语言实现
    发表于 11-30 10:04 9次下载

    针对单片机开发的轻量级OTA组件

    今天为大家分享一款开源的,专为单片机开发的轻量级 OTA 组件:mOTA。
    的头像 发表于 12-26 09:36 1033次阅读