FatFs (SD/UDISK) 启动
FatFs 启动包括从 SD 卡 FatFs (FatFs/exFAT) 启动和 U盘 (FatFs/exFAT) 启动。

SD 卡启动流程中,首先尝试从分区读取第一级引导程序程序,如果从分区读取和验证失败,则尝试从 FatFs 文件系统启动。
U 盘启动的情况,则直接尝试从 FatFs 文件系统启动。
从 FatFs 文件系统启动需要满足以下前置条件:
-
SD 卡、U盘不分区,或者使用 MBR、GPT 的格式进行分区。
-
如果进行了分区,则应该使用第一个分区。
-
只支持 FatFs 和 exFAT 文件系统,簇大小建议 8 KB以上。
-
升级文件只能放在文件系统根目录。
FatFs 中的内容
对于执行升级的使用场景,文件系统中存放的文件如下。
文件 |
是否必要 |
说明 |
---|---|---|
bootcfg.txt |
必要 |
启动镜像配置文件,名字固定 |
xxx_v1.0.0.img |
必要 |
Bootloader 读取的升级镜像文件。根据具体项目的设计来决定是否出现。 |
其中 BROM 只关心 FatFs 文件系统根目录是否出现 bootcfg.txt 以及第一级引导程序,其它文件 BROM 不关心。
使用 bootcfg.txt 配置而不是直接读取镜像文件的原因:
-
固定名字的配置文件,简化 BROM 寻找启动镜像的逻辑
-
统一配置入口,BROM 和后续的 SPL、U-Boot 可以方便的找到对应的镜像文件
-
可以根据不同项目的需要,对具体镜像进行命名
bootcfg.txt 内容示例:
# Boot configuration file # Used in SD Card FatFs boot and USB Disk upgrade. # Format: # boot0=size@offset # boot0 size and location offset in 'image' file, boot rom read it. # boot0=example.bin # boot0 image is file example.bin, boot rom read it. # boot1=size@offset # boot1 size and location offset in 'image' file, boot0 read it. # boot1=example.bin # boot1 image is file example.bin, boot0 read it. # image=example.img # Packed image file is example.img, boot1 use it. # u-boot-spl-updater.aic boot0=0x7d80@0x1c00 # u-boot-updater.aic boot1=0x81d80@0xdc00 image=xxx_v1.0.0.img
使用限制:
-
文件名必须是 ASCII 字符,不能为 UNICODE 或者其它字符
-
文件名长度必须是小于 128 字符
-
删除所有分区后,对 SD 卡进行深度格式化
-
U-boot-spl.aic 放在 image 中的 offset 位置,必须是 512 字节对齐
启动和升级流程

BROM 寻找和启动 FatFs 文件系统中的第一级引导程序的流程如上图所示。
FatFs 启动的设计目的是进行裸机的系统升级,但是 BROM 阶段仅完成找到第一级引导程序并且运行的功能, 后续的升级功能需要在 U-Boot 中进行实现。
