首页 > 其他分享 >Xilinx ZYNQ 7000+Vivado2015.2系列(五)之ZYNQ的三种启动方式-JTAG、SD card、Flash

Xilinx ZYNQ 7000+Vivado2015.2系列(五)之ZYNQ的三种启动方式-JTAG、SD card、Flash

时间:2024-03-27 16:00:11浏览次数:20  
标签:PS Flash Vivado2015.2 FSBL 程序 启动 ZYNQ 文件 JTAG

前言:

前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Run as或者Debug as来运行程序。

JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,

优点是可以在线调试,

缺点是断电后程序就丢失了。

为了解决程序丢失的问题,可以制作镜像文件烧写到sd卡或者flash中,上电即可加载程序。

ZYNQ有两大类启动模式:

从BootROM主动启动,

从JTAG被动启动。

在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。

即借助CPU来完成配置,这也是ZYNQ系列的不同之处。

板子依然使用的是zc702。

启动模式设置:

zynq 具有多种启动方式:

① NOR,

② NAND,

③ Quad-SPI,

④ SD Card

⑤ JTAG

zynq 如何判断从哪里启动呢?

上电后, zynq 会根据模式管脚的设定选用 boot 的方式。

而这个管脚的设定是通过核心板上的拨码开关实现的。

zc702的拨码开关是sw16。

The ZC702 board supports these configurationoptions:
• PS Configuration: Quad SPI flash memory
• PS Configuration: Processor System Boot from SD Card (J64)
• PL Configuration: USB JTAG configuration port (Digilent module)
• PL Configuration: Platform cable header J2 and flying lead header J58 JTAG configurationports

20171025111007054

JTAG启动:

配置界面如下:

20171024205045316

20171024205053259

20171024205100418

设置完之后点击Apply-->Debug即可开始调试,

Run as类似。

通过制作镜像文件在外设控制器中启动,也称之为固化。

固化需要三个文件:

① FSBL.elf

② 该工程的bit文件

③ 该工程的elf文件

由此三个文件制作一个BOOT.bin文件。

那么通过外设启动的过程是怎样的呢?

分为三个阶段,大多数的ARM都是这个启动过程。

阶段0:即传统的 BootROM 过程

zynq 芯片里有个 rom 里面固化了一段不可修改的程序,

只有 zynq 一上电, 这段程序就会执行,

它将初始化CPU和 NAND、 NOR、 SD卡等基本外设。

初始化好,BootROM读取存储器中的程序代码,并将FSBL拷贝到OCM(On-chip memory)里 ,

这个被拷贝到片上 RAM 执行的程序就来自于我们要制作的文件——BOOT.bin

阶段1:第一阶段引导程序(First Stage Boot Loader,FSBL)

BOOT.bin开始执行:

首先继续配置PS,PS初始化好后,

再配置PL,

最后还可以加载阶段2的代码。

阶段2:第二阶段引导程序(Second Stage Boot Loader,SSBL)

开始执行PS端代码

完全在用户的控制之下,是可选的。

BootROM负责:

上电复位以后,PS端即开始进行配置。

在不使用JTAG的情况下,ARM将在片上的BootROM中开始执行代码。

BootROM中的代码对NAND、NOR、Quad-SPI、SD与PCAP的基本外设控制器进行初始化,

使得ARM核可以访问、使用这些外设。(而DDR等其他外设将在阶段1或者之后进行初始化。)

BootROM读取MIO[2..8]的引脚设置来确定启动设备,

将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM中,并将控制权交给FSBL。

FSBL启动时可以使用整块256Kb的OCM,当FSBL开始运行后,器件就正式由由用户控制了。

FSBL负责:

根据Vivado中的配置,完成PS端的初始化。

使用比特流文件对PL进行配置

加载第二阶段引导程序(SSBL)或者裸跑程序(直接在ARM上运行无操作系统程序)到内存空间。

跳转执行SSBL或者裸跑程序。

关于PS配置:

Ps7_init.cps7_init.h,用于初始化CLKDDRMIO

Ps7_init.tcl完成的初始化和ps7_init.c代码完成的初始化是相同的。

由于不是通过JTAG运行,所以没有运行p7_init.tcl,直接在裸机程序开始处调用ps7_init()。

Xilinx为我们写好了一个FSBL程序,没有特殊要求可以直接使用。

制作BOOT.bin文件:

1.Vivado那边完成之后,打开sdk,新建应用工程

20171025094049117

工程名设为FSBL

20171025094500092

点击next选择自带的FSBL程序,右边是FSBL功能介绍

20171025094709424

点击Finish会自动编译,在Debug目录下可以找到FSBL.elf文件

20171025095429264

2.点击Xilinx Tools ->Create zynq Boot Image

20171025095555057

一般 该添加的文件它都会帮你添加好。

需要添加的文件如下:

20171025100250107

在FSBL文件夹下新建一个bootImage文件,点击Browse,将输出指向这里

20171025105026645

点击add,先添加FSBL.elf文件,作为bootloader

20171025100504472

再添加hw_platform下的.bit文件,这是PL部分的

20171025101043205

最后添加裸机程序.elf文件

20171025102017893

都添加完如下图:

20171025105236495

以上三个文件的添加顺序不可变,点击Create Image,就可以生成BOOT.bin文件了,默认的输出路径在bootImage下。

20171025105331038

SD卡启动

将生成的BOOT.bin文件拷贝到SD卡中,

启动模式设置为SD卡启动,上电,程序就可以运行了。

我这里的现象led闪烁,断电再上电,程序依然在,从SD卡加载的。

Flash启动

1.启动模式设置为QSPI启动,

2.开发板上电,

3.点击Xilinx tool-->Program Flash

20171025105913162

4.点击Program

下载好后程序就固化了,断电后重启,程序从QSPI Flash加载。

如果你使用已经存在的bsp文件时出现这种情况:

20171025103120266

右键那个bsp工程,点击Board  Support Pacage Setting,勾选这两个库

20171025103504977

总结:

主流的下载方式就这三种,基本可以满足你的一切需要了。

标签:PS,Flash,Vivado2015.2,FSBL,程序,启动,ZYNQ,文件,JTAG
From: https://www.cnblogs.com/L707/p/18099503

相关文章

  • Xilinx ZYNQ 7000+Vivado2015.2系列(四)之GPIO的三种方式:MIO、EMIO、AXI_GPIO
    前言:ZYNQ7000有三种GPIO:MIO,EMIO,AXI_GPIOMIO是固定管脚的,属于PS,使用时不消耗PL资源;EMIO通过PL扩展,使用时需要分配管脚,使用时消耗PL管脚资源;AXI_GPIO是封装好的IP核,PS通过M_AXI_GPIO接口控制PL部分实现IO,使用时消耗管脚资源和逻辑资源。使用的板子是zc702。1.MIO方式Zynq7000......
  • Xilinx ZYNQ 7000+Vivado2015.2系列(三)之HelloWorld实验(最小系统)(纯PS)
    前言:使用的板子是zc702。用Vivado的IP核搭建最小系统,包括ARM核(CPUxc7z020),DDR3(4×256M),一个UART串口(MiniUSB转串口),纯PS,通过串口打印出HelloWorld,工程虽小,五脏俱全,算是一种朝圣。配置要和板子对应,大家注意修改。操作步骤:硬件部分1.新建Vivado工程选择芯片型号xc7z020clg484_1......
  • Xilinx ZYNQ 7000+Vivado2015.2系列(二)之奇数分频和逻辑分析仪(ILA)的使用
    前言:偶数分频容易得到:N倍偶数分频,可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。奇数分频如何得到呢?第一部分 奇数分频奇数分频方法:N倍奇数分频,首先进行上升沿触发进行......
  • Xilinx ZYNQ 7000+Vivado2015.2系列(一)之流水灯(纯PL)
    原文链接:https://blog.csdn.net/u014485485/article/details/78056980前言:学习Xilinx的ZYNQ7000系列,用的板子是zc702(注意不是zedboard),SOC型号是xc7z020。虽然设计思路一样,但不同的套件引脚和io标准是有区别的,zc702评估板的的外观图如下,可以对照下自己的板子:作为入门体验,本设......
  • zynq Lwip学习笔记-recv_callback函数
    文章目录前言一、概述二、函数体三调用位置前言最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwipechoserver例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部......
  • zynq Lwip学习笔记-accept_callback函数
    文章目录前言`一、概述二、函数体三、调用关系前言`最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwipechoserver例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而......
  • 17. STM32内部FLASH
    一、STM32内部FLASH简介  不同型号的STM32F40xx/41xx,其FLASH容量也有所不同,最小的只有128K字节,最大的则达到了1024K字节。STM32F407ZGT6的FLASH容量为1024K字节,STM32F40xx/41xx的闪存模块组织如图所示:  STM32F4的闪存模块由主存储器、系统存储器、OPT区域......
  • 16. SPI读取FLASH
    一、EN25Q128简介  EN25Q128是大容量SPIFLASH产品,EN25Q128的容量为128Mb(16M字节)。学习这个芯片可以参考华邦公司的W25Q128芯片,因为它们是完全兼容的。  FLASH是常见的用于存储数据的半导体器件,它具有容量大、可重复擦写、按“扇区/块”擦除、掉电后数据可继续保存......
  • NAND和NOR Flash 完全应用笔记(应用调试篇)
    本文要点:给出了华为三星及英特尔的常用FLASH参考电路;结合datasheet解说2bit以及4bit的NANDFLASH;调试思路总结以及简单的调试经验分享;最新的3DXpoint技术介绍。首先,我要用这张图来说明存储器近70年的发展历程,纵观这70年的发展,可以发现主要是在容量,速度以及寿命等方面......
  • STM32工具使用--J-Flash烧录程序
            最近客户那边需要给他们烧程序,他们需要把板子给寄给我,我烧写好之后又发回去,这样一来一回就浪费不少时间,而且也比较麻烦,所以最近给它们出了一个如何烧写.hex程序文件的步骤,这样以后就不用再麻烦自己给他们烧写了,他们根据教程就能完成。    我使用的是P......