要开始使用 RAMN,您需要带有四个 ECU 的主板。
您可以通过丝印标识来识别主板上的各个 ECU:

为了与 ECU 进行物理接口连接,您可以为每个 ECU 添加扩展。这些扩展应按照以下动画所示的方式进行连接。
如果您不打算使用这些控制装置(例如,您只想尝试 UDS 命令),则无需安装扩展模块。

您可以通过查看丝印来识别每个控制装置的作用:
在继续操作之前,您应先验证开发板是否正常工作。将开发板连接到电脑的 USB 端口,或连接到能够提供超过 300mA 电流的 USB 电源。每个控制的状态应显示在 ECU A 屏幕的底部。移动每个控制,并确认其状态在屏幕上得到更新(必要时 LED 指示灯也会相应变化)。如果未出现上述情况,您可能需要重新刷写开发板固件(参见 固件刷写 )。ECU D 扩展板上的 LED 模拟了一个简单的仪表盘,可以帮助您验证每个控制是否正常工作。默认情况下,只要电源接通,CAN 总线始终处于激活状态,因此您可以将控制置于任何您偏好的状态(例如,发动机钥匙置于 OFF 位置)。
您可以通过按下 ECU C 上“SHIFT”操纵杆的 LEFT 或 RIGHT 来切换 ECU A 的不同屏幕。在某些屏幕上,您还可以通过按下 UP、DOWN 或 CENTER 进一步进行交互。
尽管在真实车辆中,“电池”和“发动机检查”指示灯会让人感到担忧,但这并不意味着您的 RAMN 板出现了故障。
如果在您将方向盘回正时,屏幕上未显示“转向 0%”,则表明您为配备线性电位器的板子安装了对数型固件,反之亦然。这种情况下,该板仍可正常使用,但如果您希望在模拟器中驾驶车辆,可能需要更新 ECU B 的固件。
在粗暴操作过程中,点烟器开关和转向电位器的盖子可能会脱落,请务必注意不要丢失。同时也要小心屏幕,它相当脆弱。
要与 RAMN 的 CAN 总线进行交互,您有两种适配器可供选择:
此外,还有两种(软件)工具可供选择:
如果您想使用自己的适配器,只需将适配器的“CANH”和“CANL”线缆连接到 RAMN CAN 总线接线端子上,该接线端子位于电路板右上角。接线端子的每个引脚由一个较大的圆形孔和一个较小的矩形孔组成。您应将要连接的线缆插入圆形孔中,内部弹簧会将其锁定到位。如需移除线缆,可将工具(例如精密螺丝刀)插入矩形孔中并拉动线缆即可。该接线端子共有三个引脚,对应的信号已在丝印旁进行了标注:
您只需将 RAMN 的 CANH 和 CANL 引脚连接到您的 CAN 适配器的 CANH 和 CANL 引脚即可。完成连接后,您就可以使用自己喜爱的工具集了。只要 RAMN 板通电,CAN 总线就会始终保持激活状态。
本文件的其余部分将重点介绍内置 RAMN 适配器和内置 Linux 工具。
要在 RAMN 上开始进行 CAN 总线分析,我们建议您准备一个带有 can-utils 的 Linux 环境(虚拟或原生)。
在 Windows 系统上,我们建议您安装 VirtualBox 并使用 Linux 发行版镜像。汽车爱好者的一个常见选择是 Kali Linux [ 1 ]。
从这里开始,您应该能够按照以下 Linux 说明进行操作。
如果您无法(或不愿)在虚拟机中运行 Linux 以使用 can-utils 工具,我们建议您学习并使用跨平台的 python-can 库,它可在所有(Python)平台上运行,包括 Windows。
使用 USB 数据线将开发板连接到您的计算机。在 Windows 系统中,它应显示为“USB 串行设备”(或复合设备),并分配一个 COM 端口号(例如 COM1)。如果未出现这种情况,您可能需要安装 STM32 虚拟 COM 端口驱动程序 。
一旦 Windows 识别到该板卡,您必须将 USB 端口转发至 Virtual Box。选择“设备”>“USB”,然后单击“丰田汽车公司 RAMN”。您也可以打开“设备”>“USB”>“USB 设置…”,然后单击“+”图标以添加 RAMN,这样 Virtual Box 就会始终自动转发该 USB 端口。
在 Linux 系统中,RAMN 应出现在 dmesg 命令的末尾,并被分配一个设备文件(通常为/dev/ttyACM0)。如果遇到问题,请参阅USB 不稳定。
默认情况下,RAMN 充当 slcan 适配器。您可以使用 slcand 命令将 RAMN 作为原生 Linux CAN 接口启动。
请将 /dev/ttyACM0 替换为您计算机所分配的设备文件。
执行此命令后,您应该能够使用 ifconfig 看到 CAN 接口显示为“can0”:
要观察每个标识符的最新 CAN 消息并突出显示位变化,可以使用以下命令:
每条消息的前两个字节表示板上某项的状态。尝试移动控制部件,并观察这些值如何变化。接下来的两个字节表示消息计数器,最后四个字节表示前四个字节的 CRC32 校验值。
如果您想查看所有 CAN 帧,而不是每个标识符的最新帧,可以使用 candump 命令。
此命令将转储所有 CAN 帧,可能会导致信息过载。您可以使用过滤器仅显示特定的 CAN ID。要添加过滤器,请在 CAN 接口名称后加上 ,<filter>:<mask> 。例如,若仅需显示 ID 为 0x150 的帧,请使用以下命令:
此命令应仅显示 ID 为 0x150 的 CAN 帧。移动 ECU B 扩展上的照明控制开关,并观察第一个字节的变化情况。这将帮助您理解 ECU B 如何通过 CAN 总线传输该开关的状态。
您可以使用 cansend 命令来发送 CAN 消息。请确保将 ECU B 上的照明控制开关拨至最左侧位置,以关闭车身 ECU 扩展上的照明 LED(D3 至 D5 LED)。然后,您可以发送以下消息来“欺骗”照明控制:
您应该能够通过终端短暂地控制车身扩展上 LED 的状态。但只能短暂控制,因为 ECU B 仍在持续发送 CAN 帧,覆盖您的 CAN 消息。实际上,您可能会在 ECU A 上看到一条错误信息,提示 CAN 总线出现异常,这是因为两个 ECU 正在发送具有相同 ID 的 CAN 帧。要解决这个问题,您需要阻止 ECU B 发送 CAN 消息。一个快速的方法是使用 UDS。
UDS 是一组标准诊断命令,可通过 ISO-TP 传输层发送。您可以使用 isotpsend、isotprecv 和 isotpdump 命令轻松地与这些层进行交互。
输入以下命令以转储包含 UDS 命令的 CAN 消息:
此命令将转储 ID 范围从 0x7e0 到 0x7eF 的消息,这些 ID 对应于 RAMN 的 UDS 层所使用的 ID。目前应该不会显示任何内容,因为尚未发送任何 UDS 消息。
打开另一个终端,并输入以下命令:
此命令将转储并解析针对 ECU B 的 UDS 命令,该 ECU 在 ID 为 0x7e1 处接收命令,并在 ID 为 0x7e9 处作出响应。目前,此命令也应暂无任何输出。
再打开一个终端,并输入以下命令:
此命令将接收并显示您发送至 ECU B 的 UDS 命令的响应。
最后,打开第四个终端,并输入以下命令以向 ECU B 发送您的第一个 UDS 命令:
此命令将向 ECU B 发送一个 2 字节的命令“3E 00”,对应于“测试器存在”命令。这是一个可选命令,用于告知 ECU 当前正在进行诊断,并且它应等待您的后续指令。您应在“isotprecv”终端上看到 ECU B 已回复“7E 00”,这表示命令已被接受。您可以在“isotpdump”终端上查看对应的交互过程,其中红色表示请求,蓝色表示响应。如果您查看“candump”终端,将看到相应的 CAN 报文。请注意,这些报文实际上是 3 字节长:这是因为第一个字节用于指定 UDS 有效载荷的长度,而此处的有效载荷长度为 2 字节。
你可以使用 UDS 来发送和接收大容量负载。例如,使用“按标识符读取数据”服务(0x22)向 ECU 查询其编译时间(参数 0xF184):
你应该能在“isotprecv”终端中看到已接收到一个较大的响应,该响应应由你的“isotpdump”终端进行解析。在“candump”终端中,你可以观察到已经交换了许多 CAN 报文。这对应于 ISO-TP 层,该层允许通过仅包含小于 8 字节的 CAN 帧来传输大消息。isotpdump、isotpsend 和 isotprecv 使这一层对你而言是透明的。
最后,你可以使用 RAMN 自定义例程控制(UDS 服务 0x31)来请求 ECU B 停止发送 CAN 报文(例程 0x0200)。
移动照明开关,观察 ECU D 的 LED 指示灯不再发生变化。现在,您可以通过以下命令控制照明开关,而无需 ECU B 的干扰。
恭喜您,您已成为 CAN 总线专家。请参阅完整的用户指南 ,以了解更多内容。