【米尔 NXP i.MX93 开发板评测】外设开发、BSP定制与系统移植操作
# 【米尔 NXP i.MX93 开发板评测】外设开发、BSP定制与系统移植操作根据 MYD-LMX9X 开发板上的各个外设介绍对应的开发流程,大家可根据实际项目需求对 BSP 进行差异化的定制,并将系统移植到基于 MYC-LMX9X 核心板设计的硬件平台上。
硬件平台资源详见 (https://www.myir.cn/shows/142/73.html) 。
## DDR 适配
i.MX8 以及之前的系列,DDR 脚本的生成工具是一个excel 工具: Register Programming Aid(RPA), DDR 压力测试是另一个DDR stress test 工具。i.MX9 系列开始, DDR的脚本生成和压力测试,都合并到一个工具里: Config tool。同时, Config tool 工具还提供IOMUX 功能。Config tool [下载地址](https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/config-tools-for-i-mx-applications-processors:CONFIG-TOOLS-IMX)
下载后安装在Windows 环境。
### LPDDR4X 参数配置
<img src="DDR参数配置.jpg" style="zoom:33%;" />
参数说明:
①:表示选择基本参数配置还是高级参数配置;
②:LPDDR4X 和LPDDR4 的选择;
③:运行频率选择,根据datasheet 选择;
④:Rank 的选择,16bit 的DDR,基本上rank 都为1
⑤:DDR 大小的选择,根据板子的ddr 大小选择。
### LPDDR4X 测试
在之前的DDR stress test 工具里,只提供了两种功能: DDR calibration 和stress test。在新的Config tool 工具里,提供了更多的测试项目,便于客户debug DDR,共四项。以DDR 压力测试为例解释DDR 的测试过程。
#### 选择DDR 测试项
选择“DDR 测试”界面,如标记①所示,然后选择DDR 压力测试
#### DDR 压力测试
点击DDR 压力测试界面的“开始”按钮,即开始ddr 压力测试,如下图所示压力测试通过
### DDR 初始化代码生成
在界面右边,有代码生成窗口。如果不出现,则点击 Views - Registers,右侧的ddr_timg.c 里的代码就是用于uboot 的代码。左边寄存器配置改变,右边代码会自动生成并改变。
导出成功后自动命名 lpddr4x_timing.c,拷贝到 board/myir/myd_lmx93x 目录,即成完成ddr 的适配。
## 单独移植Bootloader
在i.MX93 平台,bootloader 由imx-mkimage 工具制作完成(imx-boot), 需要多个固件生成,包含SPL、uboot、atf、optee、DDR phy 固件。
#### 准备bootloader 源码
#### U-boot 移植
加载SDK 环境变量到当前shell
```powershell
PC:~/myd-lmx9x-bootloader/myir-imx-uboot$ source /opt/myd-lmx9x-sdk/toolc
hain/environment-setup-armv8a-poky-linux
```
##### 编译配置
根据DDR 大小的不同,uboot 的编译配置文件也不一样。用户根据需求的不同选择对应的配置文件编译
##### 编译uboot
编译完成后会在build/imx93/release/文件夹中生成bl31.bin 二进制文件。
```powershell
PC:~/myd-lmx9x-bootloader/myir-imx-uboot $ make -j10
```
- #### 目标镜像
编译后在uboot 源码目录生成文件
u-boot-nodtb.bin,
spl/u-boot-spl.bin,
arch/arm/dts/myd-lmx93x-11x11.dtb
#### 生成目标引导imx-boot
加载SDK 环境变量到当前shell
```powershell
PC:~/myd-lmx9x-bootloader/myir-imx-uboot$ source /opt/myd-lmx9x-sdk/toolc
hain/environment-setup-armv8a-poky-linux
```
- #### 拷贝相关镜像文件
imx-boot 由多个固件生成,拷贝相关修改的镜像到目标目录
- #### 编译生成目录镜像
```powershell
PC:~/myd-lmx9x-bootloader/imx-boot $ make SOC=iMX9 REV=A1 dtbs=myd_lm
x9x-11x11.dtb flash_singleboot
```
生成的目录文件在 myd-lmx9x-bootloader/imx-boot/iMX9 目录 flash.bin。
## 移植内核和驱动
### Linux 内核平台适配
#### 进入源代码目录
加载SDK 环境变量到当前shell
```powershell
PC:~/myd-lmx9x-bsp/myir-imx-linux$ source /opt/myd-lmx9x-sdk/toolchain/envi
ronment-setup-armv8a-poky-linux
```
#### 创建设备树
#### 修改设备树Makefile 文件
```powershell
dtb-$(CONFIG_ARCH_MXC) += myir-imx93-11x11.dtb \
myir-imx93-11x11-root.dtb \
myir-imx93-11x11-lvds-10-1.dtb \
myir-imx93-11x11-lvds.dtb myir-imx93-11x11-RGB.dtb \
myir-imx93-11x11-test.dtb
```
#### 编译 kernel 源码
#### 查看生成设备树文件
```powershell
PC:~/myd-lmx9x-bsp/myir-imx-linux $ ls arch/arm64/boot/dts/myir-imx93-11x11
-test.dt*
arch/arm64/boot/dts/myir/myir-imx93-11x11-test.dtb
arch/arm64/boot/dts/myir/myir-imx93-11x11-test.dts
```
### RGB 驱动移植
MYD-LMX9X 有一路原生的并行显示,接口为 J23,
#### RGB 控制器配置
- 设备树配置
选择RGB 显示的时候,需要将lcdif 控制器端口链接到DPI 显示接口。所以需要使能 lcdif、ldb 以及ldb_phy。修改arch/arm64/boot/dts/myir/myir-imx93-11x11-lvds.dts 使能lvds 显示
- 使能驱动
Parallel 驱动 gpu/drm/imx/imx93-parallel-disp-fmt.c
- 添加引脚配置
```powershell
pinctrl_lcdif: lcdifgrp {
fsl,pins = <
MX93_PAD_GPIO_IO00__MEDIAMIX_DISP_CLK 0x31e
MX93_PAD_GPIO_IO01__MEDIAMIX_DISP_DE 0x31e
MX93_PAD_GPIO_IO02__MEDIAMIX_DISP_VSYNC 0x31e
MX93_PAD_GPIO_IO03__MEDIAMIX_DISP_HSYNC 0x31e
MX93_PAD_GPIO_IO04__MEDIAMIX_DISP_DATA00 0x31e
MX93_PAD_GPIO_IO05__MEDIAMIX_DISP_DATA01 0x31e
MX93_PAD_GPIO_IO06__MEDIAMIX_DISP_DATA02 0x31e
MX93_PAD_GPIO_IO07__MEDIAMIX_DISP_DATA03 0x31e
MX93_PAD_GPIO_IO08__MEDIAMIX_DISP_DATA04 0x31e
MX93_PAD_GPIO_IO09__MEDIAMIX_DISP_DATA05 0x31e
MX93_PAD_GPIO_IO10__MEDIAMIX_DISP_DATA06 0x31e
MX93_PAD_GPIO_IO11__MEDIAMIX_DISP_DATA07 0x31e
MX93_PAD_GPIO_IO12__MEDIAMIX_DISP_DATA08 0x31e
MX93_PAD_GPIO_IO13__MEDIAMIX_DISP_DATA09 0x31e
MX93_PAD_GPIO_IO14__MEDIAMIX_DISP_DATA10 0x31e
MX93_PAD_GPIO_IO15__MEDIAMIX_DISP_DATA11 0x31e
MX93_PAD_GPIO_IO16__MEDIAMIX_DISP_DATA12 0x31e
MX93_PAD_GPIO_IO17__MEDIAMIX_DISP_DATA13 0x31e
MX93_PAD_GPIO_IO18__MEDIAMIX_DISP_DATA14 0x31e
MX93_PAD_GPIO_IO19__MEDIAMIX_DISP_DATA15 0x31e
MX93_PAD_GPIO_IO20__MEDIAMIX_DISP_DATA16 0x31e
MX93_PAD_GPIO_IO21__MEDIAMIX_DISP_DATA17 0x31e
MX93_PAD_GPIO_IO22__MEDIAMIX_DISP_DATA18 0x0000051E
MX93_PAD_GPIO_IO23__MEDIAMIX_DISP_DATA19 0x0000051E
MX93_PAD_GPIO_IO24__MEDIAMIX_DISP_DATA20 0x0000051E
MX93_PAD_GPIO_IO25__MEDIAMIX_DISP_DATA21 0x0000051E
MX93_PAD_GPIO_IO26__MEDIAMIX_DISP_DATA22 0x0000051E
MX93_PAD_GPIO_IO27__MEDIAMIX_DISP_DATA23 0x0000051E
>;
};
```
### HDMI 驱动移植
MYD-LMX9X 开发板外接一个lt9611 芯片,一路hdmi 信号,hdmi 可接显示器输出,查看原理图与《MYD-LMX9X-PinList-V1.0.pdf》得出lt9611 芯片数据管脚与i.MX93的对应关系。
#### 添加lt9611 设备树节点
根据原理图的定义添加lt9611 设备树配置,里面包含lvds 和hdmi 相关参数配置,修改myir-imx93-11x11.dts 文件
#### 添加DSI 设备端点
LCD 接口(LCDIF)是一个系统主控器,它从存储在内存中的图形中提取数据,并将其显示在TFT 液晶面板上。通过显示端口选择DSI 显示控制器
#### 添加引脚配置
```powershell
pinctrl_lt9611: pinctrl9611 {
fsl,pins = <
MX93_PAD_SD3_DATA1__GPIO3_IO23 0x0000057E
>;
};
```
#### 配置内核
Lt9611 驱动位于drivers/gpu/drm/bridge/lontium-lt9211.c,只需要把这个驱动打开,编译进内核即可。
### 其他驱动的移植
包括RTC驱动、WiFi驱动、USB OTG驱动、CAN驱动、按键驱动、网卡驱动、音频驱动、摄像头驱动、SD卡驱动、单路LVDS驱动等,详见参考材料。
## 参考资料
Linux kernel 开源社区
https://www.kernel.org/
NXP 社区论坛
https://community.nxp.com/
Yocto 开发指导
https://www.yoctoproject.org/
Yocto 项目BSP 开发指南
https://www.yoctoproject.org/docs/3.1.1/bsp-guide/bsp-guide.html
Yocto 项目Linux 内核开发手册
https://www.yoctoproject.org/docs/3.1.1/kernel-dev/kernel-dev.html
QT 跨平台软件设计与开发
https://www.qt.io/
页:
[1]