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

Looking for an example of a OBD-II complete data frame

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

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

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

谢谢

我建议您查看 SAE J1939 文档,更具体地说是 J1939/21,J1939-71 and 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 个字节 packets/fram

来找到有效负载

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

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

事实上,我会建议您使用 can-utils 使您的分析更容易。一个简单的 can-dump 或 can-sniffer,你可以看到你的广播中发生了什么。

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