1

阅读了很多规范,仍然无法得到一个简单的东西。

所有 UDS 请求都封装在 ISO-TP 数据包中,这些数据包封装在简单的 CAN 帧中,因此 ECU 不断接收来自 CAN 总线的帧流。

ECU 如何决定这个 CAN 帧是任何高级协议的一部分?

例如,我向 ECU 发送了安全请求,CAN 帧数据将如下所示

02 27 01

ECU 如何确定这不仅仅是数据块,而是协议的一部分?

当高级协议使用标头“相互交谈”时,我无法找到与 ISO/OSI 堆栈的任何关系,因此我们知道如何解码数据包。

4

2 回答 2

1

用于特定协议的 CAN 消息 ID 是按系统定义的。

在大多数情况下,OBD-II 将通过 CAN ID 7DFh 发送用于查询,更高的 ID 用于来自不同模块的响应,但即使在特定车型上也可能不同。

找出用于基于 UDS 的通信的 CAN ID 的一种方法是发送简单的 tester-present (SID 3Eh) 消息并观察似乎具有适当响应的 CAN ID。

于 2017-10-11T23:23:37.640 回答
1

通过 CAN 的 UDS 在 DoCAN ISO-15765-2 部分中指定,并描述了用于 ECU 之间的功能(广播)和物理(p2p)通信或更好的控制功能的网络和传输层。

普通 CAN id 不实现任何网络功能,如寻址。为此,使用了 SAE J1939 网络层。在 J1939 网络中,每个 CAN 客户端都有一个地址,每个功能都有一个参数组 (PGN)。所有这些都被编码在一个 29 位的 CAN ID 中。例如 CAN ID 0x18EF8081。这将通过 PGN 0xEF 将来自 CAN 客户端 0x81 的消息传输到 0x80,0x18 是优先级。

在 CAN 上的 UDS 中,PGN 0xDA(物理)和 0xDB(功能)用于所有通信。有了这些信息,您就可以实现一个仅匹配 CAN ID 的 PGN 部分的 CAN ID 过滤器。

于 2020-03-21T17:53:20.773 回答