Rockchip | 使用SD卡启动或升级固件到本地存储

瑞芯微SD卡分类与固件升级流程详解
本文详细介绍了瑞芯微Rockchip对SD卡的四种分类——常规卡、升级卡、启动卡和修复卡,以及它们的用途和制作方法。SD升级卡和修复卡主要用于固件升级和设备修复,而启动卡则允许直接从SD卡启动。文章还阐述了固件标志、启动流程以及注意事项,包括U-Boot在不同卡类型下的启动行为。

1 简介

Rockchip 现将 SD 卡划分为常规 SD 卡,SD 升级卡,SD 启动卡,SD 修复卡。可以通过瑞芯微创建升级磁盘工具将镜像文件下载到 SD 卡内,制作不同的卡类型。

_images/sdfirmwaretool.zh_CN.png

2 分类

2.1 常规卡

普通 SD 卡与 PC 使用完全一样,可以在 U-Boot 和 Kernel 系统中作为普通的存储空间使用,无需工具对SD 卡做任何操作。

2.2 升级卡

SD 升级卡是通过 RK 的工具制作,实现 SD 卡对本地存储(如 eMMC,nand flash)固件的升级。SD 卡升级是可以脱离 PC 机或网络的一种固件升级方法。具体是将 SD 卡启动代码写到 SD 卡的保留区,然后将固件拷贝到 SD 卡可见分区上,主控从 SD 卡启动时,SD 卡启动代码和升级代码将固件烧写到本地主存储中。同时 SD 升级卡支持 PCBA 测试和 Demo 文件的拷贝。SD 升级卡的这些功能可以使固件升级做到脱离 PC 机进行,提高生产效率。已经制作好的升级用 SD 卡,如果只需要更新固件和 demo 文件时,可以按下面步骤来完成:

1. 拷贝固件到 SD 卡根目录,并重命名为 sdupdate.img
2. 拷贝 demo 文件到 SD 卡根目录下的 Demo 目录中

SD 引导升级卡格式(非 GPT)

SD 引导升级卡格式(GPT)

2.3 启动卡

SD 启动卡是通过 RK 的工具制作,实现直接从 SD 卡启动,极大的方便用户更新启动新固件而不用重新烧写固件到设备存储内。具体实现是将固件烧写到 SD 卡中,把 SD 卡当作主存储使用。主控从 SD 卡启动时,固件以及临时文件都存放在 SD 卡上,有没有本地主存储都可以正常工作。目前主要用于设备系统从 SD 卡启动,或用于 PCBA 测试。注意:PCBA 测试只是 recovery 下面的一个功能项,可用于升级卡与启动卡。

SD 引导启动卡格式(非 GPT)

SD 引导启动卡格式(GPT)

2.4 修复卡

SD 修复卡类似于 SD 卡升级功能,但固件升级工作由 miniloader完成。首先工具会将启动代码写到 SD
卡的保留区,然后将固件拷贝到 SD 卡可见分区上,主控从 SD 卡启动时,SD 卡升级代码将固件升级到
本地主存储中。主要用于设备固件损坏,SD 卡可以修复设备。

SD 修复卡格式(非 GPT)

SD 修复卡格式(GPT)

3 固件标志

SD 卡作为各种不同功能的卡,会在 sd 卡内做一些标志。在 SD 卡的第 64 扇区处,起始标志若为(magic number)为 0xFCDC8C3B,则为一些特殊卡,会从 SD卡内读取固件,启动设备。如果不是,则作为普通 SD 卡看待。在第(64 扇区 + 616bytes)地方,存放各种卡的标志。目前有三种类型:

4 启动流程

SD 卡的 boot 流程可分为 pre-loader 启动流程与 uboot 启动流程,这两个流程都需要加载检测 SD 卡及SD 卡内 IDB Block 内 Startup Flag 标志,并且会依据这些标志执行不同的功能。流程如下:

 

4.1 pre-loader 启动

  • maskrom 首先先找到一份可用的 miniloader 固件(可以从 TRM 确定 Maskrom 支持的启动存储介质和优先顺序,maskrom 会依次扫描可用存储里的固件),然后跳转到 miniloader。miniloader 重新查找存储设备,如果检测到 SD 卡,检测 SD 卡是否包含 IDB 格式固件。如果是,再判断卡标志。如果 SD 卡可用且标志位为 '0' 或 ‘1’,则从 SD 卡内读取 U-Boot 固件,加载启动 U-Boot。如果标志为‘2’,则进入修复卡流程,在 loader 下更新固件。正常启动流程为扫描其他存储,加载启动下级 loader。

 

4.2 U-Boot 启动

  • 升级卡:U-Boot 重新查找存储设备,如果检测到 SD 卡,检测 SD 卡是否包含 IDB 格式固件。如果是,再判断偏卡标志是否为 0,传递给 kernel 的 cmdline 添加'sdfwupdate'。最后读取 SD 卡的 misc 分区,读取卡启动模式,若为 recovery 模式,加载启动 recovery。
  • 启动卡:U-Boot 重新查找存储设备,如果检测到 SD 卡, 检测 SD 卡是否包含 IDB 格式固件。如果是,再判断卡标志是否为 1。最后读取 SD 卡的 misc 分区,读取卡启动模式,如果为 recovery,加载启动recovery。如果是 normal 模式,则加载启动 kernel。

        

 

5 注意事项

  • 制作非GPT 格式固件时,U-Boot 需要配置 CONFIG_RKPARM_PARTITION。
  • 制作 SD 升级卡时,update.img 必须包含 MiniloaderAll.bin,parameter.txt,uboot.img,trust.img,misc.img,resource.img,recovery.img 这些固件,否则烧写 update.img 会出现写入 MBR 失败的提示。
### RK3568 芯片通过 SD 启动的相关配置与设置 RK3568 是一款高性能、低功耗的处理器,广泛应用于嵌入式设备中。为了实现通过 SD 启动的功能,通常需要完成以下几个方面的操作: #### 1. 启动模式的选择 RK3568 支持多种启动方式,包括 eMMC、SPI-NOR Flash 和 SD/MMC 等。默认情况下,启动顺序可以通过硬件引脚软件配置来决定。如果希望优先从 SD 启动,则需确保 BootROM 的引导逻辑能够识别并加载来自 SD 的数据。 对于某些开发板而言,可能还需要手动调整跳线帽(Jumper Cap),以指定从哪个存储介质启动[^4]。 #### 2. 配置 U-Boot 引导程序 U-Boot 是一个常用的开源引导加载程序,负责初始化硬件并将控制权交给操作系统内核。针对 RK3568 平台,可以下载官方支持的 U-Boot 版本,并按照以下步骤进行编译和烧录: - **获取源码** ```bash git clone https://github.com/u-boot/u-boot.git cd u-boot/ ``` - **选择目标平台** ```bash make rk3568_defconfig ``` - **编译** ```bash make -j$(nproc) ``` 完成后会生成 `u-boot.img` 文件,该文件需要写入到 SD 的第一个扇区位置以便被 BootROM 加载运行。 #### 3. 准备根文件系统 除了 U-Boot 外,还需要准备适合的目标系统的根文件系统镜像(rootfs)。常见的做法是从 Linux 发行版提取现成的 rootfs 者自行构建定制化版本。之后将其放置于 FAT32 格式的分区上供后续挂载使用。 注意:部分 Rockchip SoCs 可能要求特定布局结构,请参照具体文档说明执行相应处理过程[^5]。 #### 4. 测试验证流程 将制作好的 SD 插入开发板对应的插槽后通电开机即可进入测试阶段。正常状况下应该能看到串口调试终端打印出来的日志消息表明成功完成了整个启动链路。 --- ```python import os def check_sd_boot(): """模拟检查SD启动状态""" sd_path = "/dev/mmcblk0" if os.path.exists(sd_path): print(f"Detected SD Card at {sd_path}") else: print("No SD Card detected.") check_sd_boot() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值