0

我正在开发一个 OBD-II 阅读器,我想在其中查询请求以使用 stm32 处理器读取 PID 参数。我已经明白数据字段应该做什么了,但是 ID 让我很头疼。正如我所读到的,必须发送0x7DF广播请求,每个 ECU 都会用自己的 ID 响应。但是,我被要求在 SAE J1939 协议中执行此操作,该协议使用 29 位扩展标识符,我不知道我需要在这个 ID 中添加什么。

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

如果 OBD-II 通信需要一些确认才能正常工作,如果有人能解释一下,我也将不胜感激。

谢谢

4

1 回答 1

1

我建议您查看 SAE J1939 文档,更具体地说是J1939/21J1939-71J1939/73

一般来说,一个J1939传输协议响应序列可以这样处理:

  • 识别 BAM 帧,指示正在启动一个新序列(通过 PGN 60416 - 0xEC00 可以通过 0x1C ECFF 00 到达)
  • 从 BAM 有效载荷的字节 6-8 中提取 J1939 PGN 以用作新帧的标识符
  • 通过连接数据传输帧的字节 2-8(即不包括第一个字节)来构造新的数据有效负载

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

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

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

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

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

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

于 2021-12-09T14:07:38.980 回答