CAN总线仲裁机制回顾

1〉因为CAN 的模块在发送数据的时候,也同时会对总线进行监听,假设两个节点同时发送数据,A节点发送的前3 个位是100,B节点为101,在前2 个位发送完毕的时候,两个节点都会认为自己发送成功,但是当发送到第三个位的时候,B 节点会失去仲裁,因为0 的优先级高于1的优先级,B 节点监听到总线上不是1,因此失去仲裁,等待重新发送数据。CAN 节点在仲裁丢失后,根据CAN2.0B 协议规范,会自动重发。如果高优先级的报文一直占用着总线,则其他低优先级的报文将无法获得仲裁,但是会尝试重新发送。只有当高优先级报文不再占用总线时,低优先级的报文才可能发送成功。否则低优先级报文会出现“假饿死”状态。(例如在CAN_ NM 的逻辑环网络管理中,利用T_ max,T_ type 等定时器来防止报文假饿死)

2〉如果在某一时刻CAN总线上的多个单元同时向总线发送数据,优先级高的继续发送,那么怎样保证优先级低的数据不丢失呢? 如果整个can 网络都是自己管理的,那么可以通过应用层协议来调整每个节点的发送时间,无论优先级高低,如果发送时间过长(长短程度这个根据您的项目来把握) 则暂停发送,让其他节点发送。或者每个节点都在某个特定时间触发发送,以便每个节点都有机会。总的意思就是一定要做时间管理。如果项目不是像你说的优先级高占用带宽那么严重,就采用(非实时信息空闲时候) 轮询+ (实时信息) 主动发送的方式管理网络。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值