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

简介: 使用SDK2018.2第一次进行烧写 Flash,在qspi模式下会报错,只有切换至jtag模式下才可以进行烧录,后续的再次烧录不会出现类似问题。但是调试的时候必须切回jtag模式(将BOOT MODE 5拉低才可以调试)

问题描述

 使用SDK2018.2第一次进行烧写 Flash,在qspi模式下会报错,只有切换至jtag模式下才可以进行烧录,后续的再次烧录不会出现类似问题。但是调试的时候必须切回jtag模式(将BOOT MODE 5拉低才可以调试)

 2017.2等版本时不会存在类似问题

 硬件设计的更改在很多时候终归没有软件的更改灵活,有没有一种办法可以在不修改启动模式的情况下通过软件的修改强制烧写进去呢?

解决思路b97ec47f217347d1b876f36f30bb37af.png

如图为Zynq BOOT MODE配置,MIO[5:3]为Boot Devices设置为100,可以看出MIO[5]引脚为高时为QSPI模式,MIO[5]引脚为低时为JTAG Boot Mode模式。在硬件设计上面是将MIO上拉电阻,预留了下拉电阻

 用sdk烧写时可以在交互窗口中找到如下打印信息:

****** xilinx Program Flash
****** Program Flash v2017.3 (64-bit)
**** sW Build 2018833 on Wed 0ct 4 19:58:22 MDT 2017
** Copyright 1986-2017 xilinx, Inc. All Rights Reserved. Connecting to hw server @ TCP:127.0.0.1:3121 Connected to hw server @TCP:127.0.0.1:3121 Available targets and devices:
Target0:jsn-JTAG-HS3-210299A17FB8
Device 0:jSn-JTAG-HS3-210299A17FB8-4ba00477-0 Retrieving Flash info...
Initialization done, programming the memory BOOT MODE REG = 0x00000001
WARNING: [Xicom 50-100] The current boot mode is ospI.
If flash programming fails, configure device for JTAG boot mode and try again. f probe 日日日
Performing Erase Operation... Erase Operation successful.
INFO: [Xicom 50-44] Elapsed time = 0 sec. Performing Blank Check Operation...
0%...INFO: 「Xicom 50-44] Elapsed time = 1 sec.
Blank Check Operation unsuccessful. The part is not blank.
ERROR: Flash Operation Failed Hx--1024

确定现象后查阅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后不能启动。)

 下图是官方解决办法的原始说明

6b8b446a02e243d29a9ad6f9e4358c21.png最终办法:

 也就是说通过在“指定的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;



相关文章
|
存储 并行计算 Linux
国产之路:复旦微FMQL调试笔记1:PS网口
FPGA,全程现场可编程门阵列,是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。换个简单通俗的介绍方式,就好比一个全能的运动员,FPGA就是这么神奇的可以通过设定而实现各种复杂的功能电路。
2350 0
国产之路:复旦微FMQL调试笔记1:PS网口
|
开发工具 Perl
zynq 7000 sdk下裸机can(ps/pl) 调试
zynq 7000 sdk下裸机can(ps/pl) 调试
1230 0
zynq 7000 sdk下裸机can(ps/pl) 调试
|
Linux 开发工具 内存技术
国产之路:复旦微zynq调试笔记2--PL网口
PL侧的网口需求相较于PS部分还是有一定区别的,主要需要添加axi ethernet 的移植
3302 0
|
Linux 开发工具 异构计算
【ZYNQ】QSPI Flash 固化程序全攻略
【ZYNQ】QSPI Flash 固化程序全攻略
3171 0
|
存储 芯片 SoC
ZYNQ程序固化
ZYNQ程序固化
|
存储 开发工具 芯片
ZYNQ-UART串口中断测试
ZYNQ-UART串口中断测试
1336 0
ZYNQ-UART串口中断测试
|
开发工具 芯片 Perl
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
2722 0
|
测试技术 Perl
【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例
【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例
691 0
【ZYNQ】SPI 简介及 EMIO 模拟 SPI 驱动示例
【ZYNQ】SPI 简介及 EMIO 模拟 SPI 驱动示例
1414 0
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
1686 0