打印

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

[复制链接]
1291|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呐咯密密|  楼主 | 2024-2-20 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在搞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 | 只看该作者
参考官方技术手册

使用特权

评论回复
5
发货后已经wi| | 2024-2-25 19:33 | 只看该作者
看看是不是硬件CRC模块的初始值与Modbus协议规定的CRC-16初始值(通常为0xFFFF)不一致导致的。。

使用特权

评论回复
6
l1uyn9b| | 2024-3-25 15:28 | 只看该作者
硬件CRC计算出来的结果与在线计算的结果不一致可能是因为硬件CRC模块使用的CRC算法与你在线计算所用的算法不同

使用特权

评论回复
7
cen9ce| | 2024-3-25 16:33 | 只看该作者
硬件CRC模块通常会使用标准的CRC算法,比如CRC-CCITT、CRC-16、CRC-32等。对于CRC-16,常见的算法包括CRC-16-CCITT、CRC-16-Modbus等

使用特权

评论回复
8
Pretext| | 2024-3-25 17:06 | 只看该作者
有可能CRC的表不同,所以导致结果不同。

使用特权

评论回复
9
鹿鼎计| | 2024-3-25 17:41 | 只看该作者
这个估计得问厂商了,内部电路是什么样得真不清楚。

使用特权

评论回复
10
y1n9an| | 2024-3-25 17:45 | 只看该作者
如果你的硬件CRC模块与在线计算的结果不一致,可以先确认你的在线计算工具使用的是哪种CRC算法,然后查阅你的硬件手册或者相关文档,确认硬件CRC模块使用的是哪种CRC算法

使用特权

评论回复
11
p0gon9y| | 2024-3-25 19:25 | 只看该作者
其实算法不一致会导致这样情况发生的,你改一下算法规则就好了

使用特权

评论回复
12
q1d0mnx| | 2024-3-26 21:39 | 只看该作者
我之前遇到过这个事情,就是同时使用硬件CRC,和软件CRC的话,计算结果不一样

使用特权

评论回复
13
问天少年| | 2024-3-28 11:45 | 只看该作者
内部的CRC不是CRC16,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

354

主题

2786

帖子

40

粉丝