寻找 OBD-II 完整数据帧的示例

问题描述 投票:0回答:1

我正在开发一个 OBD-II 读取器,我想在其中查询使用 stm32 处理器读取 PID 参数的请求。我已经明白数据字段应该包含什么内容,但 ID 让我头疼。正如我所读到的,必须发送

0x7DF
来广播请求,每个 ECU 都会用自己的 ID 进行响应。但是,我被要求在 SAE J1939 协议中执行此操作,该协议使用 29 位扩展标识符,并且我不知道需要向此 ID 添加什么。

正如我在标题中所述,有人可以使用这种方法向我展示一些来自总线的实际数据吗?我一直在互联网上搜索真实的框架,但到目前为止还没有任何运气。

如果有人能够阐明 OBD-II 通信是否需要一些确认才能正常工作,我也将不胜感激。

谢谢

obd-ii j1939
1个回答
1
投票

我建议您查看 SAE J1939 文档,更具体地了解 J1939/21、J1939-71 和 J1939/73。

一般来说,J1939传输协议响应序列可以如下处理:

  • 识别BAM帧,表示正在发起新的序列 (通过 PGN 60416 - 0xEC00 可以通过 0x1CECFF00 到达)
  • 从 BAM 有效负载的字节 6-8 中提取 J1939 PGN 以用作 新帧的标识符
  • 通过连接数据的字节 2-8 构造新的数据负载 传输帧(即排除第一个字节)

ID 为 1CEBFF00(PGN 60160 或 EB00)的 J1939 数据传输消息。

上图,BAM 的最后 3 个字节等于 E3FE00。重新订购时,这些等于 PGN FEE3 又名引擎配置 1 (EC1)。此外,通过组合 6 个数据传输包/帧的前 39 个字节来找到有效负载

管理控制设备或任何发布车辆使用状态 PID 的设备应对运行开关状态(SPN 3046 - 0xFDC0,可能可以通过 0xCFDC000 到达)和任何其他本地定义的授权使用标准(即驾驶员日志)敏感ons)之前,车辆使用状态PID用于生成未授权使用警报。

此外,您不能忘记使用读取/发送来扩展 ID 消息,因为它是 24 位。

事实上,我建议您使用 can-utils 使您的分析更加容易。一个简单的罐头转储或罐头嗅探器,您可以看到广播中即将发生什么。

某些汽车的dbc https://github.com/commaai/opendbc

© www.soinside.com 2019 - 2024. All rights reserved.