先逐个学习
一、ISO 11898
ISO 11898包括(1-6)
ISO 11898-1:数据链路层(LLC+MAC)和物理编码子层(PCS)
ISO 11898-2:高速物理介质附加(PMA)子层
ISO 11898-3:低俗容错(≤125kbps)
ISO 11898-4:时间触发通讯
ISO 11898-5:低功耗模式的高速介质访问单元
ISO 11898-6:带选择性唤醒功能的高速介质访问单元(CAN FD)
1. ISO 11898-1
我参考的是ISO 11898-1(2024-05)
ISO 11898 是通信速度为 5kbps ~ 1Mbps 的 CAN 高速通信标准。规范中同时定义了:数据链路层和高速物理层。
ISO 11898-1 主要介绍了逻辑链路控制(LLC),介质访问控制(MAC),通过连接单元(AUI)指定了物理编码子层(PCS)。PSC还提供PWM编码,该编码将链接到CAN SIC XL收发器,该收发器提供PWM解码。
ISO 11898-1的内容在下图这些方面作用和影响
ISO 11898-1规定数据链路层、部分物理层的一些东西
一些名词的解析
AUI:连接单元接口
LLC:逻辑链路控制
MAC:介质访问控制
MDI:介质依赖接口
PCS:物理编码子层
DLL层分为两个子层:LLC子层(负责流量控制、恢复管理和时间戳)、MAC子层(负责数据封装、数据解封装、帧编码、位填充、解封装、序列化、反序列化、错误检测、错误信令和确认)
LLC层:
LLC层主要关注于提供网络层所需的服务,而这些服务是独立于具体的物理介质和介质访问控制机制的
LLC子层并不改变MAC帧的结构,而是在MAC子层提供的服务基础上,进行过滤和管理
LLC层不修改MAC帧内容,仅依据过滤规则决定是否向上层传递完整帧结构
也就是说,LLC层并不改变MAC帧的结构,而是通过接收过滤功能,决定是否将MAC帧数据传递给上层。所以LLC帧的结构与MAC帧相同,都是为:帧起始+仲裁段+控制段+数据段+CRC段+ACK段+帧结束
其实我写到这里,就会想,那么LLC子层把这些东西丢给我,我网络层应该怎么接收数据呢,其实担心有点多余了,我使用的是S32K144芯片,其SDK中有个CAN_Receive()函数,在中断中使用这个函数进行接收数据,他会还给你一个结构体,这个结构体里面会把LLC帧数据解析好,直接可以使用了
LLC帧:
SOF | Arbitration field | Control field | Data field | CRC field | ACK field | EOF |
帧起始 | 仲裁段 | 控制段 | 数据段 | CRC段 | ACK段 | 帧结束 |
LCC层的主要功能包括:
1. 服务提供:LLC子层为网络层提供了一系列服务,如数据传输、错误检测、流量控制等。这些服务不依赖于底层介质的特性,而是提供了一个统一的接口供上层使用。
2. 协议无关性:LLC子层的设计是为了能够支持不通的介质访问控制方法,如以太网、FDDI、令牌环等。也就是说,无论下层采用哪种介质访问控制协议,LLC子层都能提供一致的服务。
3. 错误检测与控制:LLC子层包含了错误检测机制,如循环冗余校验(CRC),用于检测数据传输中的错误。它可能还包括错误恢复机制,如重传请求,以确保数据的可靠传输。
4. 流量控制:LLC子层还允许上层选择不同的服务质量,如无确认的、面向连接的、无连接的
在CAN总线通信中,LLC子层的实现可能被简化或省略,这是以为CAN总线的通信协议已经包含类似的功能,如错误检测、仲裁和重传机制。
但是在理论模型中,LLC子层的概念仍然是理解数据链路层架构与职责的重要部分。
通过将LCC子层与MAC子层分离,可以实现介质访问控制方法的独立性,使数据链路层的设计更加模块化和灵活。
MAC层:
MAC子层位于LLC(逻辑链路控制)与PL(物理层)之间,为LLC层和PL层提供服务
如果需要发送数据,那么需要将LLC包转换成MAC包,如果需要接受数据,则需要把MAC包转换成LLC包
MAC服务:数据封装、媒介传输过程管理、接收传输过程管理、接收数据反串口化
MAC帧:
SOF | Arbitration field | Control field | Data field | CRC field | ACK field | EOF |
帧起始 | 仲裁段 | 控制段 | 数据段 | CRC段 | ACK段 | 帧结束 |
PCS层:
ISO 11898-1 中的PCS主要是通用逻辑规范,不限定具体物理介质(如双绞线、光纤等)
物理层中有PCS子层和PMA子层:
-
PCS:负责逻辑信号到物理位的编码/解码、位定时、同步。
-
PMA:负责实际电气信号的驱动与接收(如CAN收发器的电平转换)。
(1) 逻辑信号与物理信号的映射
-
显性位(Dominant Bit):
-
逻辑“0”,对应物理总线的差分电压(例如,高速CAN中为
CAN_H - CAN_L = 2V
)。 -
显性位具有总线仲裁优先级(即逻辑“0”覆盖“1”)。
-
-
隐性位(Recessive Bit):
-
逻辑“1”,对应总线无有效差分电压(
CAN_H ≈ CAN_L ≈ 2.5V
)。
-
(2) 位定时与同步
-
位时间(Bit Time)划分:
-
每个位的持续时间被划分为 4个段:
-
同步段(Sync Segment):用于节点硬同步(如帧起始SOF)。
-
传播段(Propagation Segment):补偿信号在总线上的物理传输延迟。
-
相位缓冲段1(Phase Buffer Segment 1):容忍节点间的时钟误差。
-
相位缓冲段2(Phase Buffer Segment 2):动态调整同步。
-
-
-
同步机制:
-
硬同步:在帧起始(SOF)的下降沿强制同步。
-
重同步:在后续位的边沿动态调整位时间,以补偿时钟漂移。
-
(3) 位填充(Bit Stuffing)
-
规则:每连续出现 5个相同逻辑位 后,插入一个 相反位(如
00000
后插入1
)。 -
目的:确保足够的信号跳变,维持接收方时钟同步。
(4) 错误检测与信号监控
-
总线状态监控:检测显性/隐性电平是否符合规范。
-
错误信号生成:若物理层检测到电平异常(如总线短路或断路),触发错误帧。
2. ISO 11898-2
ISO 11898-2主要规定了高速CAN网络的物理层电气特性、总线拓扑、信号传输规范等核心内容
3. ISO 11898-3
ISO 11898-3主要是讲述了低俗容错CAN的一些内容,传输速度≤125kbps。定义低速、高容错CAN网络的物理层规范,支持复杂环境下的可靠通信
4. ISO 11898-4
它扩展了经典CAN协议,引入了基于时间触发的确定性通信机制,适用于对实时性和时序要求极高的系统(如线控系统、航空航天控制)
特性 | TTCAN(ISO 11898-4) | 经典CAN(ISO 11898-2/3) |
---|---|---|
通信机制 | 时间触发(确定性) | 事件触发(基于优先级仲裁) |
实时性 | 严格保证传输时间 | 非确定性(高优先级消息优先) |
总线利用率 | 需预留时间槽,可能降低利用率 | 动态仲裁,利用率更高 |
复杂度 | 需全局时钟同步和调度表配置 | 简单,即插即用 |
适用场景 | 硬实时系统(如线控系统) | 软实时系统(如车身控制、状态监测) |
需要有支持TTCAN的控制器才能用这个协议
5. ISO 11898-5
特性 | ISO 11898-5 | ISO 11898-2 |
---|---|---|
低功耗模式 | 支持睡眠/唤醒机制 | 无 |
EMC性能 | 优化边沿控制和信号对称性 | 基础设计 |
故障保护 | 增强短路和反接保护 | 有限保护 |
典型应用 | 低功耗、高可靠性场景(如新能源车) | 传统高速控制(发动机、ABS) |
需要选择支持ISO 11898-5的低功耗模式的收发器
6. ISO 11898-6
ISO 11898-6 是经典高速 CAN(ISO 11898-2)的扩展,旨在通过 可变数据速率(CAN FD) 提升网络带宽和效率,同时保持与传统 CAN 节点的兼容性。
支持双速率传输:仲裁段使用经典速率(≤1M);数据段速率提升至2~5Mbps
数据长度扩展:单帧数据长度从8字节扩展至64字节
二、ISO 11519
ISO 11519包括(1-4)
ISO 11519-1:总则和定义
ISO 11519-2:低速CAN (功能整合至ISO 11898-3(低速容错CAN))
ISO 11519-3:车辆局域网VAN协议(被LIN总线取代)
ISO 11519-4:CARTP协议 (被TTCAN(ISO 11898-4)和 FlexRay(ISO17458)取代)
标准 | 核心内容 | 现状 | 现代替代标准 |
---|---|---|---|
ISO 11519-1 | 低速车载通信通用框架 | 废止,被整合 | ISO 11898系列、SAE J1939 |
ISO 11519-2 | 低速CAN物理层规范 | 功能并入ISO 11898-3 | ISO 11898-3(低速容错CAN) |
ISO 11519-3 | VAN总线(单线/双线车身控制) | 被LIN总线取代 | LIN(ISO 17987) |
ISO 11519-4 | CARTP(令牌传递容错协议) | 淘汰,被时间触发协议取代 | TTCAN(ISO 11898-4)、FlexRay |
三、ISO 14229
通用的诊断服务标准
包括:
①. 诊断和通信管理功能单元
1. 0x10(DiagnosticSessionControl)
2. 0x11(ECUReset)
3. 0x27(SecurityAccess)
4. 0x29(Authentication)
5. 0x28(CommunicationControl)
6. 0x3E(TesterPresent)
7. 0x83(AccessTimingParameter)
8. 0x84(SecuredDataTransmission)
9. 0x85(ControlDTCSetting)
10. 0x86(ResponseOnEvent)
11. 0x87(LinkControl)
②. 数据传输功能单元
1. 0x22(ReadDataByIdentifier)
2. 0x23(ReadMemoryByAddress)
3. 0x24(ReadScalingDataByIdentifier)
4. 0x2A(ReadDataByPeriodicIdentifier)
5. 0x2C(DynamicallyDefineDataIdentifier)
6. 0x2E(WriteDataByIdentifier)
7. 0x3D(WriteMemoryByAddress)
③. 已存储数据传输功能单元
1. 0x14(ClearDiagnosticInformation)
2. 0x19(ReadDTCInformation)
④. 输入输出控制功能单元
1. 0x2F(InputOutputControlByIdentifier)
⑤. 例程控制功能单元
1. 0x31(RoutineControl)
⑥. 上传下载功能单元
1. 0x34(RequestDownload)
2. 0x35(RequestUpload)
3. 0x36(TransferData)
4. 0x37(RequestTransferExit)
四、ISO 15765
1. ISO 15765-1
基本介绍,没啥东西
2. ISO 15765-2
网络层服务
针对于数据段,主要用于诊断UDS
普通CAN总线,一帧的数据,只有8个字节,如果需要发送超过8字节的书,就需要多个帧,这样就需要分割数据、重组数据,就需要连续帧的帮助
拆数据:将数据拆成连续帧的格式
组数据:根据连续帧的协议重新拼接数据
在 ISO 15765-2中,N_PDU(Network Protocol Data Unit,网络层协议数据单元)是网络层协议中用于传输诊断数据的基本单位,它是由N_PCI(Network Protocol Control Information,网络协议控制信息)和N_Data(Network Data,网络层数据)组成
网络层协议数据单元的格式 (N_PDU)
N_PDU = N_PCI + N_Data
N_PDU的类型有四种:单帧SF、首诊FF、连续帧CF、流控帧FC
感觉得单独写一篇N_PDU的
3. ISO 15765-3
主要内容为应用层定义,有关UDS(Unified Diagnostic Services,统一诊断服务)
一条诊断报文:SID + Sub-Function + Data
SID:服务标识符
Sub-Function:子功能
SID是该帧N_Data的第一个字节,Sub-Function是该帧N_Data的第二个字节
例子:02 10 01 AA AA AA AA AA
用AA填充,该帧为首帧,SID为10,即10服务,子服务为01,01为进入默认会话
响应标识符:肯定响应or否定响应
肯定响应:SID+0x40
否定响应:固定为7F
ISO 15765-3中还规定了很多时间参数,先不总结了太多了,就简单看一下各个文档是干嘛的就行
4. ISO 15765-4
物理寻址、功能寻址
0x7DF是功能寻址,所有的ECU都要回复
一个ECU有3个:一个是功能寻址请求ID,一个是物理寻址请求ID,一个是回复Response ID
诊断回复的ID都是这个Response ID
五、ISO 26262
功能安全
ASIL:安全完整性等级,根据危害事件的严重性、暴露概率、可控性将系统划分为 ASIL A/B/C/D四个等级,D等级为最高等级(如刹车系统、自动驾驶控制模块)
QM:无需特殊安全措施,按质量管理流程即可
对于软件而言,遵循安全编码规范(如MISRA C)、模块化测试与验证
六、ISO 21434
车辆网络安全(信息安全)
核心目的:为汽车电子电气系统的网络安全提供全生命周期管理框架,确保车辆在设计、生产、使用到报废的各个环节抵御网络攻击,防止数据泄露、功能失效或恶意控制。