吃绿色菜 发表于 2024-4-24 10:16:11

STM32G0B1的CAN自动重发

请教一下CAN的自动重发间隔是多长时间?

假设can上有一个节点,由于收不到ack一直在自动重发,那么现在如果有一个节点要上来就是从busoff恢复,他需要检测128次连续11个隐性位。如果有一个节点一直在自动重发,那么新的节点还能上来了吗?

如果一个节点从busoff上来的话,要经过128个连续11个隐性位,如果就算最快的一个位是1us,那么总时间也要1ms。如果一个节点一直在自动重发,1ms能发2-3帧左右。所以这个时候busoff那个节点没办法上来。这个情况怎么处理?

butterflyspring 发表于 2024-4-24 14:23:46

自动重发那个节点可以设错误计数器,到了一定数量就busoff。

一个节点从 bus off 到重新上线,是要等待129给IDLE 状态,这是协议规定的,没法减少。


吃绿色菜 发表于 2024-4-24 17:14:07

butterflyspring 发表于 2024-4-24 14:23
自动重发那个节点可以设错误计数器,到了一定数量就busoff。

一个节点从 bus off 到重新上线,是要等待129 ...

感谢支持!

如有只有一个节点的话,他的错误就是ack错误,这个应该是不会进入busoff,这个是标准规定的,所以才会一直发报文

!(data/attachment/forum/202404/24/171257a9vmr40bz1yc9dwq.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "ca6889186cb10ef8337d474cbe3f020.jpg")

按11898描述

!(data/attachment/forum/202404/24/171351ez5366wzzn7tqn66.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "8baf6e95b9bcd7fde48550e8bb3e995.png")计数器在这两种特例的情况下 是不会累加的

butterflyspring 发表于 2024-4-25 10:00:32

吃绿色菜 发表于 2024-4-24 17:14
感谢支持!

如有只有一个节点的话,他的错误就是ack错误,这个应该是不会进入busoff,这个是标准规 ...

有个 timeout counter, 用这个试试
页: [1]
查看完整版本: STM32G0B1的CAN自动重发