汽车:ECU如何告诉CAN帧是UDS协议的一部分?

时间:2017-10-03 10:12:00

标签: can-bus iot-for-automotive

阅读了很多规范,但仍然无法做到这一点。

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

ECU如何确定此CAN帧是任何高级协议的一部分?

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

02 27 01

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

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

2 个答案:

答案 0 :(得分:1)

每个系统都定义了用于特定协议的CAN消息ID。

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

确定用于基于UDS的通信的CAN ID的一种方法是发送简单的测试仪存在(SID 3Eh)消息并观察似乎具有适当响应的CAN ID。

答案 1 :(得分:0)

在DoCAN ISO-15765-2部分中指定了通过CAN进行的UDS,它描述了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过滤器。