首页 > 解决方案 > FPGA 和 CPLD 引导加载程序

问题描述

来自 MCU 的世界,我创建引导加载程序,以便客户可以更新固件。

这是如何使用 FPGA 和 CPLD 完成的。

对于 FPGA:

由于固件存储在外部闪存中,FPGA 映像是否只是写入其外部闪存然后重新启动?但是,如果新文件损坏或更新时连接被删除,会发生什么?有没有办法进行默认备份?在 MCU 中,引导加载程序永远不会被覆盖,因此应用程序可能随时出现问题,但引导加载程序仍然可以工作。

是否有单独的专用非易失性内存部分在上电时不会重新配置,您可以在其中加载引导加载程序?

对于 CPLD:

既然图像是内部存储的,他们有办法自己配置吗?如何为 CPLD 制作引导加载程序?

其他想法:

也许您可以将某种 FTDI 芯片与 GPIO 放在一起,您可以通过 USB 从 PC 应用程序控制它。这样您就可以对 SPI 进行 bitbang 以在外部闪存上加载新图像?有人这样做吗?这样 FPGA 映像可能会损坏或丢失,但仍然能够加载新映像。

请注意,我假设 FPGA 或 CPLD 单独在板上。这意味着板上没有 MCU 可以执行所有这些操作。

任何有关该行业如何完成这项任务的见解都会很棒。

标签: fpgabootloader

解决方案


FPGA

这个问题没有一个共同的答案。对于不同的 FPGA 和不同类型的应用,它是不同的。

一些 FPGA 能够在外部闪存中拥有两个比特流,因此如果一个比特流损坏,它将回退到第二个比特流。您必须检查您的确切 FPGA 的数据表,以了解它是否具有这种恢复功能,以及它是如何工作的。

另一种常见的方法是在 FPGA 旁边放置一个 MCU,让 MCU 管理 FPGA 的比特流更新。让 MCU 负责确保外部闪存中存在有效的比特流。或者,您可以完全跳过外部闪存,让 MCU 在每次启动时将比特流发送到 FPGA。

一些 FPGA,例如 Xilinx ZYNQ,具有内置的硬核处理器。该处理器可以独立于 FPGA 启动,因此您可以为该处理器编写一个正常的引导加载程序,并让处理器负责更新 FPGA 比特流。

如果您的应用程序是 USB 外围设备,那么处理它的一种好方法是跳过闪存,并让 PC 上的 USB 驱动程序在每次启动时将比特流加载到 FPGA。不建议通过 FTDIchip GPIO 对其进行 Bitbanging,因为这需要很长时间。FTDIchip 和其他制造商对 SPI 和 JTAG 都有硬件支持。有了这些,您可以在每次启动时快速完成,而无需进行 bitbanging。

CPLD

通常没有内置的恢复机制。(可能有例外)

CPLD 是非常基本的设备。如果您想要比特流更新功能,则通常必须由外部 MCU 完成。通常您不会为 CPLD 实现比特流更新功能。相反,您从一开始就使您的设计没有错误。


推荐阅读