阅读了很多规范,但仍然无法做到这一点。
封装在ISO-TP数据包中的所有UDS请求都封装在简单的CAN帧中,因此ECU不断从CAN总线接收帧流。
ECU如何确定此CAN帧是任何高级协议的一部分?
例如,我已向ECU发送安全请求,CAN帧数据将如下所示
02 27 01
ECU如何确定这不仅仅是一大块数据而是协议的一部分?
当高级协议与彼此交谈时,我无法找到与ISO / OSI堆栈的任何关系。使用标头,所以我们知道如何解码数据包。
答案 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过滤器。