汽车:ECU 如何判断 CAN 帧是 UDS 协议的一部分?
Automotive: How does ECU tell a CAN frame is a part of UDS protocol?
看了很多规范,还是搞不懂一个简单的东西
所有UDS请求封装在ISO-TP数据包中,这些数据包封装在简单的CAN帧中,因此ECU不断从CAN总线接收帧流。
ECU 如何确定此 CAN 帧是任何 high-level 协议的一部分?
例如,我向ECU发送了安全请求,CAN帧数据将如下所示
02 27 01
ECU如何确定这不仅仅是一大块数据,而是协议的一部分?
当 high-level 协议 "talk to each other" 使用 headers 时,我无法找到与 ISO/OSI 堆栈的任何关系,所以我们知道如何解码数据包。
用于特定协议的 CAN 消息 ID 由每个系统定义。
在大多数情况下,OBD-II 将通过 CAN ID 7DFh 发送用于查询,并通过更高的 ID 发送来自不同模块的响应,但即使在特定车型上也可能有所不同。
找出用于基于 UDS 的通信的 CAN ID 的一种方法是发送简单的测试仪存在 (SID 3Eh) 消息并观察似乎有适当响应的 CAN ID。
通过 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。
在 UDS over CAN 中,PGN 0xDA(物理)和 0xDB(功能)用于所有通信。有了这些信息,您可以实现一个 CAN ID 过滤器,它只匹配 CAN ID 的 PGN 部分。
看了很多规范,还是搞不懂一个简单的东西
所有UDS请求封装在ISO-TP数据包中,这些数据包封装在简单的CAN帧中,因此ECU不断从CAN总线接收帧流。
ECU 如何确定此 CAN 帧是任何 high-level 协议的一部分?
例如,我向ECU发送了安全请求,CAN帧数据将如下所示
02 27 01
ECU如何确定这不仅仅是一大块数据,而是协议的一部分?
当 high-level 协议 "talk to each other" 使用 headers 时,我无法找到与 ISO/OSI 堆栈的任何关系,所以我们知道如何解码数据包。
用于特定协议的 CAN 消息 ID 由每个系统定义。
在大多数情况下,OBD-II 将通过 CAN ID 7DFh 发送用于查询,并通过更高的 ID 发送来自不同模块的响应,但即使在特定车型上也可能有所不同。
找出用于基于 UDS 的通信的 CAN ID 的一种方法是发送简单的测试仪存在 (SID 3Eh) 消息并观察似乎有适当响应的 CAN ID。
通过 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。
在 UDS over CAN 中,PGN 0xDA(物理)和 0xDB(功能)用于所有通信。有了这些信息,您可以实现一个 CAN ID 过滤器,它只匹配 CAN ID 的 PGN 部分。