lijinlei 发表于 2024-9-6 21:01

【米尔 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]
查看完整版本: 【米尔 NXP i.MX93 开发板评测】外设开发、BSP定制与系统移植操作