当前位置: 首页 > news >正文

江山易改本性难移之ZYNQ SDK QSPI固化bug及其解决方法

         之前在Vivado2018.3通过QSPI方式固化程序时出现问题,显示flash擦除成功,但最后总是不能写入到flash中。

        查资料发现从VIVADO 2017.3版本开始,Xilinx官方为了使Zynq-7000和Zynq UltraScale +实现流程相同,在QSPI FLASH使用上做了变化,即Zynq-7000编程flash需要“指定的fsbl”。因为在QSPI引导模式下启动,则“指定的fsbl”将尝试从flash加载分区,从而导致flash编程的错误行为。导致不能下载flash或下载flash后不能启动。

           总结一下,就是需要建两个FSBL程序,也可以生成BOOT.BIT以后,修改当前FSBL工程(本例程),一个用于生成BOOT.bin文件,一个用于加载,即Program flash。完整步骤如下:

(1)新建系统环境变量:我的电脑—属性—高级系统设置—环境变量;之后重启一下电脑。

        变量名:XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ

        变量值:10000000

(2)在vivado界面PS端选中QSPI方式,其中single SS 4bit IO与Dual Quad SPI方式要根据板卡上几颗QSPI flash以及位数选择,这里选择single SS 4bit IO;

(3)保存设计,编译生成bit文件;

(4)启动SDK,注意要将bit文件选中。新建fsbl程序,不用修改,此程序用于生成BOOT.bin文件。

        1)选择你的代码工程,右键选择 create boot image

                       

        2)弹出的窗口中可以看到生成的BIF文件路径,BIF文件是生成BOOT文件的配置文件,bif文件和bin文件放在同一个根目录下,并且再次确认是否是最新生成的文件;

之后点击Create Image,生成BOOT.bin文件。

当看到有这两文件时:说明已生成BOOT.bit文件

 (4)在不变的工程新建fsbl程序,先点击 Clean project,在main.c主程序中找到“Read bootmode register”的位置,并添加代码BootModeRegister = JTAG_MODE;再点击Build  project此处是为了将QSPI编程改为以JTAG模式启动,为了解决bug,

 也可以在fsbl_debug.h文件中加上#define FSBL_DEBUG_INFO语句,这是为了能够让串口打印出 Bootloader 的信息,之后保存并编译;

(5)QSPI flash固化

        1)FPGA板卡模式开关切换到QSPI启动模式;

        2)点击Xilinx—Program Flash,加载刚刚fsbl文件生成的BOOT.bin与fsbl_load文件生成的fsbl_load.elf,

其中Flash Type根据(2)中QSPI选中方式而定;

        3)点击Program,即可完成QSPI方式的程序固化。

重点+干货来了:

  环境实验:硬件板卡暂未有串口调试输出。 

当固化进去以后,如果你发现PL已经启动,但是PS暂未启动,那此时就需要修改这个选项:把这两个关闭。再重新固化以后,关机、重启,发现PL和PS均能正常运行。这就是妥妥的干货。

相关文章:

  • C#灵活的任务调度组件FluentScheduler
  • 「Movie-web」一个非常简洁独特的电影网站开源项目
  • 【Flutter 开发实战】Dart 基础篇:最基本的语法内容
  • 华为路由器及交换机基础配置命令大全
  • element plus自定义组件表单校验
  • 视频做成二维码查看?多格式视频二维码生成器的使用方法
  • 轮询定时器 清除 + vue2.0
  • 剑指offer题解合集——Week3day7
  • LeetCode 83. 删除排序链表中的重复元素
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • 【JAVA】在 Queue 中 poll()和 remove()有什么区别
  • 从零开始搭建一个个人博客并部署发布
  • 用通俗易懂的方式讲解:图解 Transformer 架构
  • pythonnumpy十三:借助numpy解方程
  • 嵌入式软件开发人员有必要学习系统移植的知识吗?【ppt获取见文末】
  • 230. Kth Smallest Element in a BST
  • Android 控件背景颜色处理
  • Java编程基础24——递归练习
  • js学习笔记
  • Laravel Mix运行时关于es2015报错解决方案
  • React16时代,该用什么姿势写 React ?
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Theano - 导数
  • vue-router 实现分析
  • 关于for循环的简单归纳
  • 前端_面试
  • 使用 Docker 部署 Spring Boot项目
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 怎样选择前端框架
  • 智能合约Solidity教程-事件和日志(一)
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​业务双活的数据切换思路设计(下)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $ git push -u origin master 推送到远程库出错
  • (1)(1.11) SiK Radio v2(一)
  • (2)(2.10) LTM telemetry
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (九)信息融合方式简介
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)ABI是什么
  • .bat批处理(六):替换字符串中匹配的子串
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net 简单实现MD5
  • .net 生成二级域名
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net2005怎么读string形的xml,不是xml文件。
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET简谈设计模式之(单件模式)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @WebServiceClient注解,wsdlLocation 可配置
  • [.net]官方水晶报表的使用以演示下载
  • [20170713] 无法访问SQL Server