1.2 CAN的定义、标准家族与分层定位


文档摘要

1.2 CAN的定义、标准家族与分层定位 本节摘要:上一节解释了为什么需要总线,本节把"CAN是什么"钉死在三个坐标上:定义边界(它管什么、不管什么)、标准家族(ISO 11898各部分与行业规范各管哪段)、分层定位(它在OSI模型里占哪层、越界管了哪些事)。这三个坐标是后续所有章节的引用基准。 CAN是一种支持分布式实时控制的多主串行通信协议。这个定义里有几个词值得逐个较真:"多主"意味着任何节点都可以主动发起发送,不存在被轮询的主从关系;"串行"意味着比特按时间顺序在一对线上流动;"分布式实时控制"点明了它的主场——控制闭环里的信号传递,而不是文件传输。定义同样重要的是"不管什么":CAN不规定标识符的含义、不规定信号编码方式、不提供传输确认之上的重传语义,这些都留给上层协议。

1.2 CAN的定义、标准家族与分层定位

本节摘要:上一节解释了为什么需要总线,本节把"CAN是什么"钉死在三个坐标上:定义边界(它管什么、不管什么)、标准家族(ISO 11898各部分与行业规范各管哪段)、分层定位(它在OSI模型里占哪层、越界管了哪些事)。这三个坐标是后续所有章节的引用基准。

CAN是一种支持分布式实时控制的多主串行通信协议。这个定义里有几个词值得逐个较真:"多主"意味着任何节点都可以主动发起发送,不存在被轮询的主从关系;"串行"意味着比特按时间顺序在一对线上流动;"分布式实时控制"点明了它的主场——控制闭环里的信号传递,而不是文件传输。定义同样重要的是"不管什么":CAN不规定标识符的含义、不规定信号编码方式、不提供传输确认之上的重传语义,这些都留给上层协议。理解边界,才不会在排错时把应用层的问题错怪到总线头上。

先把定义钉牢

多主特性是CAN最容易被低估的设计。在主从式总线(比如许多工业现场总线)里,通信时机由主机统一调度,从机只被动应答;而CAN总线上每个节点都握有完整的发送权,任何时刻任何节点都可以因为一个新事件发起发送。这带来极高的响应性——车门一开,车门控制单元立刻广播状态,无需等待轮询——但也带来冲突问题:多个节点同时开口怎么办?CAN的回答是硬件逐位仲裁,这个机制是第3章的主角,这里只需要记住:多主是CAN一切调度设计的起点。

广播特性同样关键。CAN没有节点地址,报文发出去全总线都能听到,接收与否由节点自己的滤波器决定。这带来两个工程后果:其一,新增一个订阅者不需要改动发送方,天然适合功能叠加;其二,报文没有加密和访问控制,谁都能听——这是第7章网络安全问题的源头。

分层定位:一层半的协议

把CAN放进OSI七层模型,会发现它占的是"一层半":物理层全部,加上数据链路层的下半部分。具体来说,ISO 11898-2定义的电气特性(电平、时序、收发器)对应物理层;帧结构、介质访问、错误检测与界定对应数据链路层的介质访问控制子层;而逻辑链路控制层面的服务——流量控制、会话管理、可靠传输——CAN一概不管,需要上层协议自己补。

这种"薄"是刻意的。对比以太网协议栈:物理层、链路层、网络层、传输层层层设防,TCP用三次握手和重传换来可靠传输,代价是最坏延迟无法保证。CAN反其道而行之,把协议做到最薄,让一帧报文从发起到确认的全过程都落在微秒级且可计算的范围里。控制系统的设计者因此能够给出硬性承诺:这条报文最迟多少毫秒必达。车载控制需要的正是这种确定性,而非吞吐量。

分层定位还有一个实用价值:排错时可以逐层切割。总线上的错误帧、位填充错误属于链路层,查终端电阻与干扰;报文能上总线但数据不对属于应用层,查DBC定义与节点软件;诊断仪连不上但周期报文正常,问题多半出在诊断协议层。把层的边界背下来,排查就有了顺序。

标准家族速查

CAN的标准体系分成国际标准与行业规范两级,工程中最常用到的是下面这些。

标准编号 名称与覆盖范围 工程中的典型用途
ISO 11898-1 数据链路层与物理层信令:帧格式、仲裁、错误处理 控制器芯片设计、协议一致性分析
ISO 11898-2 高速介质访问单元:五百千到每秒一兆比特的差分电气特性 收发器选型、物理层排障
ISO 11898-3 低速容错CAN:最高每秒一百二十五千比特,总线断路可维持通信 车身舒适系统、单线容错场景
ISO 11898-4 时间触发通信:在事件触发基础上加时间同步调度 对时序确定性要求极高的场合
ISO 11898-6 带选择性唤醒的物理层:部分联网与低功耗唤醒 休眠电流合规、远程唤醒
SAE J1939 基于CAN的商用车高层协议:地址、参数组、诊断 卡车与大巴的整车通信
ISO 15765-2 诊断报文在CAN上的传输层拆分包规范 UDS诊断的底层承载

读标准的次序有讲究。入门阶段不必通读ISO 11898-1的 formal 描述,那更像法律条文;更有效的路径是先用教程与工具建立直觉(本教程第3章、第4章的任务),再回头对照标准验证细节。行业规范则相反,J1939这类文档直接规定了报文含义,开发时必须逐条对照,没有直觉发挥的空间。

一个常见的误区值得提醒:CAN 2.0A与CAN 2.0B不是两代CAN,而是同一代里十一位标识符与二十九位标识符两种帧格式;如今它们已被并入ISO 11898-1。工程口语里说"A版""B版",指的是标识符长度,不是协议年代。类似地,"CAN FD不是CAN的替代品"这句话的准确含义是:FD帧在同一根总线上与经典帧共存,仲裁段完全沿用经典时序。

工程上如何定位一帧报文的归属层

用一个真实片段练习分层思维。诊断仪屏幕上出现这样的报文:7E8 06 41 00 BE 3E B8 11 AA。按层拆:7E8是十一位标识符的十六进制表示,属于OBD-II诊断的地址约定,是应用层之上的规范;数据场第一个字节06是ISO 15765-2传输层的单帧长度指示,说明后面跟着六个有效字节;41 00是诊断服务与子功能,属于应用层。一帧十六进制,三个协议层各认领一段——这就是"薄内核、厚生态"的具体样子:CAN本体只保证7E8后面的字节完整送达,其余全靠上层约定。

把定义用在排障对话里

定义与边界的价值,最终在跨团队对话中兑现。三个高频场景:其一,软件同事报告"报文时有时无"——如果丢的是诊断响应,先查会话超时与拆包流控,这是应用层的事;如果丢的是周期报文且伴随错误帧计数上升,才轮到物理层排查。层的定位决定谁接到问题单,定位错了,问题会在两个团队之间空转一周。其二,系统同事询问"这条报文能不能再快点"——答案取决于要改的是仲裁段优先级(改标识符,动全局评审)还是发送频率(改矩阵,动负载预算),两个旋钮牵动完全不同的变更链路。其三,测试同事发现"两节点同发必坏"——这不是器件缺陷,是同标识符冲突的教科书症状,回到通信矩阵查唯一性即可。

把这三类对话整理进自己的工具箱,你会发现"CAN是什么"的定义不再抽象:多主,意味着任何节点都可能是问题源;串行,意味着速率与负载永远耦合;分布式实时,意味着时限承诺必须落在每个设计决定上。定义即约束,约束即检查清单——这是本节希望留下的思维方式。

本节要点回顾

  • 定义的边界与内核同等重要:多主、串行、分布式实时控制是内核;不管标识符含义、不管可靠传输是边界。
  • 分层占位是"一层半":物理层与介质访问控制是本体,逻辑链路控制以上的服务留给上层协议补齐。
  • 薄协议换来确定性:不做重传与会话管理,让最坏延迟可计算,这是车载控制系统选它的根本原因。
  • 标准家族两级分工:ISO 11898系列管机制,J1939、ISO 15765-2等行业规范管含义,排错时先定层再翻文档。
  • CAN 2.0A与B是标识符长度之分,不是年代之分;FD与经典CAN是共存关系,不是替换关系。

定义与坐标已经就位。下一节把镜头拉远,看看整张车载总线版图:CAN的邻居们各自强在哪、弱在哪,一份信号清单该如何在它们之间分配。


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