6.7. FatFs(SD/UDISK) 启动
FatFs 启动包括从 SD 卡 FatFs(FAT32/exFAT)启动和 U盘(FAT32/exFAT)启动。
SD 卡启动的整体流程中,首先尝试从分区读取第一级引导程序程序,如果从分区读取和验证失败,则尝试从 FatFs 文件系统启动。
U盘启动的情况,则直接尝试从 FatFs 文件系统启动。
从 FatFs 文件系统启动的一些前置条件:
SD 卡、U盘不分区,或者使用 MBR、GPT 的格式进行分区
如果进行了分区,则应该使用第一个分区
只支持 FAT32 和 exFAT 文件系统,簇大小建议8KB以上
升级文件只能放在文件系统根目录
6.7.1. FatFs 中的内容
对于执行升级的使用场景,文件系统中存放的文件如下。
文件 |
是否必要 |
说明 |
---|---|---|
bootcfg.txt |
必要 |
启动镜像配置文件,名字固定 |
xxx_v1.0.0.img |
必要 |
Bootloader 读取的升级镜像文件。根据具体项目的设计来决定是否出现。 |
其中 BROM 只关心 FatFs 文件系统根目录是否出现 bootcfg.txt 以及第一级引导程序,其他文件 BROM 不关心。
使用 bootcfg.txt 配置而不是直接读取镜像文件的原因:
固定名字的配置文件,简化 BROM 寻找启动镜像的逻辑
统一配置入口,BROM 和后续的 Bootloader 可以方便的找到对应的镜像文件
可以根据不同项目的需要,对具体镜像进行命名
bootcfg.txt 内容示例:
# Boot configuration file
# Used in SD Card FAT32 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字节对齐
6.7.2. 启动和升级流程
BROM 寻找和启动 FatFs 文件系统中的第一级引导程序的流程如上图所示。
FatFs 启动的设计目的是进行裸机的系统升级,但是 BROM 阶段仅完成找到第一级引导程序并且运行的功能, 后续的升级功能需要在 Bootloader 中进行实现。