一. i.MX8QM TJA1043 功能测试
1.1 i.MX8QM EVB Board 功能测试
i.MX8QM Lunch 选择mek_8q_car-userdebug ,在 DTS 里面 FlexCAN 设备已经打开 ,但使用 ifconfig –a 命令查看,找不到 CAN 设备挂载1.2 问题分析
在 DTS 里面 FlexCAN 设备已经打开
我们需要对 SCU HW Partition 关于 FlexCan 部分的资源和引脚进行重新分配
二.搭建i.MX8QM SCU 环境
2.1.SCU SourceCode 下载
SCU SourceCode 为imx-scfw-porting-kit-1.2.tar.gz
需要打开下面的网址后可以直接下载imx-scfw-porting-kit-1.2.tar.gz 文件
https://www.nxp.com/webapp/sps/download/license.jsp?colCode=L4.14.98_2.0.0_SCFWKIT-1.2
2.2 编译器下载
gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 编译器下载 :
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
PS : 最新验证过的工具链版本是2017-q2,不建议使用最新的工具链
2.3 imx-scfw-porting-kit-1.2 编译
进入到 scfw_export_mx8qm_b0 目录 :
搭建 Android 的 SCU 环境
- 在vendor\nxp\fsl-proprietary\uboot-firmware\imx8q_car 文件下找到board-imx8qm.c
- 把board-imx8qm.c 文件放到:
imx-scfw-porting-kit-1.2\src\scfw_export_mx8qm_b0\platform\board\mx8qm_mek 目录下 ,修改文件名为board.c
设置TOOLS 的 GCC 路径
TOOLS 为上面下载的gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 释放完后的路径
编译命令 :
$ make qm B=mek R=B0 M=1 |
关于debug 信息 “sc_fw_port.pdf” 解释如下:
M=1 表示打开 Debug 信息 ,U=0 表示串口 0
查看编译结果 :在build_mx8qm_b0 目录下有文件scfw_tcm.bin 生成
把生成的 scfw_tcm.bin 放到vendor\nxp\fsl-proprietary\uboot-firmware\imx8q_car 目录下,编译生成 Android 镜像文件
$ source build/envsetup.sh $ lunch mek_8q-userdebug $ make –j4 |
在out\target\product\mek_8q 目录下通过脚本把镜像文件烧录到 i.MX8QM EVM 板
$ sudo uuu_imx_android_flash.sh -f imx8qm -a |
i.MX8QM Android 环境下 SCU 运行
PS SCU 的串口和 Android 系统的串口不是同一个串口
在 SCU Console通过dump rm 命令可以看到 i.MX8QM 的 HW Partition 资源分配
通过下图我们可以看到 FlexCan 资源分配到了 M4
2.4 分配 FlexCan 资源
把FlexCan 的资源分配到 Android 内核Partition: 6
修改 SCU Board.c 里面的 HW Partition 关于 FlexCan 的 Resource 划分和 Pad 定义 :
通过以上修改 ,在 SCU 输出 dump rm 命令可以看到 FlexCan 分配到了 Android 内核
三.修改内核关于 FlexCAN 的定义
3.1打开 CAN 定义
在arch/arm64/configs/android_car_defconfig 文件里面打开 CAN 定义
3.2 查看 can 设备
重新编译烧录后 ,通过 ifconfig –a 命令查看 can 设备
通过以上操作 ,发现设备里面还是没有 CAN 设备挂载 ,通过查看原理图“ SPF-29918_B2.pdf ”发现
CAN 的收发器 TJA1043 在 EVM 板底座上 :
接上EVM 板底座 :
通过 ifconfig –a 命令查看重新查看 can 设备 ,发现设备此时加载成功 :
四.CAN 应用程序编译
4.1 CAN 的应用程序下载
CAN 的应用程序可以在下面的网站下载 :
https://github.com/linux-can/can-utils
4.2 CAN 的应用程序编译
测试 CAN 通信只需要candump.c 和cansend.c ,编译candump 和cansend 的步骤如下:
- 在external 目录下创建flexcan_dump 文件夹
把上面下载的文件candump.c lib.c ,lib.h ,terminal.h ,include 放到此文件夹
4.2.2 创建Android.mk 文件
4.2.3 使用命令 mmm external/flexcan 进行编译 ,应用程序会放到下面目录下 :
out/target/product/mek_8q/vendor/bin/candump_32
can_sent 应用程序请参考以上步骤
五.FlexCan 通信测试
5.1 CAN测试平台
使用带有 CAN 收发器的平台或是工具 ,我们使用的是 NXP S32V 的平台进行测试 ,MX8QM 底座的接口上有三个 CAN 接口 ,我们使用 CAN0 进行测试 ,CAN0_CANH 接在底座的第七脚 ,CAN0_CANL 接在底座的第二脚
5.2 配置 CAN0 端口
mek_8q:/ # ip link set can0 up type can bitrate 125000 mek_8q:/ # ifconfig can0 up mek_8q:/ # ifconfig |
通过以上命令可以查看到 CAN 已经成功挂载
输入 CAN 的发送命令 :
mek_8q:/ # cansend_32 can0 008#11.22.33.44.55.66.77.88 |
$ip link set can0 up type can bitrate 125000 $ ifconfig can0 up $ifconfig
|
在 S32V 平台也需要设置通用的波特率
输入 candump can0
通过以上的操作 ,相信大家已经了解了调试 TJA1043-CAN 的驱动的方法 ,首先需要搭建 i.MX8QM SCU 环境 ,接着修改内核关于 FlexCAN 的定义 ,然后是CAN 应用程序编译 ,最后是对FlexCan 通信进行测试 ,通过对 TJA1043-CAN 驱动的调试 ,希望对大家以后各种类型 CAN 调试有所帮助
六.参考文档
【1】 i.MX Linux User's Guide , NXP Semiconductor ,Rev. 1 ,04/2019,Rev. L4.14.98-2.0.0_ga
Document Number: IMXLUG
七. 预告
通过 “于 NXP i.MX8QM TJA1043-CAN 通信 ”相信大家对怎么调试 AR8031 已经有所了解 , 接下来将对“ 基于 HISILICON HI3562 BSP 环境搭建 ” 进行讲解
接下来我们也会不断更新更多关于 i.MX8 系列的开发博文,同时我们也会持续推出更多 ADAS 相关(S32V234、Hi3566V100、Hi3559AV100、Hi3518EV300、硬件、软件、算法等)的技术开发博文,如需更深入的技术交流,欢迎在博文下方评论或者关注给我留言。
评论
shinessz
2022年5月19日