什么是OBD?
OBD代表"诊断接口"(On-Board Diagnostics),它是一种用于汽车的标准化接口系统,旨在监测和报告车辆的运行状况。主要有两个版本,OBD-I和OBD-II。
- OBD-I: 这是早期的汽车诊断系统,它的实施并不标准化,各个汽车制造商可能有不同的实现方式。OBD-I 主要用于20世纪80年代和90年代的汽车。
- OBD-II: OBD的第二代,它是在1996年后引入的,并成为几乎所有新型汽车的标准。OBD-II标准化了诊断接口和故障码的格式,使得无论是何种汽车制造商,诊断工具都能够兼容。这使得汽车技师和车主能够更容易地检测和修复车辆问题。
OBD-II接口通常位于车辆驾驶室下部,可以通过连接OBD-II扫描工具与车辆的电脑系统通信。通过这个接口,可以读取车辆的实时数据,诊断发动机和车辆系统的问题,并检索故障码,这有助于更快地定位和解决车辆故障。
OBD诊断插头图解
对应关系表
部分可能不一致
针脚 | 对应关系 | |
1针脚 | 开电门12V(可打开功率试灯),关电门0V | |
4/5针脚 | 长地线,找个正极接起来(4/5)可以点亮功率试灯。 | |
6针脚 | CAN高 通讯线 | |
7针脚 | 诊断K线,单独和变速箱,电脑板之间通讯,比电瓶电压低1V(11V左右) | |
14针脚 | CAN低 通讯线 | |
15针脚 | L线,汽车电脑板连接(电压一般是电瓶的一半,6V左右) | |
16针脚 | 30长电源,在任何情况下,必须可以点亮功率试灯 | |
3针脚 | 舒适CAN高 | |
11针脚 | 舒适CAN低 |
安全测试
OBD接口可能存在多种安全风险,我们可以使用安全测试工具对如下风险进行测试
-
物理访问:OBD接口通常用于诊断端口进行访问,该端口通常位于汽车易于访问的区域,如仪表板下方,这使攻击者很容易物理访问端口并进行恶意连接。
-
身份校验:许多OBD端口不需要身份验证,这使得攻击者不需要密码或凭证即可直接访问汽车上的计算机。
-
安全控制:OBD系统旨在促进诊断和维修工作,通常没有考虑安全性,因此它们可能存在缺少加密、访问控制和入侵检测等安全控制,从而容易受到攻击。
测试工具-OBD诊断仪
最常见的OBD工具是OBD诊断仪,车辆在维修机构开始维修汽车前,通常使用OBD诊断仪来读取车内的故障码,以帮助维修人员快速定位故障。
OBD诊断仪通常使用方法
-
找到OBD-II接口: 它通常位于车辆驾驶座下方,可以是在仪表板附近或驾驶座的脚踏板下。连接OBD诊断仪时,确保车辆处于关键位置,以便OBD-II接口处于活动状态。
-
插入OBD诊断仪: 将OBD诊断仪的插头插入车辆的OBD-II接口。确保插头正确对准并完全插入。
-
启动车辆引擎: 有些OBD诊断仪要求车辆引擎运行,以便能够读取实时数据。在连接后,启动车辆引擎。
-
选择功能: 使用OBD诊断仪的控制面板或连接的移动设备选择所需的功能。这可能包括读取实时数据、检索故障码、执行特定测试等。
-
读取实时数据: 如果您希望监视车辆的实时性能数据,选择相应的功能并查看屏幕上的数据。这可以包括引擎转速、车速、冷却液温度等信息。
-
检索故障码: 如果车辆发生故障,您可以使用诊断仪读取存储在车辆电脑系统中的故障码。这些故障码提供有关车辆问题的信息,有助于定位和解决故障。
-
执行测试和操作: 一些高级的OBD诊断仪具有执行特定测试或操作的功能。根据需要,执行相应的操作,例如发动机测试或清除故障码。
-
断开连接: 在完成使用后,安全地断开OBD诊断仪与车辆的连接。这通常涉及从OBD-II接口中拔出插头。
使用OBD访问车内ECU和通信数据
-
将CAN工具连接到OBD接口,例如,可以使用CANoe,接线方式见下图,将CAN设备的CANH和CANL通过电线连接到OBD接口的CANH和CANL上。
-
使用该工具,可以通过CAN发送“请求帧”。
-
相关ECU通过CAN发送“响应帧”。
-
读取相关通信报文,并使用DBC文件进行解码。
CAN报文解读
CAN信号物理层面的实现
电信号如何表示0和1?
- CAN高:2.5V~3.5V
- CAN低:1.5V~2.5V
通讯时当CAN_diff=0(CAN高2.5,CAN低2.5V时),表示逻辑1为隐性,使用双绞线以及两个电信号表示一个逻辑位的好处是,不会因为外界环境影响信号传输到准确性,存在影响也是同时影响,不会影响最终的电压差。两端有防止信号反射的120欧电阻,能接入CAN总线的电控单元通常由微控制器、CAN控制器、CAN收发器三部分构成。
报文举例
报文名称 | 报文ID | 发送周期 | 报文长度 | 报文起始位置 | 信号名 | 数据起始位 | 数据长度 | 系数 | 偏置数 | 最小值 | 最大值 | Coding释意 |
EMS_Control | 100 | 10ms | 8byte | 0 | EMS_RPM | 7 | 8bit | 30 | 0 | 0 | 7650 | - |
10ms | 8byte | 1 | EMS_FAIL_F | 0 | 1bit | - | - | - | - | 0b:normal 1b:abnormal |
冲突仲裁
CAN总线采用“线与”规则进行冲突仲裁,当多个信号同时发送时,有的发1,有的发0而只要有0当前总线就是0,因为1与上0还是0,看上去就是1被0覆盖了,所以逻辑0为显性。CAN消息根据用途不同,分为:数据帧、远程帧、错误帧、超载帧。
位填充机制
五个1填充一个0,五个0填充一个1(此处“五个”计算填充位也需计算在内,CAN收发器会填充和去除这些填充)
CAN标准帧
- SOF (Start of Frame):中文意思是"帧开始"。SOF 是 CAN 消息的起始标志,用于指示一个 CAN 帧的开始。它是一个固定的比特模式,标志着数据帧或远程帧的开始,允许接收方节点进行帧同步和开始接收数据。在 CAN 通信中,SOF 是通信帧结构的一部分,用于确保数据帧的正确传输和解析。
- 标识符(Identifier):CAN消息的标识符,用于唯一标识消息的类型和优先级。
- TRT(Transmission Request):传输请求,表示一个CAN节点要发送消息的请求信号。
- IDE(Identifier Extension):标识符扩展,指示标识符是否包括扩展标识信息。
- RO(Read-Only):只读,可能指示某个CAN消息的特性,表示它是只读的,不允许修改。
- DLC(Data Length Code):数据长度码,指示CAN消息中的数据域的长度。
- 数据域(Data Field):CAN消息中包含实际数据的部分,用于传输信息。
- CRC(Cyclic Redundancy Check):循环冗余校验,用于检测CAN消息的数据是否损坏或错误。
- CRC分割符(CRC Delimiter):CRC校验码与数据域之间的分隔符,用于将校验码与数据区分开。
ACK Field:确认字段,用于确认CAN消息的接收情况,以确保成功的数据传输。
EOF(End of Frame):帧结束,表示CAN消息的结束,用于分隔不同消息之间的帧。
CAN拓展帧
- SOF (Start of Frame): 帧开始,是CAN消息的起始标志,指示CAN帧的开始。它允许接收方节点进行帧同步和开始接收数据。
- 标识符 (Identifier): CAN消息的唯一标识符,用于区分不同类型和优先级的消息。
- SRR (Substitute Remote Request): 替代远程请求,指示远程帧中标识符的替代格式。
- IDE (Identifier Extension): 标识符扩展,指示标识符是否包括扩展信息。在拓展帧中,它表示标识符是拓展的。
- 拓展标识符 (Extended Identifier): 在CAN拓展帧中,指示标识符是拓展的,允许更大范围的标识符。
- RTR (Remote Transmission Request): 远程传输请求,指示消息是数据帧还是远程帧。远程帧用于请求其他节点发送数据。
- R1 和 R0 (Reserved Bits): 保留位,用于将来可能的标准化用途,当前必须设置为0。
- DLC (Data Length Code): 数据长度码,指示CAN消息中数据域的长度,即实际数据的字节数。
- 数据域(Data Field):CAN消息中包含实际数据的部分,用于传输信息。
CRC (Cyclic Redundancy Check): 循环冗余校验,用于检测CAN消息的数据是否损坏或错误。
CRC分隔符 (CRC Delimiter): 用于分隔CRC校验码和数据域,确保正确解析校验码。
ACK Field (Acknowledgment Field): 确认字段,用于确认CAN消息的接收情况,以确保成功的数据传输。
EOF (End of Frame): 帧结束,表示CAN消息的结束,用于分隔不同消息之间的帧。
拓展资料
【趋近于完美的通讯 CAN总线!4分钟看懂!】 https://www.bilibili.com/video/BV14k4y187e6/?share_source=copy_web&vd_source=cccc7bdde4dee6a54d0feb196cf11a5f
OBD诊断接口的针脚含义解析:https://v.douyin.com/ieb3pcE9/
诊断插头OBD每个针脚的定义: https://v.douyin.com/iebwS168/
《智能汽车网络安全权威指南》
-
-
-
-
-
-