sledd 发表于 2011-10-15 11:54:28

请教 如何在rt_thread中使用STM32内置的硬件的CRC计算模块

正在用rt_thread做以太网通讯,通讯数据需要用到32位CRC校验,查到STM32中有内置的硬件的CRC计算模块,可不知在rt_thread如何使用,找不到CRC_CR 、CRC_DR在哪定义,如没有定义,要使用的话该在哪定义?请各位前辈指点一二。

aozima 发表于 2011-10-15 11:58:10

SVN中的STM32F107/207的以太网驱动已经打开了硬件校验,可以直接关闭LWIP的校验.

如果不使用内置的以太网MAC.则自己用硬件CRC取代LWIP的校验函数.

sledd 发表于 2011-10-15 13:44:51

多谢aozima指点,不过我用的是STM32F103,应该如何处理?

aozima 发表于 2011-10-15 14:34:38

去看STM32的参考手册,硬件用法与RT-Thread无关,原来怎么用现在一样用.
如果有多个线程可能会同时使用CRC计算单元,则还需要做资源互斥.
如果是使用DM9000AEP或是AX88796等硬件MAC,则可以使能其硬件checksum.

如果网络全速收发,使用硬件checksum在STM32上面有10%左右的性能提升.

sledd 发表于 2011-10-15 14:54:17

非常感谢,我再看看参考手册,刚开始用STM32,惭愧。./emotion/em119.gif

sledd 发表于 2011-10-15 16:24:30

貌似把CRC->DR错写为CRC_DR了,试一下是否正常计算。

wangpeng_521 发表于 2013-1-2 15:42:36

aozima 发表于 2011-10-15 11:58 static/image/common/back.gif
SVN中的STM32F107/207的以太网驱动已经打开了硬件校验,可以直接关闭LWIP的校验.

如果不使用内置的以太网MA ...

RTT 1.1.0stm32f20xMDKLWIP DP83848 当打开#define CHECKSUM_BY_HARDWARE宏时,ping不通,抓包如下


当关闭#define CHECKSUM_BY_HARDWARE宏,可以ping通了。
查阅网络资料有的人的情况和我相反,他打开硬件校验宏就会出问题。请问版主,这会是原因啊?

aozima 发表于 2013-1-2 16:00:26

RT-Thread 1.1.0 正式版本发布

wangpeng_521 发表于 2013-1-2 15:42 static/image/common/back.gif
RTT 1.1.0stm32f20xMDKLWIP DP83848 当打开#define CHECKSUM_BY_HARDWARE宏时,ping不通,抓包如下 ...

可以对比一下107和20x,40x的网络驱动,看里面ICMP的校验清掉了没有。
硬件校验要求校验值位置必须为0,而LWIP的ICMP的校验是没有开关的,所以需要人工清掉。
页: [1]
查看完整版本: 请教 如何在rt_thread中使用STM32内置的硬件的CRC计算模块