前言:这段时间因为项目需要接触了CAN通讯相关的知识点,和朋友讨论过程中对方问到怎么判断ID的优先级,印象中CAN通讯是有个通讯优先级仲裁机制的,但是一时间答不上来,查阅网友相关文章做了个总结,欢迎支持不对的地方。。。
进入内容前须知:低电平(0)为显性电平,高电平(1)为隐性电平
(1)通讯优先级/总线仲裁
我们在学习CAN通讯的时候,CAN通讯报文格式中有包含"仲裁段"这一说法,通讯优先级(或总线仲裁)依赖于该段各个位的电平组成(即通过比较电位获取优先级)。
在CAN总线空闲态,最先开始发送消息的单元获得发送权。多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁,连续输出显性电平(0)最多的单元可继续发送。所以,帧ID值越小,优先级越高。
仲裁的过程如下图所示:
1、数据帧和遥控帧的优先级
具有相同 ID 的数据帧和遥控帧在总线上竞争时,数据帧优先级高,因为数据帧仲裁段的最后一位(RTR)为显性位具有优先权,可继续发送。
数据帧和遥控帧的仲裁过程如下图所示:
2、标准格式和扩展格式的优先级
标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位优先级更高,优先发送。
标准格式和扩展格式的仲裁过程如下图所示:
3.总结
优先级排序如下:
相同ID: 数据帧>遥控帧,标准格式>扩展格式
(本文仅作为个人笔记分享,无抄袭意图,可参考以下原文)
CAN通讯怎么决定ID的优先级 - 搜索结果 - 知乎CAN总线如何保证优先级低的数据有机会发送出去? - 知乎 (zhihu.com)