【SemiDrive X9】X9H Vircan 调试

关键字 :SemidriveautoX9H

一、物理 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 的验证已经完成了。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

akumasummon

akumasummon

4 个月前
新手,想问一下,怎么进R核的命令行?从A核能进吗?