找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

50

积分

0

好友

3

主题
发表于 2023-9-25 18:30:10 | 查看: 280| 回复: 2 IP:广东省珠海市 电信

问题1. GD32的FDCAN IP,是不是没有自动重发的机制?就是仲裁失败自动重发,ST的FDCAN有自动重发。
问题2.假设CAN总线上负载率为100% 也就是说其他节点在狂发数据,比如其他节点发送的ID是100,那么现在GD32配置成禁止自动重发(假设问题1答案为 有自动重发机制)。发一帧报文,ID=7ff,那么应该会仲裁失败。发不出去。请问 此时GD32是不是:进入发送中断,然后读某个寄存器位得知,是仲裁失败。  但是我经过查看CANFD寄存器,并没有仲裁丢失的相关位,只有什么位填充错误,CRC错误等报告。这岂不是一大遗憾?
发表于 2023-9-25 18:31:59 IP:广东省珠海市 电信

问题1. GD32的FDCAN IP,是不是没有自动重发的机制?就是仲裁失败自动重发,ST的FDCAN有自动重发。

根据我搜索到的信息,GD32的FDCAN IP是有自动重发的机制的,但是可以通过配置是否使用该功能。在can_parameter_struct结构体中,有一个auto_retrans成员,用于配置是否使用自动重传功能(ENABLE / DISABLE),使用自动重传功能时,会一直发送报文直到成功为止,否则只会发送一次报文。这个功能和ST的FDCAN是类似的

问题2. 假设CAN总线上负载率为100% 也就是说其他节点在狂发数据,比如其他节点发送的ID是100,那么现在GD32配置成禁止自动重发(假设问题1答案为 有自动重发机制)。发一帧报文,ID=7ff,那么应该会仲裁失败。发不出去。请问 此时GD32是不是:进入发送中断,然后读某个寄存器位得知,是仲裁失败。 但是我经过查看CANFD寄存器,并没有仲裁丢失的相关位,只有什么位填充错误,CRC错误等报告。这岂不是一大遗憾?

我没有找到关于GD32的FDCAN IP如何检测仲裁失败的具体信息,但是我猜测可能有以下几种方法:

我不确定这些方法是否有效,您可以自己尝试一下。如果您有更好的方法,欢迎分享。

发表于 2023-9-25 18:32:43 IP:广东省珠海市 电信
  1. 根据GD32F4xx/F1x0/F3xx/F0x0的数据手册中关于FDCAN IP的描述,FDCAN支持自动重发机制,可以针对仲裁失败的情况进行自动重发,重发次数可通过配置进行设定。具体可参考数据手册中的相关章节以及参考代码。
  2. 如果GD32配置成禁止自动重发,当发送一帧报文,ID为7ff,其他节点在狂发数据时,如果该帧与其他节点发送的ID冲突,则会导致仲裁失败。此时,GD32会进入CAN发送中断,并且CAN_TXSTA寄存器的TXERR位会被置位,表示发送错误。此时需要应用程序进行相应的处理,例如重新发送数据。

关于CANFD寄存器中没有仲裁丢失的相关位,可能是因为CANFD寄存器是CAN Flexible Data Rate(CAN-FD)协议中的寄存器,与标准CAN协议略有不同。建议根据GD32F4xx/F1x0/F3xx/F0x0的数据手册中关于CAN和CAN-FD协议的描述,了解更多相关信息。

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|国产电子社区 ( 沪ICP备2023018578号-1|

苏公网安备 32011102010465号


)|网站地图

GMT+8, 2024-5-29 22:09 , Processed in 0.073062 second(s), 24 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表