找回密码
立即注册
搜索
发回帖 发新帖

6584

积分

0

好友

834

主题
发表于 前天 10:13 | 查看: 8| 回复: 0

RZ/T2H 是瑞萨推出的一款驱控一体高性能 MPU,存储介质可以选 eMMC 或 SD 卡。官方 EVB 上,eMMC 对应八线的 SD0,MicroSD 卡槽对应四线的 SD1。MicroSD 可以随时拔下来,通过转接器接到电脑上,在 Linux 主机下用 fdisk / bmaptool 烧录,或者在 Windows 下用 Win32DiskImager 写入。而 eMMC 是直接焊在主板上的,烧录方式自然没有 MicroSD 那么灵活。

两种存储框架

RZ/T2H 在实际设计里,存储布局通常分两种架构。

1. T2H + XSPI + eMMC

RZ/T2H XSPI eMMC 启动流程架构图

RZ/T2H 内部固化的 ROM 会根据 GPIO 配置,决定从哪个外设读取数据到 BTCM/SRAM。XSPI 存放 BL2 和 U-Boot,eMMC 存放内核镜像、设备树和文件系统。上电后,系统从 XSPI 启动并完成 U-Boot 初始化,随后 U-Boot 再从 eMMC 读取 image 和 dtb,进入 Linux。

2. T2H + eMMC

RZ/T2H eMMC 启动流程框图

第二种架构去掉了 XSPI,把 BL2、U-Boot 连同 image、dtb、rootfs 全部塞进 eMMC,硬件成本更有优势。上电后,系统直接从 eMMC 读取 BL2/U-Boot 到 BTCM/SRAM,完成 U-Boot 启动,再由 U-Boot 从 eMMC 读出内核与设备树,进入 Linux。

下文讨论的方法,均针对第二种架构,即 RZ/T2H + eMMC 的组合。

制作 U 盘启动系统

在烧写 eMMC 之前,需要先准备一个 U 盘启动盘,运行最小 Linux 系统用于后续操作。

步骤 1:格式化 U 盘

需要重新建立分区:使用 fdisk 对 /dev/sdc 进行重新分区,先删除原来的分区,再创建两个新分区。

fdisk 删除分区终端截图

两个分区的格式要求如下:

  • 第一个分区为 FAT32:在 fdisk 中用 t 把分区类型修改为 c
  • 第二个分区为 EXT4:类型保持 83,用于挂载根文件系统

fdisk 创建分区并修改类型终端截图

U盘分区信息 fdisk 输出

分区创建完成后,执行格式化命令:

sudo mkfs.vfat /dev/sdc1   # 第 1 分区(FAT32,存放内核)
sudo mkfs.ext4 /dev/sdc2   # 第 2 分区(EXT4,存放 rootfs)

mkfs.vfat 与 mkfs.ext4 格式化命令输出

步骤 2:制作 U 盘 rootfs

先挂载第一个分区,复制内核与设备树文件:

sudo mount /dev/sdc1 /mnt/usb
sudo cp Image r9a09g077m44-dev.dtb /mnt/usb
sudo umount /mnt/usb

挂载U盘并复制内核与设备树文件

再挂载第二个分区,解压根文件系统:

sudo mount /dev/sdc2 /mnt/usb
sudo tar -xpf core-image-minimal-rzt2h-dev.rootfs-20260317100820.tar.gz -C /mnt/usb
sudo umount /mnt/usb

挂载U盘并解压根文件系统到分区

最后把目标镜像 wic.gz 拷贝到 U 盘的 /mnt 目录:

U盘目录下的 wic.gz 镜像文件

烧写 eMMC boot 分区

U-Boot 需要一块独立的存储区域。RZ/T2H 的 ROM 启动后,会将外部 Flash(xspi0/xspi1)中存放的 BL2、BL31(即 TF-A)、BL32(OP-TEE)、BL33(即 U-BOOT)搬移到对应的内存地址,开始工作。如果最小系统没有外扩 XSPI Flash,U-Boot 就可以存放在 eMMC 的 boot 区域中。

一片空白 eMMC 通常包含以下几个区域:

  • User Data Area:容量最大,用于存放系统与用户数据
  • Boot Partition 1(boot0):存放启动代码
  • Boot Partition 2(boot1):备用启动代码
  • RPMB Area:安全存储
  • 配置寄存器区:EXT_CSD / CID / CSD 等

其中,User Data Area 类似普通磁盘空间,Linux 内核、rootfs、设备树都放在这里;boot0 存放 BL2、BL31、BL32、BL33;boot1 用于量产备份;RPMB 区存放安全相关数据。EXT_CSD 配置区决定 eMMC 从 boot0 还是 boot1 启动,也包含写保护等配置。

将 U-Boot 写入 eMMC 的流程

第一步,RZ/T2H 从 SCI_BOOT 模式启动,将 Flash Programmer 下载到 RAM。

Flash Programmer 下载模式启动界面

第二步,写 eMMC 的 EXT_CSD 寄存器为 0x09,并将 BL2、BL3 等写入 eMMC 的 boot0:

EMMCW ECSD 0xb3 0x9     // 启用 boot0 作为启动分区,当前访问也切换到 boot0
EMMCW 0x1 0x0           // 将 bl2_bp_emmc-xxx.srec 写入 boot0 的 sector 1(每 sector 512 bytes)
EMMCW 0x300 0x0         // 将包含 BL31/BL32/BL33 的 fip-xxx.srec 写入 boot0 的 sector 0x300

第三步,修改 eMMC 启动配置:

  • 0xb3:Partition configuration
  • 0xb1:Boot bus conditions
EMMCW ECSD 0xb3 0x8     // 启用 boot0 作为启动分区
EMMCW ECSD 0xb1 0x2     // eMMC boot 阶段使用 8-bit boot bus

完成上述步骤后,把 RZ/T2H 的启动配置切换到 eMMC,系统就会从 eMMC 读取 BL2 和 BL3。U-Boot 启动之后,就可以利用 RZ/T2H 的外设资源继续烧写 User Data Area。

烧写 eMMC 的 User Data Area

方法一:通过 USB 启动后烧写 eMMC

整体思路分三步:

  1. BL2、BL31/BL32/BL33(U-Boot)已经存储于 eMMC boot0 中。
  2. 用前面制作的 U 盘启动盘,把 kernel、dtb、rootfs 和目标 wic.gz 放入 U 盘文件系统。
  3. 启动 U-Boot,识别 U 盘并加载其中用于烧写 eMMC 的最小 Linux 系统,再通过脚本把 wic.gz 写入 eMMC。

步骤 1:U-Boot 加载最小系统

进入 U-Boot 命令行后,依次输入:

usb start
fatload usb 0:1 0xc4200000 Image
fatload usb 0:1 0xC5F00000 r9a09g077m44-dev.dtb

U-BOOT USB启动加载内核与设备树

booti 0xC4200000 - 0xC5F00000

U-BOOT booti 启动内核日志

启动后再确认一下 console 回显信息:

Linux console 内核命令行参数检查

这里有个细节值得注意:U 盘容量要选得合理。容量太大,挂载时间会明显拉长;容量太小,又放不下 wic.gz 文件。

步骤 2:内核加载后通过 dd 写 eMMC

在烧录之前,先用 lsblk 查看 eMMC 的分区情况:

lsblk 查看 eMMC 块设备信息

进入 /mnt 目录,一边解压 wic.gz 一边写入 eMMC:

gunzip -c core-image-minimal-rzt2h-dev.rootfs-20260317100820.wic.gz | dd of=/dev/mmcblk0 bs=4M

这个过程大约持续 30 秒。写入完成后查看分区:

fdisk -l 查看 eMMC 分区详情

拔出 U 盘,主板重新上电,就可以看到系统从 eMMC 启动 Linux 了。

烧写性能优化

如果 wic.gz 里的分区比较小,上面的方法完全够用。但如果分区达到 30G 以上,比如在 WKS 文件中增加了四个数据分区,把 eMMC 扩到 64G,那么 gunzip + dd 的方式就会非常耗时。

WKS 分区配置文件编辑界面

优化方案一:使用多核解压 pigz

pigz -dc xxx.wic.gz | dd of=/dev/mmcblk0 bs=32M iflag=fullblock oflag=direct status=progress

这种方式可以达到 72 MB/s 的写入速度。

pigz 多核解压配合 dd 写入计时

前提是在 Yocto 的 local.conf 中加入 pigz:

IMAGE_INSTALL 追加 pigz 与 bmap 工具配置

优化方案二:使用 bmaptool

bmaptool copy core-image-minimal-rzt2h-dev.rootfs-20260515085815.wic.gz /dev/mmcblk0

bmaptool 写入进度与块映射信息

以一个 64G 分区为例,三种方式的时间对比如下:

烧录方式 时间(分钟)
gunzip+dd 42
pigz+dd 14
bmaptool 4

可以看到,bmaptool 的优势非常明显,量产或频繁烧写大分区时值得优先考虑。

方法二:使能 ETH0,通过 TFTP 烧写 eMMC

TFTP 通过 U-BOOT 写入 eMMC 的数据流

这种方案是 PC 端建立 TFTP 服务,U-Boot 使能以太网和 TFTP 协议,通过 ETH0 把 wic.gz 加载到 RZ/T2H 的 DDR,再用 U-Boot 命令把 DDR 中的数据写入 eMMC。

步骤 1:验证以太网连通性

驻留在 U-Boot 命令行,运行 mii info:

U-BOOT mii info 查看 PHY 状态

接着设置 IP,用 ping 确认以太网通信正常:

setenv ipaddr 170.95.78.28
setenv gatewayip 170.95.78.1
setenv netmask 255.255.255.0
setenv serverip 170.95.78.36
ping 170.95.78.36

U-BOOT 设置 IP 并 ping 通主机

看到 host 170.95.78.36 is alive,说明网络已经打通。

步骤 2:TFTP 传输并烧写

先用 dtb 文件测试 TFTP 连接:

tftp 0xc4000000 r9a09g077n44-dev.dtb

U-BOOT TFTP 传输设备树文件

确认无误后,传输正式的 wic.gz 文件:

tftp 0xc4000000 core-image-minimal-rzt2h-dev.rootfs-20260402014025.wic.gz

U-BOOT TFTP 传输 wic.gz 镜像文件

TFTP 传输完成进度与字节统计

传输完成后,文件大小为 0x59fa8cf,耗时在 50 秒以内。接着执行:

mmc dev 0
gzwrite mmc 0 0xc4000000 0x59fa8cf

gzwrite 会把 wic.gz 的内容边解压边写入 eMMC。Reset 之后,U-Boot 就能从 eMMC 加载 Linux 并正常运行。

批量烧写

对于还没有贴片的 eMMC,可以直接使用烧写器完成一键部署。推荐参考官方网站上的批量烧写方案:

https://www.minatoat.co.jp/en/product/dp/dp-lineup/

批量 eMMC 烧写器设备外观

烧写器 CAT 6 接口模块面板

这种烧写器最多可以同时烧写 32 片 eMMC,并配有完整的工具链来配置和烧录 eMMC 的 boot 区域与用户区域。

UniversalControlProgram 烧写软件主界面标注

MMC eCSD 内存映射配置窗口

瑞萨官方还提供了完整的软硬件设计规范、参考例程和工具,可以在产品页获取:

https://www.renesas.com/en/products/microcontrollers-microprocessors/rz-mpus/rzt2h-advanced-high-end-mpu-integrated-powerful-application-processing-and-high-precision-real-time

遇到技术问题时,也可以访问瑞萨 MCU/MPU 官方技术论坛寻求在线支持:

https://bbs.21ic.com/renesas

总结与展望

在开发阶段和小批量生产阶段,eMMC 通常已经提前焊在主板上,只能通过主板上的 USB、网口等外设把文件导入 DDR,再烧写 eMMC。方法一是通过 U 盘挂载文件,启动 Linux 后在 Linux 下操作 eMMC;方法二是通过 U-Boot 的 TFTP 从服务器获取文件存入 DDR,再用 U-Boot 命令操作 eMMC。

具体选哪种方案,取决于主板是否包含 USB 接口或网络接口。方法一已经运行了完整 Linux,所以不一定非得用 dd / bmaptool,也可以先用 fdisk 格式化 eMMC,再制作文件系统,只不过这个流程相对繁琐,最好脚本化一键部署。大批量生产则建议直接采购 gang programming 套件来提升效率。

RZ/T2H 外设资源丰富,SCI、USB、网口、LPDDR4、XSPI 等接口为 eMMC 升级提供了很多选择。更多嵌入式实战经验,欢迎在云栈社区一起交流。




上一篇:当云被打成筛子:AI 挖穿 PostgreSQL 与 KVM 逃逸漏洞
下一篇:DA14531 BLE DTM射频测试全流程:SDK配置与MT8852B环境搭建实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-25 03:07 , Processed in 0.099296 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表