zynq配置成jtag模式_浅谈ZYNQ的三种启动方式-JTAG、SD card、Flash

本文详细介绍了ZYNQ FPGA芯片的启动模式,包括从BootROM主动启动和JTAG被动启动,并重点讲解了如何通过制作BOOT.bin镜像文件实现SD卡启动。内容涵盖了从BootROM的初始化过程、FSBL(First Stage Boot Loader)和SSBL(Second Stage Boot Loader)的作用,到FSBL和BOOT.bin的生成步骤。同时,还提到了如何将程序固化的流程,包括Flash启动和SD卡启动的设置与操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Runas或者Debugas来运行程序。JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,优点是可以在线调试,缺点是断电后程序就丢失了。为了解决程序丢失的问题,可以制作镜像文件烧写到sd卡或者flash中,上电即可加载程序。

ZYNQ有两大类启动模式:从BootROM主动启动,从JTAG被动启动。

在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。即借助CPU来完成配置,这也是ZYNQ系列的不同之处。

板子依然使用的是zc702.

启动模式设置:

zynq具有多种启动方式:NOR,NAND,Quad-SPI,SDCard以及JTAG。zynq如何判断从哪里启动呢?上电后,zynq会根据模式管脚的设定选用boot的方式。而这个管脚的设定是通过核心板上的拨码开关实现的。zc702的拨码开关是sw16。

TheZC702boardsupportstheseconfigurationoptions:

•PSConfiguration:QuadSPIflashmemory

•PSConfiguration:ProcessorSystemBootfromSDCard(J64)

•PLConfiguration:USBJTAGconfigurationport(Digilentmodule)

•PLConfiguration:PlatformcableheaderJ2andflyingleadheaderJ58JTAGconfigurationports

db8f6d3291ef4d5139f7f63b0a5d58e7.png

JTAG启动:

配置界面如下:

9a230bcfe5e72f655b9493c449a0b54b.png

65b0359f98c1120da0ca0f036221a178.png

6009e60355e49bebaebed8c629ddaed3.png

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

通过制作镜像文件在外设控制器中启动,也称之为固化。固化需要三个文件:FSBL.elf、该工程的bit文件、该工程的elf文件,由此三个文件制作一个BOOT.bin文件。

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

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

阶段0:即传统的BootROM过程,zynq芯片里有个rom里面固化了一段不可修改的程序,只有zynq一上电,这段程序就会执行,它将初始化CPU和NAND、NOR、SD卡等基本外设。初始化好,BootROM读取存储器中的程序代码,并将FSBL拷贝到OCM(On-chipmemory)里,这个被拷贝到片上RAM执行的程序就来自于我们要制作的文件——BOOT.bin。

阶段1:第一阶段引导程序(FirstStageBootLoader,FSBL)启动,BOOT.bin开始执行:首先继续配置PS,PS初始化好后,再配置PL,最后还可以加载阶段2的代码。

阶段2:开始执行PS端代码,也可以是第二阶段引导程序(SecondStageBootLoader,SSBL)。完全在用户的控制之下,是可选的。

啰嗦第二遍:

BootROM负责:

1.上电复位以后,PS端即开始进行配置。在不使用JTAG的情况下,ARM将在片上的BootROM中开始执行代码。BootROM中的代码对NAND、NOR、Quad-SPI、SD与PCAP的基本外设控制器进行初始化,使得ARM核可以访问、使用这些外设。(而DDR等其他外设将在阶段1或者之后进行初始化。)

2.BootROM读取MIO[2..8]的引脚设置来确定启动设备,将选定设备的头192Kbyte内容,也就是FSBL,复制到OCM中,并将控制权交给FSBL。

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

FSBL负责:

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

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

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

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

关于PS配置:

Ps7_init.c和ps7_init.h,用于初始化CLK,DDR和MIO。Ps7_init.tcl完成的初始化和ps7_init.c代码完成的初始化是相同的。

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

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

制作BOOT.bin文件:

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

965a4f80d070dadae40a399de7f05355.png

工程名设为FSBL

ccb6dd1361d9348634999247d482d51f.png

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

c9ac0c265a338a484832f8655d947b30.png

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

d89dee1e9f068ae55ed028ce7d898da1.png

2.点击XilinxTools->CreatezynqBootImage

9c91d464003f1cfebb31b140a398e3d0.png

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

需要添加的文件如下:

d3596d8c9829fdea6ee3f03d2c4a8097.png

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

acfeef5cdbd8b4aa88fd232317b66771.png

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

0e392d9f0dba980ef77f08ffae786c1f.png

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

adb1f530f8fad1ebe1d0706e974d75a6.png

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

bcb425d058726f06371a65b8d1e65add.png

都添加完如下图:

0f216e8ea7b80ccd2dacadc2d698468d.png

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

bda7d87e4eda71162188a966871f06c3.png

SD卡启动

1.将生成的BOOT.bin文件拷贝到SD卡中,2.启动模式设置为SD卡启动,上电,程序就可以运行了。

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

Flash启动

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

2.开发板上电,

3.点击Xilinxtool-->ProgramFlash

bc1577c82cec9034d6895b7b46ad23c6.png

4.点击Program

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

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

6b019c61dec5b421cb31e33deb61a2c2.png

右键那个bsp工程,点击BoardSupportPacageSetting,勾选这两个库

3668bcb923ae4ef1a1cb26207e86cd57.png

总结:

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

编辑:hfy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值