这一篇在干嘛?
用大白话讲清楚安路 EG4 系列(比如 EG4S20)的 DUAL BOOT(双启动)功能:它是什么、为什么需要它、Flash 里的两套位流怎么摆放,以及在 TD 软件里怎么一步步把位流烧进去。看完你就能给自己的板子加上”升级失败也不怕变砖”的保险。
先说痛点:为什么需要双镜像?
FPGA 的逻辑配置是靠”位流”(bitstream)文件实现的,上电后芯片从 SPI Flash 里把位流读进来加载。问题来了:如果你正在远程升级固件,写到一半断电了、或者位流文件本身有问题,Flash 里的数据就坏了——下次上电,FPGA 加载失败,板子直接”变砖”,可能还得拆机用下载器救。
DUAL BOOT 的思路很简单粗暴:在 Flash 里放两套位流。上电后 FPGA 先加载 Primary(主)位流;如果 Primary 出错导致加载失败,芯片就自动跳到一个约定好的地址(Golden Address),去加载 Golden(备用)位流。备用镜像平时不动它,专门用来”兜底”,这样就防止了 FPGA 因为位流破坏而无法启动,系统可靠性大大提高。
最佳实践
两套位流可以不一样(主新备旧,升级失败自动回退到旧版本),也可以在求稳的场合放完全相同的位流,双保险。
主备镜像怎么摆?——Flash 空间布局
先了解两个背景知识:
- EAGLE 系列 FPGA 的配置位流长度约 4.8M~6M bits(具体还和 BRAM 初始化数据长度有关),所以配置芯片容量要 大于或等于 6M bit。
- 配置芯片用工业标准串行 SPI 接口 FLASH 即可,比如 M25Pxx、SST25LFxxx、S25FLxxx 等;EAGLE FPGA 支持读命令为 0x03 的 SPI FLASH。
- 只有当 SPI Flash 容量 大于 12Mbit 时,MSPI 模式下才支持 DUAL BOOT 功能——选 Flash 时别抠门。
DUAL BOOT 模式下,Flash 的数据空间大致是这样划分的(手册图 1 的示例):
| 起始地址 | 区域 | 作用 |
|---|---|---|
| 0x000000 | Primary bitstream | 主位流,上电第一个加载 |
| 0x0C0000 | Dummy | 预留空隙 |
| 0x0D0000 | Golden address | 跳转地址,加载失败后从这里找备用位流 |
| 0x0E0000 | Golden bitstream | 备用位流,最后的”救命稻草” |
关键规则:Golden 位流的起始地址是用户可以配置的,但最小值为 0x0E0000。也就是说备用镜像不能摆得太靠前,得给主镜像留足空间——毕竟主位流本身就要 6M bit 左右。
常见坑
- Golden 地址设得比 0x0E0000 还小:违反了最小值限制,备用镜像可能和主镜像”打架”(地址重叠),两头都加载不完整。
- 只更新了主镜像,忘了更新备用镜像:备用位流要是也是坏的,双启动就只剩”双倍绝望”了。升级时记得两套都要检查。
- Flash 容量不够:位流要 6M bit,两套就是 12M bit 起步,容量小于 12Mbit 的芯片撑不起 DUAL BOOT。
方法一:bit 位流直接烧写(TD Download 工具)
如果只是用下载器本地烧写,用 TD 软件的 Download 工具就够了,不需要额外转换文件。
准备工作:先生成分别要放在 primary 区和 golden 区的两套位流(也可以两个区域放同一套),文件命名区分开,别搞混。
操作步骤:
- 目标板通过下载器连接,打开 TD 的 Download 界面,找到器件后,在 mode 栏选择 dualboot 模式。
- 把两套位流都添加进来:Default 区选择放在 primary 的位流;Golden 区选择放在 golden 区的位流。Golden 区的起始地址在这里也能设置,最小 0x0E0000。
- 设置好后直接点 Run,两套位流就一起下载到 FLASH 里了。

方法二:合成 bin 再转 SVF/TDE(给 MCU 用)
如果你的板子上没有下载器接口直连电脑,而是靠 MCU 上电时往 Flash 里写位流,那就需要 SVF/TDE 格式的文件。流程是三步走:两套 bit → 合成一个 bin → 转成 svf/tde。
第一步:用 merge dualboot bit 合成 bin
打开安路 download 软件,选择 merge dualboot bit 功能,然后:
- Default bit:选择放在 primary 的 bit 位流,起始地址固定为 0x000000;
- Golden bit:选择 golden 的 bit 位流,起始地址用户可设,最小值 0x0E0000;
- Merge bit file:指定生成的 bin 文件的名字和保存位置;
- 点 generate,就得到了合成的 bin 文件。

第二步:用 device chain 工具转 SVF
打开 TD 软件的 device chain 工具,点 add 添加上一步生成的 bin 文件,再点 Create SVF,在弹出的对话框中选择 SVF for SPI,即可生成 MCU 所需要的 svf/tde 文件。

最佳实践
device chain 工具里其他选项的含义,以及 MCU 具体怎么用 svf/tde 文件对 Flash 进行配置,参考安路的配置文档 TN303_安路 EG4X FPGA 编程和配置使用说明_V1.3,遇到不明白的选项先查它。
别忘了:Global CRC 校验必须打开
最后一条,也是最容易踩的坑:要让 DUAL BOOT 功能正常工作,必须打开 Global CRC 校验功能。芯片就是靠 CRC 校验来判断主位流有没有坏的,这个开关不开,回退机制就是摆设。
较新版本的 TD 软件默认已打开该选项,不需要再设置;但如果用的是旧版本或者被手动关过,一定要去检查一下。

常见坑
如果你的软件版本里 CRC 选项被关掉了,DUAL BOOT 的失败检测就形同虚设——主位流坏了芯片也”感觉不到”,不会跳转到 Golden 位流。烧写前务必确认这一项。
整体流程小结
- 本地烧写:生成两套 bit → TD Download 工具选 dualboot 模式 → 分别指定 Default 区(0x000000)和 Golden 区(≥0x0E0000)→ Run。
- MCU 烧写:两套 bit → merge dualboot bit 合成 bin → device chain 转 SVF for SPI → MCU 把 svf/tde 内容写进 Flash。
自测
- DUAL BOOT 模式下,Golden 位流的起始地址最小能设到多少?为什么不能更小?
- 用 MCU 方案烧写时,从两套 bit 到最终的 svf/tde 文件,中间需要经过哪两步工具操作?哪一项功能不打开会导致回退机制失效?
一句话收尾
DUAL BOOT = 主镜像 + 备用镜像 + CRC 检测 + 自动跳转。记住”0x0E0000”这个最小地址和”Global CRC 必须开”这条铁律,升级就再也不怕变砖了。