QuickBoot Flash Programming Algorithm

20 篇文章 0 订阅

**

QuickBoot Flash Programming 算法

**
1.擦除包含关键switch word的子扇区或块以关闭开关。
2.擦除重构区域的扇区或块。
3.将更新的比特流编程到重构区域。
4.确认更新区域已正确编程。
5.配置关键switch word为ON值以打开switch word,但这一步骤仅在验证更新区域之后。

QuickBoot实现依赖于以下元素:
Critical Switch Word
Flash Memory Overview and QuickBoot Flash Memory Component Mapping
Bitstream Image Size and Flash Memory Size Selection
Bitstream Separation for MMCM/PLL Lock or DCI Wait
QuickBoot Verification of the Update Image

Critical Switch Word
Critical Switch Word是一个特殊的字值。仅当Critical Switch Word位置包含准确的预定值时,开关才被视为接通。确切的Critical Switch Word值的存在与否决定了FPGA配置逻辑是否执行热启动跳转序列。
Xilinx FPGA通过包含32位字序列的位流(.bit文件)进行配置。32位字包含以下类型:
总线宽度自动检测字,FPGA用于在BPI开始时自动检测并行配置数据总线宽度,并选择映射模式配置。
标记位流开始的同步字,并将配置逻辑同步到所有配置模式下跟随同步字的包的32位边界。
包头字,用于指定寄存器和寄存器写入数据的数据字计数。
每个包的包命令或数据字。对于指定写入配置命令寄存器的报文,字是命令,例如IPROG命令。对于指定写入到WBST AR的数据包,数据字包括热引导跳跃地址。

Xilinx设计工具生成的所有位流按顺序由以下内容组成:
1.总线宽度自动检测字
2.同步字
3.定义FPGA配置的数据包
当FPGA从BPI闪存读取数据时,FPGA配置逻辑保持在第一阶段,直到它从其D[0:7]引脚上的总线宽度自动检测模式的第一个字检测到0xBB数据值。在初始搜索总线宽度自动检测模式时,FPGA有效地忽略所有传入的数据,直到它识别出一个有效的总线宽度自动检测模式。因此,因此,对于BPI模式配置,总线宽度自动检测模式的第一个字0x000000BB是QuickBoot方法的关键开关字。FPGA配置逻辑的其余阶段在发现总线宽度自动检测模式后才打开。
当FPGA从SPI闪存读取数据时,FPGA配置逻辑保持在其第一阶段,监控同步字0xAA995566的传入数据,以将自身同步到传入比特流的32位字的边界。在同步字的初始搜索过程中,FPGA有效地忽略所有传入数据,直到它识别出同步字。因此,对于SPI模式配置,同步字是QuickBoot方法的关键开关字。就QuickBoot关键开关字而言,FPGA配置逻辑的其余阶段直到找到同步字后才开启。
Flash Memory Overview and QuickBoot Flash Memory Component Mapping
QuickBoot闪存编程算法的实现需要了解NOR闪存体系结构和操作。特别是,QuickBoot闪存组件必须映射到特定的闪存区域,QuickBoot算法过程必须映射到这些特定区域的可用闪存操作。
NOR闪存包含数据字或数据字节的线性阵列。线性阵列被分割成可擦除的块或扇区。对于某些NOR闪存,扇区进一步细分为子扇区。
使用新数据值重新编程NOR闪存需要两步过程:
1.将选定段的所有数据位重置为1状态的擦除操作。
2.仅将数据位从1状态更改为0状态的一种程序操作。
擦除操作可以在块、扇区或子扇区上执行。即,通过每次擦除操作擦除指定段内的所有数据字或字节。程序操作可以在单个字或字节上执行。
闪存中QuickBoot组件的常规映射
由于修改闪存需要执行擦除操作,并且擦除操作会影响整个闪存段,闪存段体系结构决定了闪存中QuickBoot组件的位置:
QuickBoot标头按以下顺序放置:
QuickBoot标头第1部分(关键开关字)位于其自己的可擦除段中。
QuickBoot头文件第2部分在第1部分之后,但在与第1部分不同的闪存段中。
golden比特流映像位于闪存阵列中的QuickBoot头之后。
更新比特流区域放置在其自己的可擦除段中。更新映像不与黄金比特流映像共享任何可擦除的段。
关键开关字放在其自身的可擦除段内,这样作为擦除操作的析构函数过程只影响关键开关字。类似地,更新图像被放置在其自己的片段集合中,使得重新编程过程不会影响黄金比特流图像。
QuickBoot组件到BPI闪存的详细映射
Micron P30 flash memory中QuickBoot解决方案的BPI flash memory内容的详细映射如图1所示。关键开关字位于第一个可擦除块的末尾,它的大小为65,536 (0x00010000) 16位字。图中显示了一个好的和坏的更新比特流的例子。在一个好的更新位流中,为更新位流保留的区域包含一个有效的位流。在错误位流中,为更新位流保留的区域包含已损坏、不完整或未知的数据。在这里插入图片描述
对于好的更新示例,关键开关字位置包含第一个总线宽度自动检测字0x000000BB。FPGA配置逻辑通过以下顺序进行良好的更新示例:
1.开始总线宽度自动检测序列。
2.执行QuickBoot头文件第2部分中所遵循的热启动跳转序列。
3.通过加载更新比特流来结束。
对于坏更新示例,关键开关字位置不包含第一个总线宽度自动检测字。因此,对于坏的更新示例,FPGA配置逻辑将按照以下顺序进行:
1.继续搜索总线宽度自动检测词,忽略QuickBoot头部的第2部分。
2.查找标准总线宽度自动检测开始黄金比特流的字。
3.通过加载golden比特流来结束。
更新位流位于它自己的一组可擦除块中。更新位流的开始与它的第一个可擦除块的开始对齐,字地址为0x00100000。
Bitstream Image Size and Flash Memory Size Selection
Bitstream Separation for MMCM/PLL Lock or DCI Wait
在典型的FPGA配置过程中,FPGA在接近位流加载过程结束时开始加载设计的启动过程,并在到达位流结束前停止从闪存读取数据。然而,在某些情况下,FPGA启动过程被扩展。在这些情况下,FPGA可以继续读取闪存中比特流末端以外的数据。对于这种情况,闪存中的下一个(即,更新)位流应该与之前的(即,黄金)位流分离,以避免FPGA加载下一个位流,同时FPGA等待完成之前位流的启动过程。
QuickBoot Verification of the Update Image
QuickBoot解决方案的健壮性取决于QuickBoot编程解决方案可靠地检测更新比特流图像的正确或错误编程的能力。为了验证flash中更新比特流图像的正确性,QuickBoot解决方案采用循环冗余校验(CRC)方法验证更新比特流图像的完整性。
1.Xilinx设计工具提供的标准FPGA位流。
2.0xFFFFFFFF 32位填充剩余的保留更新区域的填充字。
3.根据步骤1和步骤2的数据计算CRC32。
在闪存内为更新位流图像分配一个固定区域。为了擦除和编程方便,更新区域开始和结束于已分配给更新图像的可擦除段的边界。
更新位流从更新区域的开始位置开始。在比特流结束后,虚拟字填充更新区域的剩余部分,除了区域的最后32位。当以MCS文件的形式生成更新图像时,将对更新区域的全部内容计算CRC32,除了最后32位以外。计算后的CRC32的补码放在更新区域的最后32位。因此,整个更新区域的完整性受到CRC32检查代码的保护。
为了验证更新区域,QuickBoot编程解决方案读取整个更新区域,包括补充的CRC32值,并计算CRC32。当更新图像的完整性良好时,数据的结果CRC32值和它的补充CRC32值期望匹配一个已知的常数,称为残差。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值