大于16MB的QSPI存放程序引起的ZYNQ重启风险

Posted liuwanpeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大于16MB的QSPI存放程序引起的ZYNQ重启风险相关的知识,希望对你有一定的参考价值。

  ZYNQ芯片是近两年比较流行的片子,双ARM+FPGA,在使用分立FPGA和CPU的场合很容易替代原来的分立器件。

  ZYNQ可以外接QSPI FLASH作为程序的存储介质。

  QSPI和SPI flash是串行接口的NOR FLASH,在设计支持,容量都比较小,所以协议中只留了3Bytes寻址,也就是最大16MB空间。但是随着工艺和技术的提升,现在32MB、64MB,甚至128MB和更大容量的SPI/QSPI flash都出现了。

  

  以32MB为例,当需要访问大于16MB的地址是,新的器件提供了两种方法:

  1. 切换bank,每个bank 16MB,地址扔采用3Byte模式,只能访问此bank,需要访问高地址时,切换到高bank;

  2. 切换到4Btyes地址模式,通过命令,可以把flash从3Bytes传统模式切换到4Bytes新模式

 

  以上方法都可以实现大于16MB地址的访问,软件可以随便玩。但是,ZYNQ有个设计问题,固化到片子内部的bootrom,“固执”得认为外面接的qpsi flash是16MB的,只能访问这16MB:

  如果cold reset,flash自然会处于BOOTROM认识的状态;

  但是warm reset时,如果之前切换到别的bank或者进入4Bytes模式,就会导致BOOTROM找不到正确的景象,从而启动失败。这是由血泪教训验证出来的。所以软件在主动复位之前,一定要把flash设置为默认的模式;如果系统外接了硬件看门狗,看门狗也reset要一并拉到flash的reset引脚上!!!

 

 

  

以上是关于大于16MB的QSPI存放程序引起的ZYNQ重启风险的主要内容,如果未能解决你的问题,请参考以下文章

Zynq ZC702平台 QSPI + eMMC实现

zynq中uboot的qspi启动报错及解决办法

ZYNQ7000 启动流程解析

xilinx-zynq教程5-Uboot

STM32 链接器脚本仅用于来自 FLASH 的启动脚本,其他一切来自 RAM

ZYNQ的Linux Linaro系统镜像制作SD卡启动