i.MX8 驱动调试丨基于 NXP i.MX8QM TJA1043-CAN 通信

上一期我们以 【基于 NXP i.MX8QM TJA1101 AUTO-PHY 调试】开启了 i.MX8 驱动调试系列的介绍,本期将给大家推出 基于 NXP i.MX8QM TJA1043-CAN 通信。

一. 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、硬件、软件、算法等)的技术开发博文,如需更深入的技术交流,欢迎在博文下方评论或者关注给我留言。

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

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

评论

shinessz

shinessz

2022年5月19日
你好,按照您提供的方法,修改can资源到partition 6,开启CONFIG_CAN和CONFIG_CAN_FLEXCAN宏后ifconfig还是无法看到can设备,请问您那边做了其他修改吗?