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 内部固化的 ROM 会根据 GPIO 配置,决定从哪个外设读取数据到 BTCM/SRAM。XSPI 存放 BL2 和 U-Boot,eMMC 存放内核镜像、设备树和文件系统。上电后,系统从 XSPI 启动并完成 U-Boot 初始化,随后 U-Boot 再从 eMMC 读取 image 和 dtb,进入 Linux。
2. 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 进行重新分区,先删除原来的分区,再创建两个新分区。

两个分区的格式要求如下:
- 第一个分区为 FAT32:在
fdisk 中用 t 把分区类型修改为 c
- 第二个分区为 EXT4:类型保持
83,用于挂载根文件系统


分区创建完成后,执行格式化命令:
sudo mkfs.vfat /dev/sdc1 # 第 1 分区(FAT32,存放内核)
sudo mkfs.ext4 /dev/sdc2 # 第 2 分区(EXT4,存放 rootfs)

步骤 2:制作 U 盘 rootfs
先挂载第一个分区,复制内核与设备树文件:
sudo mount /dev/sdc1 /mnt/usb
sudo cp Image r9a09g077m44-dev.dtb /mnt/usb
sudo umount /mnt/usb

再挂载第二个分区,解压根文件系统:
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

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

烧写 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。

第二步,写 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
整体思路分三步:
- BL2、BL31/BL32/BL33(U-Boot)已经存储于 eMMC boot0 中。
- 用前面制作的 U 盘启动盘,把 kernel、dtb、rootfs 和目标 wic.gz 放入 U 盘文件系统。
- 启动 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

booti 0xC4200000 - 0xC5F00000

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

这里有个细节值得注意:U 盘容量要选得合理。容量太大,挂载时间会明显拉长;容量太小,又放不下 wic.gz 文件。
步骤 2:内核加载后通过 dd 写 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 秒。写入完成后查看分区:

拔出 U 盘,主板重新上电,就可以看到系统从 eMMC 启动 Linux 了。
烧写性能优化
如果 wic.gz 里的分区比较小,上面的方法完全够用。但如果分区达到 30G 以上,比如在 WKS 文件中增加了四个数据分区,把 eMMC 扩到 64G,那么 gunzip + dd 的方式就会非常耗时。

优化方案一:使用多核解压 pigz
pigz -dc xxx.wic.gz | dd of=/dev/mmcblk0 bs=32M iflag=fullblock oflag=direct status=progress
这种方式可以达到 72 MB/s 的写入速度。

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

优化方案二:使用 bmaptool
bmaptool copy core-image-minimal-rzt2h-dev.rootfs-20260515085815.wic.gz /dev/mmcblk0

以一个 64G 分区为例,三种方式的时间对比如下:
| 烧录方式 |
时间(分钟) |
| gunzip+dd |
42 |
| pigz+dd |
14 |
| bmaptool |
4 |
可以看到,bmaptool 的优势非常明显,量产或频繁烧写大分区时值得优先考虑。
方法二:使能 ETH0,通过 TFTP 烧写 eMMC

这种方案是 PC 端建立 TFTP 服务,U-Boot 使能以太网和 TFTP 协议,通过 ETH0 把 wic.gz 加载到 RZ/T2H 的 DDR,再用 U-Boot 命令把 DDR 中的数据写入 eMMC。
步骤 1:验证以太网连通性
驻留在 U-Boot 命令行,运行 mii info:

接着设置 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

看到 host 170.95.78.36 is alive,说明网络已经打通。
步骤 2:TFTP 传输并烧写
先用 dtb 文件测试 TFTP 连接:
tftp 0xc4000000 r9a09g077n44-dev.dtb

确认无误后,传输正式的 wic.gz 文件:
tftp 0xc4000000 core-image-minimal-rzt2h-dev.rootfs-20260402014025.wic.gz


传输完成后,文件大小为 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/


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


瑞萨官方还提供了完整的软硬件设计规范、参考例程和工具,可以在产品页获取:
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 升级提供了很多选择。更多嵌入式实战经验,欢迎在云栈社区一起交流。