suozhang 发表于 2021-12-29 10:32:12

想写一个zynq BootLoader

本帖最后由 suozhang 于 2021-12-29 11:21 编辑

想挖个坑,不知什么时候能完成!
实现功能类似 STM32的BootLoader, 运行 threadx SMP 系统,包含 fileX 文件系统,支持 从网络接口 更新 APP 文件,以及能正确加载 APP 到 DRAM 中运行。

UG585 ch.6 中描述, ZYNQ 启动流程如下:

Stage 0 : BootROM 程序启动,这段程序固化在芯片内部,无法修改,内部执行程序流程如下:
这段程序 有个博客写的非常好,FPGA - Zynq - 加载 - BootRom_老王的博客-CSDN博客_bootrom

大致总结 bootROM 程序干的事情, 先检测 IO 配置, 从 JTAG 或者 flash device 设备启动,例子 比如从 QSPI 启动 ,会 直接搜索 整个 QSPI flash 芯片 寻找 “BootROM Header” ,然后加载 “BootROM Header” 存储的“User code image”到 OCM (芯片自带的RAM,大小 256KB )。这里 的 “User code image”,就是我们要写的 BootLoader。

eric2013 发表于 2021-12-29 10:38:22

做个U盘拖拽升级,更方便些。

suozhang 发表于 2022-1-5 16:39:33



ZYNQ 程序 固化到 QSPI flash流程

1、可以在 现有的 “hello word” 工程上, 创建一个FSBL 工程, file → new → application project, 选择 FSBL 模板 即可。
2、利用 xilinx SDK 的 create boot image 工具 ,把fSBL 和 hello word产生 的两个 .elf 文件 以及 bit 文件,添加 “BootROM Header” , 打包成一个 boot.bin 文件 ,
3、利用 xilinx SDK 的 program flash memory 工具, 把 boot,bin 文件 烧录到SPI flash 中
4、重启设备,BootROM 程序启动,搜索到 含有 “BootROM Header”的boot.bin 文件,加载启动

ZYNQ动态加载程序,方法主要参考UG821,常见的方法使用Multiboot。

上面这个链接,大概意思是,在 FSBL 工程里,根据 需要 更改 Multiboot寄存器(地址0xF800702C)写便偏移地址,这样 BootROM 程序 就会从不同的 偏移地址进行 搜索带有 “BootROM Header” 文件,加载运行, 即 你要准备 两个 boot.bin 文件,烧录到 QSPI 不同的位置, 实现 A/B 程序切换, 即实现 程序更新 。






mojinpan 发表于 2022-1-5 20:01:17

直接拿官方的FSBL来修改就好了吧,大部分需要的功能其实里面都有,更复杂的功能还是加载uboot后处理比较方便
页: [1]
查看完整版本: 想写一个zynq BootLoader