GD32VF103之CRC

2023-05-16

在GD32VF103内部有一个CRC(循环冗余校验计算单元),使用它可以对数据的完整性和正确性进行校验,比如固件的完整性和正确性校验、通信数据的校验等。它使用固定的32位多项式:0x4C11DB7: X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1 。该 32 位 CRC 多项式与以太网 CRC 计算多项式相同。

CRC的寄存器只有三个:数据寄存器、独立数据寄存器、控制寄存器

数据寄存器接收输入数据并保存计算结果。

独立数据寄存器是一个独立的数据存储单元,可以作为临时寄存器使用。

控制寄存器用来复位数据寄存器。

第一次使用这个CRC发现它计算的结果跟网上在线计算器算出的结果不一样,目前知道的原因有两个,一是数据反转,有些算法会将输入数据和输出数据反转,而芯片内部的CRC没有这些操作。CRC-32有多种计算方法,这个CRC-32/MPEG-2与本芯片的CRC计算方法是一样的,都没有反转。

 

二是计算顺序,网上的工具对输入的数据计算方向都是从左到右,而芯片内部的计算方向是从32位的高位字节到低位字节(大端)。

所以要得到相同的结果,其中一方必须做出调整。这里以hello world为例来看看计算结果,代码中初始化它是这样的

 

在程序中存储是这样的

计算crc的时候一次放入32位,从高位开始算,最后的计算序列是llehow o\0dlr

将这个序列放到网络计算器计算的确可以得到相同的结果,这里有个字符串结束标志\0,ASCII没有办法输入,所以使用hex方式。

 

对于低于32位的数据,芯片的CRC会在高位补0,而网络计算器计算的时候也必须补足32位。下面是计算字符’!‘得到的结果。

芯片CRC:

网络计算器:

这里不补0是不行的,目前还没有搞清楚网络计算器关于少于32位的数据是怎么计算的,补0和补1都不对。

搞清楚了芯片的CRC怎么算的,那应用起来就没问题了。以后在设计OTA升级或者数据通信的时候就可以用上了。

bilibili:科G栈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32VF103之CRC 的相关文章

  • CRC-16/MODBUS 校验位计算

    实验指令 xff1a 前23位表示 信息头 43 信息内容 24 xff0c 25位是待计算的校验位 26位是结束码 7E 01 00 00 01 10 02 00 27 00 0C 00 02 00 00 00 00 00 50 00 3
  • c语言 checksum,crc校验方法,用c语言实现源代码(CRC checksum method, using C language source code).doc...

    crc校验方法 用c语言实现源代码 CRC checksum method using C language source code crc校验方法 用c语言实现源代码 CRC checksum method using C languag
  • 硬件MSB最高位优先、LSB最低位优先的CRC计算原理详细解释和程序,正算反算成功等效,DS18B20和HTU31D传感器CRC

    wxleasyland 64 139 com 2022 7 以前写过 我学习CRC32 CRC16 CRC原理和算法的总结 xff08 与WINRAR结果一致 xff09 长篇 经过十几年又忘记了 这次碰到DS18B20进行CRC校验 xf
  • GD32VF103之GPIO最小配置

    longan nano是Sipeed xff08 矽速科技 xff09 推出的开发板 xff0c 使用兆易创新的gd32vf103cbt6芯片 xff0c 该芯片是基于芯来科技的Nuclei Bumblebee处理器的32位通用微控制器 x
  • 【科普向】谁都能看懂的CRC(循环冗余校验)原理

    CRC原理 简介 CRC基本原理 模二运算 二进制系数多项式 CRC算法 示例 CRC算法的数学描述 常用CRC版本 CRC算法的编程实现 简介 循环冗余校验 Cyclic Redundancy Check CRC 是一种根据网络数据包或计
  • CRC算法并行运算Verilog实现

    因为CRC循环冗余校验码的算法和硬件电路结构比较简单 所以CRC是一种在工程中常用的数据校验方法 尽管CRC简单 但在工程应用中还是有些问题会对工程师产生困惑 这篇文章将介绍一下CRC 希望对大家有所帮助 一 CRC算法介绍 CRC校验原理
  • CRC的基本原理详解

    CRC Cyclic Redundancy Check 被广泛用于数据通信过程中的差错检测 具有很强的 检错能力 本文详细介绍了CRC的基本原理 并且按照解释通行的查表算法的由来的思路介绍 了各种具体的实现方法 1 差错检测 数据通信中 接
  • CRC校验(二)

    CRC校验 二 参考 https blog csdn net liyuanbhu article details 7882789 https www cnblogs com esestt archive 2007 08 09 848856
  • CRC16 ISO 13239 实施

    我正在尝试在 C 中实现 Crc16 我已经尝试了许多不同的实现 但大多数都给了我不同的值 这是我已经使用过的一些代码 private static int POLYNOMIAL 0x8408 private static int PRES
  • 什么时候使用 CRC 比 MD5/SHA1 更合适?

    何时适合使用 CRC 进行错误检测 而不是使用 MD5 或 SHA1 等更现代的哈希函数 前者更容易在嵌入式硬件上实现吗 CRC 可以很好地检测数据中可能出现的随机错误 例如网络干扰 线路噪声 失真等 CRC 的计算复杂度远低于 MD5 或
  • 如何使用Python计算这个CRC?

    我需要使用 Python 计算此 CRC 以便与 Aurora ABB 太阳能逆变器进行通信 这是文件 http www drhack it images PDF AuroraCommunicationProtocol 4 2 pdf在最后
  • 在Python中计算modbus的CRC16

    首先 抱歉 我是初学者 我在 modbus 上得到以下字节序列 01 04 08 00 00 00 09 00 00 00 00f8 0c 该字节序列上粗体的 CRC 是正确的 但是 要检查 创建 CRC 我必须遵循设备规范 其中规定 错误
  • 带有 PL/pgSQL 的 CRC32 函数

    如何计算 32 位循环冗余校验 CRC 32 作为 PostgreSQL 中的函数 方法与MySQL http dev mysql com doc refman 5 7 en mathematical functions html func
  • 验证 CRC 校验和是否为零

    我过去接触过 CRC 16 校验和 习惯于通过对我要验证的文件重新计算 CRC 16 校验和 加上 CRC 16 本身的 2 个字节来验证它 如果结果为零 则文件完整性有效 否则无效 这可以非常有效地编码 就像下面的伪 C 一样 if re
  • 如何在python3中计算ANSI CRC16多项式(0x8005)?

    我尝试使用此代码计算 ANSI CRC16 多项式 0x8005 import crcmod crc16 crcmod mkCrcFun 0x8005 0xffff True 但我收到此错误消息 ValueError 多项式的次数必须为 8
  • Python 中的 CRC16

    如何在Python中计算CRC16 在 Perl 中我会写这样的东西 use Digest CRC crc16 result crc16 str 我如何在Python中做同样的事情 这里有一个计算CRC16的库http pypi pytho
  • 如何在 C#.net 中计算文件的 CRC 值?

    我想在 C net 中使用 32 位算法计算文件的 CRC 值 Algorithm is straightforward rewritten from c class Crc32 public static uint CountCrc by
  • 计算 HDLC 帧的 FCS(CRC)

    我有以下框架 7e 01 00 00 01 00 18 ef 00 00 00 b5 20 c1 05 10 02 71 2e 1a c2 05 10 01 71 00 6e 87 02 00 01 42 71 2e 1a 01 96 27
  • CRC-CCITT (0xFFFF) 功能?

    有人可以帮我用 Delphi 实现 CRC CCITT 0xFFFF 已经获得 Java 版本 但对如何将其移植到 Delphi 感到困惑 public static int CRC16CCITT byte bytes int crc 0x
  • 棘手的 CRC 算法

    我正在尝试找到适用于以下结果的 crc 字节串由 2 个字节组成 即 0xCE1E crc 是单个字节 即 0x03 byte crc CE1E 03 CE20 45 CE22 6F 0000 C0 0001 D4 FFFF 95 有人可以

随机推荐