一、物理 Can 调试
1. 使用 PC 端的 CAN 收发器连接板端的 CAN 总线:
2. 因为 X9H 在 Freertos 上只有 2 路 CAN,而代码里却是以 4 路 CAN 的模型,所以不修改的话到第三路 CAN 初始化的时候会因为管脚不能使能而卡住,导致整个 Freertos 卡在 CAN 的初始化这一步,因此只需要初始化 2 路 CAN 即可,在 rtos/lk_boot/chipdev/can/flexcan/Can.c 中修改如下:
在 rtos/lk_boot/chipdev/can/flexcan/can_cfg.c 中修改如下:
在 rtos/lk_boot/chipdev/can/rules.mk 中修改如下:
在 rtos/lk_boot/framework/communication/include/ipcc_config.h 中修改如下:
在 rtos/lk_boot/framework/service/can_proxy/interface/can/can_port.c 中修改如下:
然后在 rtos/freertos_safetyos 中的对应文件把上面的所有修改项都进行同样的修改即可。
3. 验证物理 CAN 通信
在 Freertos 中验证 CAN 需要把 can_proxy 服务先关掉,然后编译 can_test 或 can_sample 这两个应用进去,在 rtos\freertos_safetyos\project\safety-x9-ref-serdes.mk 文件修改如下:
编译烧录后在 Safety 直接运行 can_sample,会发送一帧 CAN 数据到 PC 端:
可以看出 PC 端已经收到了这一帧数据,这时候从 PC 端发一帧数据看看:
可以看出,板端也接收成功了,并且 ID 和数据都是准确的,说明物理 CAN 可以正常通信。
二、Vircan 通信
1. Linux 端 Vircan
Linux 端的 /dev/vircan 就是 Vircan 设备,SDK 代码提供了 candump 和 cansend 两个工具用来测试 Vircan 设备,在测试前需要先把 cluster 应用关掉,不然该应用会占用 Vircan:
然后输入
candump /dev/vircan
进入接收 Can 数据状态,此时个发送一帧数据:
Linux 这边已经接收到了,接下来输入
cansend /dev/vircan -i 0x55 0x11 0x12 0x13
PC 端这边也成功接收到了,Linux 端的 vircan 已经可以正常通信了。
2. Android 端 Vircan
Android 这边的 Vircan 也是在 /dev/vircan 这里,同样的一开始也会被 APP 占用,需要在代码里取消打开 vircan 这一步,在 android/vendor/semidrive/tools/SemidriveLink/src/SemidriveLink.cpp 里修改如下:
然后进行与 Linux 端一样的操作来验证 Vircan,发送验证:
与 Linux 的同时接收验证:
可以看出 Vircan 可以同时正常在 Linux 端和 Android 端接收数据。
至此,X9H CAN 的验证已经完成了。
评论
akumasummon
4 个月前