zynq程序固化补充篇: 不切换启动模式强制烧写 您所在的位置:网站首页 fpga程序烧录id报错 zynq程序固化补充篇: 不切换启动模式强制烧写

zynq程序固化补充篇: 不切换启动模式强制烧写

2023-10-18 00:21| 来源: 网络整理| 查看: 265

问题描述

  使用SDK2018.2第一次进行烧写 Flash,在qspi模式下会报错,只有切换至jtag模式下才可以进行烧录,后续的再次烧录不会出现类似问题。但是调试的时候必须切回jtag模式(将BOOT MODE 5拉低才可以调试)   2017.2等版本时不会存在类似问题   硬件设计的更改在很多时候终归没有软件的更改灵活,有没有一种办法可以在不修改启动模式的情况下通过软件的修改强制烧写进去呢?

解决思路

在这里插入图片描述   如图为Zynq BOOT MODE配置,MIO[5:3]为Boot Devices设置为100,可以看出MIO[5]引脚为高时为QSPI模式,MIO[5]引脚为低时为JTAG Boot Mode模式。在硬件设计上面是将MIO上拉电阻,预留了下拉电阻   用sdk烧写时可以在交互窗口中找到如下打印信息:

在这里插入图片描述   确定现象后查阅xilinx相关文档说明,发现从VIVADO 2017.3版本开始,Xilinx官方为了使Zynq-7000和Zynq UltraScale +实现流程相同,在QSPI FLASH使用上做了变化,即Zynq-7000编程flash需要“指定的fsbl”。这个fsbl用于初始化系统(主要是运行ps7_init()函数)。   通过分析可知下载QSPI FLASH 的“指定的fsbl”文件与生成boot.bin文件的fsbl文件不同,这里是不能混淆的。   而QSPI编程要求器件以JTAG模式启动。(因为在QSPI引导模式下启动,则“指定的fsbl”将尝试从flash加载分区,从而导致flash编程的错误行为。导致不能下载flash或下载flash后不能启动。)   下图是官方解决办法的原始说明 在这里插入图片描述

最终办法:

  也就是说通过在“指定的fsbl”中的main.c中如下位置添加如下语句,防止FSBL在编程运行时从Flash设备加载任何现有分区。

/* * Read bootmode register */ BootModeRegister = Xil_In32(BOOT_MODE_REG); BootModeRegister &= BOOT_MODES_MASK; //add this line to trick boot mode to JTAG BootModeRegister = JTAG_MODE;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有