呐咯密密 发表于 2024-2-20 14:28

GD32E230的硬件CRC采用的是何种算法

最近在搞modbus,需要用到CRC16,但是用硬件CRC计算出来的结果和CRC在线计算出的结果不一致,想知道内部的硬件CRC16用的是哪个算法

zeshoufx 发表于 2024-2-20 14:52

modbus用查表法怕就行了

kezirong 发表于 2024-2-21 08:34

硬件实现的CRC16算法可能因厂家和设备而异。Modbus协议中使用的CRC16是基于多项式0x8005(或者说0xA001,根据不同的表示方法而定)。这个多项式对应的CRC算法是一个特定的位操作序列,不同的硬件实现可能会采用不同的方式来计算CRC。通常,硬件实现的CRC算法是专门设计的电路,与软件实现的算法可能有所不同。

onlycook 发表于 2024-2-21 11:22

参考官方技术手册

发货后已经wi 发表于 2024-2-25 19:33

看看是不是硬件CRC模块的初始值与Modbus协议规定的CRC-16初始值(通常为0xFFFF)不一致导致的。。

l1uyn9b 发表于 2024-3-25 15:28

硬件CRC计算出来的结果与在线计算的结果不一致可能是因为硬件CRC模块使用的CRC算法与你在线计算所用的算法不同

cen9ce 发表于 2024-3-25 16:33

硬件CRC模块通常会使用标准的CRC算法,比如CRC-CCITT、CRC-16、CRC-32等。对于CRC-16,常见的算法包括CRC-16-CCITT、CRC-16-Modbus等

Pretext 发表于 2024-3-25 17:06

有可能CRC的表不同,所以导致结果不同。

鹿鼎计 发表于 2024-3-25 17:41

这个估计得问厂商了,内部电路是什么样得真不清楚。

y1n9an 发表于 2024-3-25 17:45

如果你的硬件CRC模块与在线计算的结果不一致,可以先确认你的在线计算工具使用的是哪种CRC算法,然后查阅你的硬件手册或者相关文档,确认硬件CRC模块使用的是哪种CRC算法

p0gon9y 发表于 2024-3-25 19:25

其实算法不一致会导致这样情况发生的,你改一下算法规则就好了

q1d0mnx 发表于 2024-3-26 21:39

我之前遇到过这个事情,就是同时使用硬件CRC,和软件CRC的话,计算结果不一样

问天少年 发表于 2024-3-28 11:45

内部的CRC不是CRC16,

wangtaohui 发表于 2024-7-31 22:30

它们的硬件 CRC 模块采用的是 CRC-16-CCITT 算法

小小蚂蚁举千斤 发表于 2024-7-31 23:23

硬件CRC进行开发比较快捷

tonykuai 发表于 2024-12-4 15:21

本帖最后由 tonykuai 于 2024-12-4 15:24 编辑

不知道你的问题解决了没有。我用GD32E230的硬件CRC做CRC16-MODBUS计算,结果是正确的。
硬件CRC设置:    //CRC16-MODBUS设置
    /* configure the size of polynomial */
    crc_polynomial_size_set(CRC_CTL_PS_16);   
    /* configure polynomial value */
    crc_polynomial_set(0x8005);                  
    /* configure the CRC input data reverse function */
    crc_input_data_reverse_config(CRC_INPUT_DATA_BYTE);
    crc_reverse_output_data_enable ();

使用时:
    crc_data_register_reset();
    valcrc16 = crc_block_data_calculate(UART_receiver, 2U, INPUT_FORMAT_BYTE);

注意:计算的CRC16是高位在前,低位在后。
UART_receiver:接收数据数组
2U:计算两个字节的CRC16

alvpeg 发表于 2024-12-7 07:58

硬件CRC通常采用标准的CRC算法,如CRC-CCITT、CRC-16、CRC-32等。

kmzuaz 发表于 2024-12-7 09:04

在CRC计算中,所有的运算都是基于模2除法,这意味着加法和减法操作实际上是异或(XOR)运算。

linfelix 发表于 2024-12-9 10:17

RC算法的核心是使用一个预定义的生成多项式来计算校验值。

wangdezhi 发表于 2024-12-9 13:19

硬件CRC模块的优势在于其高速度和低资源消耗,特别适合嵌入式系统和实时应用。
页: [1] 2 3 4
查看完整版本: GD32E230的硬件CRC采用的是何种算法