jianhong_wu 发表于 2015-12-15 02:52:39

CAN通信时因总线竞争而仲裁失败那一个节点的数据还会被硬件自动重发吗?已解答。

★坚鸿-深圳:
问一个CAN通讯的问题:
A和B两个节点同时只执行一次往CAN总线发送一帧数据的命令,CAN的仲裁机构经过仲裁后,发现A的优先级比B的优先级高,所以A获得总线权,B竞争失败让路,现在我想问的问题是,当A把数据发送完成后,B的数据会不会紧跟着其后得到传输和发送?也就是两个节点同时发送一次数据时,最后结果是只能发送一个节点的数据,还是最后能发送两个节点的数据(只是被总线控制器错开了时间而已)?

国军-甘肃:
先发A,B是否能发送看它下次进行总裁总线时是否成功,也看其cAN控制器是否设为自动重发或仅发送一次的设置情况而定。

★坚鸿-深圳:
你做的项目,一般是设置为自动重发还是仅发送一次?

国军-甘肃:
一般是设为自动重复,采集传感器数据而已,快慢几个ms而已。只发送一次的设置一般用于多次发送或延迟发送会时限要求严格产生安全问题的情況,如弹出气囊等情况等。

★坚鸿-深圳:
如果是设为自动重发,上面的问题中,A和B都能发送,如果设为仅发送一次,上面的问题中,只有A被发送,B没有被发送,是这样子吗?

国军-甘肃:
是这样的,只发送一次时,B无法再次有机会被发送。周立功和牛跃昕写的cAN总线方面的书,例子较丰富,讲的也很有趣,鸿哥可以参考下。

★坚鸿-深圳:
刚才查看了一下资料,虽然CAN具备了自动重发的功能,但是还是有必要在程序软件上做好时间的管理,根据项目的特点,避开大数据同时在两个结点以上同时发送的情况,否则低优先级的节点会由于一直得不到发送权而出现“假饿死”的情况,这时低优先级的节点数据是会有可能丢失的。而且我发现我的STM32F407程序库里在初始化的时候默认把CAN设置为自动重发的功能。

页: [1]
查看完整版本: CAN通信时因总线竞争而仲裁失败那一个节点的数据还会被硬件自动重发吗?已解答。