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;



相关文章
|
9月前
|
传感器 Windows
(3)将固件加载到已有ArduPilot固件的主板上
(3)将固件加载到已有ArduPilot固件的主板上
83 2
|
9月前
|
存储 芯片 SoC
ZYNQ程序固化
ZYNQ程序固化
|
9月前
|
Linux 开发工具 异构计算
【ZYNQ】QSPI Flash 固化程序全攻略
【ZYNQ】QSPI Flash 固化程序全攻略
1605 0
|
Windows Python
MicroPython 玩转硬件系列3:上电自动执行程序
MicroPython 玩转硬件系列3:上电自动执行程序
|
Linux
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
【Linux系统开发】 x210开发板 虚拟驱动创建流程(驱动编译进内核)
167 0
|
传感器 Windows 内存技术
(4)(4.3) 将固件加载到已有ArduPilot固件的主板上
(4)(4.3) 将固件加载到已有ArduPilot固件的主板上
224 0
STM32最小系统使用FlyMcu烧写步骤
使用的是FlyMcu操作软件,首先搜索串口,点击搜索到之后选择,三个点选择即将要烧录的hex文件,找到STMISP,选择校验与编程后执行,将BOOT0置1(跳线帽变动),BOOT1不用管,下面选择DTR的低电平复位,RTS高电平进BootLoader,然后点击开始编程,如果软件无动作,可以按一下单片机上的按键,编程结束之后,将BOOT0置0。然后再按一下单片机中的按键及即可运行新程序了。
1238 0
STM32最小系统使用FlyMcu烧写步骤
|
存储 安全 开发工具
ZYNQ裸板:程序固化篇
一般的调试中我们都是通过 JTAG 接口将 FPGA 配置文件和应用程序下载到 ZYNQ 器件中。同样的,我们也可以将尝试把程序存储在非易失性存储器中,在上电或者复位时让程序自动运行,这个过程需要启动引导程序( Boot Loader) 的参与
452 0
ZYNQ裸板:程序固化篇
|
存储 缓存 网络协议
ZYNQ裸板:AXIDMA篇(简单模式)
DMA(Direct Memory Access,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器( CPU)介入处理。 DMA 是一种快速的数据传送方式, 通常用来传送数据量较多的数据块
1430 0
ZYNQ裸板:AXIDMA篇(简单模式)
|
XML 开发工具 数据格式
Hi3516开发笔记(十一):通过HiTools使用网口将uboot、kernel、roofts烧写进eMMC
前面烧写一直时烧写进入flush,是按照分区烧写。定制的板子挂的是eMMC,前面的烧写步骤一致,但是在烧写目标则时烧写eMMC了。重新走一遍从无到有通过网口刷定制板卡的uboot、kernel、rootfs。
Hi3516开发笔记(十一):通过HiTools使用网口将uboot、kernel、roofts烧写进eMMC