3.2 非破坏性仲裁:ID小者先行


文档摘要

3.2 非破坏性仲裁:ID小者先行 本节摘要:多主总线的命门是冲突。本节讲CAN的回答——逐位非破坏性仲裁:冲突在比特层面被化解,胜者无损继续,败者自动退避重试。本节推演一次完整的仲裁过程,并给出标识符优先级规划的工程原则,这是报文设计与最坏延迟分析的根基。 当两个节点同时开口,会发生什么?以太网经典方案的答案是退避重试:双方都停,各自随机等待再试,冲突的帧全部作废。CAN不能接受这个答案——制动报文不可能"随缘重发"。它的方案是:让冲突在比特层面分出胜负,且不损毁任何一帧,败者的帧完整保留、稍后重发。这套机制的名字就叫非破坏性逐位仲裁。 当两节点同时开口 机制建立在第2章的物理事实上:总线是线与的,任一节点输出显性(零),总线就是显性;显性会压过隐性(一)。

3.2 非破坏性仲裁:ID小者先行

本节摘要:多主总线的命门是冲突。本节讲CAN的回答——逐位非破坏性仲裁:冲突在比特层面被化解,胜者无损继续,败者自动退避重试。本节推演一次完整的仲裁过程,并给出标识符优先级规划的工程原则,这是报文设计与最坏延迟分析的根基。

当两个节点同时开口,会发生什么?以太网经典方案的答案是退避重试:双方都停,各自随机等待再试,冲突的帧全部作废。CAN不能接受这个答案——制动报文不可能"随缘重发"。它的方案是:让冲突在比特层面分出胜负,且不损毁任何一帧,败者的帧完整保留、稍后重发。这套机制的名字就叫非破坏性逐位仲裁。

当两节点同时开口

机制建立在第2章的物理事实上:总线是线与的,任一节点输出显性(零),总线就是显性;显性会压过隐性(一)。仲裁期间,每个发送节点一边输出一边回读总线:如果自己发的是隐性、回读却是显性,说明有更高优先级的报文在场,立即退出发送,转为接收。标识符从最高位开始逐位比较,先出现显性者胜出——数值上等价于:标识符小者胜。

用一个具体推演看清全过程。设节点甲要发标识符 0x15A(二进制 001 0101 1010),节点乙要发 0x123(二进制 001 0010 0011),两者第几位都不让,同时开始发送。

位序 甲发送 乙发送 总线呈现 结果
双方继续
双方继续
双方继续
双方继续
甲发一读零,退出
六起 继续发送 乙的帧 乙独占总线直至发完

甲在第五位退出时,它刚发出去的四个半比特并不构成废帧——仲裁不是错误,甲只是安静地转成接收,等乙发完、帧间空间过去,再自动重发自己的报文。整个过程没有错误帧、没有重传开销(对胜者而言一帧未损),延迟只等于败者报文剩余部分的发送时间。这就是"非破坏性"三个字的含义。

图3-2 逐位仲裁:显性压过隐性的时刻

图3-2 逐位仲裁:显性压过隐性的时刻

优先级设计的工程含义

仲裁机制直接把标识符变成了优先级编号,工程上的推论有三条。

第一,标识符分配就是带宽分配。最坏情况下,高优先级报文的发送延迟只受"比它优先级更高的报文排队"影响。设一条报文发送时间为 t,周期为 T,那么它的最坏等待时间近似等于所有更高优先级报文在 T 内的发送时间总和。这个公式是控制周期设计的起点:如果刹车请求的最坏延迟算出来超过执行器允许值,要么提高它的优先级(减小标识符数值),要么减少更高层的报文。

第二,优先级要留给周期敏感信号。新手常见的错误是把大量低频状态报文配上极小的标识符,等真正的高频闭环信号上线时没有优先级空间可分。成熟的做法是按功能域分段规划:安全相关闭环信号占据标识符头部区间,状态与显示类居中,诊断与后台流量垫尾。

第三,同值标识符是灾难。两个节点以相同标识符发送不同数据,仲裁期内双方全程打平,一起发到数据场时逐位冲突、各自检测到位错误、各自发错误帧、各自重试——再冲突,进入无限相互干扰,最终双双走向总线离线。通信矩阵管理里"标识符唯一性检查"是铁律,第7章的功能安全一节还会回到这个话题。

还有一个容易被追问的细节:仲裁只发生在标识符段吗?是的,而且必须如此。仲裁场之后双方标识符一致,进入数据场后若内容不同,冲突无法在"无损"前提下裁决——CAN的选择是让位错误机制接管:检测到发送位与总线不符的节点主动报错重发。这就是为什么通信矩阵要求同标识符报文内容也必须一致,只靠标识符唯一还不够。

最坏延迟怎么算

仲裁机制的数学副产品,是延迟可以预先计算。对一条报文,它的最坏响应时间近似等于:自身发送时间,加上所有更高优先级报文在一个周期内的发送时间总和,再加上探测与同步的少量开销。举例:某制动请求报文发送时间零点三毫秒、周期十毫秒;总线上比它优先级高的报文合计每周期占用两毫秒;则它的最坏响应约两毫秒半——只要执行器允许时限大于此值,设计成立。整套计算的前提全部来自本章:发送时间按3.1的帧长算,干扰集合按本节的优先级定。

这套算法有两个工程提醒。其一,干扰集合要按最坏场景枚举:诊断报文、网络管理报文这些"偶发成员"必须计入,漏掉它们是最坏延迟失真的头号原因。其二,算出的最坏值用于承诺,均值只能用于观察——拿仿真平均值去向执行器团队担保时限,是评审会上最容易被抓到的把柄。5.3节的负载率是这道题的粗筛版:负载率超标,最坏延迟必然不可控;负载率健康,仍要做这道精算,两者不可互相替代。

优先级规划的实战分档

给出一个可直接套用的分档参考。标识符空间按功能分四档:第一档给安全闭环信号——制动、转向、稳定控制的请求与反馈,要求最坏延迟最小;第二档给动力与底盘的常规控制信号,周期毫秒到十毫秒级;第三档给状态与显示类信号,周期几十毫秒,晚一点无碍;第四档给诊断、刷写、后台数据,属于"有空再发"。四档之间留出空隙,为后续车型增加信号预留插入空间——矩阵是活文档,一次把标识符用满是典型的短视设计。

跨档的实战原则还有一条:宁可用低优先级加高频率,也不用高优先级保普通信号——把普通信号塞进第一档,会整体抬高安全信号的最坏延迟。优先级是全总线共享的稀缺资源,分配纪律要像预算一样管理。

还有一个容易被忽略的细节:仲裁与位填充是联动的。仲裁期内双方都在发送标识符,填充规则照常生效——标识符超过五位同值同样要插入填充位,因此仲裁的实际长度会随标识符内容浮动。规划标识符时避开大段同值图案,既能减少填充开销,也让仲裁时序更平稳。这类细节数量不多,却是"读过协议"与"用过协议"的分水岭。

本节要点回顾

  • 非破坏性仲裁分胜负不损帧:败者转接收、稍后自动重发,胜者全程无感,延迟可计算。
  • 裁决规则一句话:标识符从高位逐位比较,显性压过隐性,数值小者胜。
  • 标识符分配等于带宽分配:最坏延迟由更高优先级报文的排队决定,安全信号要占头部区间。
  • 同标识符冲突是自我毁灭:仲裁场打平的双方会在数据场互撕直至离线,标识符唯一性是矩阵管理的铁律。

帧与仲裁的静态与动态规则都齐了。下一节换上工具:抓一段真实报文,把十六进制还原成转速、温度这些看得懂的物理量。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U