XILINX ZYNQ 7000 BOOT

news2024/11/25 0:27:17

参考UG585 内容
下面这张图是ZYNQ启动的关键流程
在这里插入图片描述
1.POR表示硬件复位,不关心Power-up也就是说冷热启动都行。Nor-POR就是非POR复位,有点软件应用复位的意思。
2.POR复位会复位所有寄存器。并且采集 HardWare boot pin的状态。这点很关键,
3.是否使用PLL如何是就会把外部时钟输入到PLL进行倍频,获得比外部时钟更高跟稳定的CLK。
4.执行BootROM,它是在ZYNQ芯片内部的一块只读存储器,其中的代码不可以更改。可以理解为XILINX写死一段启动代码在ZYNQ芯片中。上电后完成POR的复位动作,第一条执行的代码就是BootRom的代码。
需要理解的几个关键点,boot的作用是初始化必要的硬件然后从程序存储的地方加载程序运行。像ZYNQ这样的SOC来说,是一个复杂的系统,有非常多的外设可以使用。可能有SD卡,FLASH等储存设备记录了代码,这点和MCU单片机有很大的不同。单片机的应用场合比较简单,只需要从片内的FLASH启动即可。ZYNQ的使用场景复杂的多,内部没有用户的flash。那么BootRom就需要判断,用户的代码存放在什么位置,然后去运行它。程序的运行一般需要RAM,也就是可以单字节访问的储存器。ZYNQ内部有一个RAM成为OCM。
在这里插入图片描述
OCM是On Chip Memory,可以理解为一个片内的RAM。RAM用来运行程序,如果这个RAM够用那么就不需要使用外部内存,比如DDR。
如果需要使用外部DDR等设备,需要对外部设备进行初始化,并且把程序复制到外部RAM中运行。也就是程序需要一块内存(RAM)来运行,称为运行域。为了把程序从存储域搬移到运行域需要加载程序。显然BootRom做了这个事情。
现在就是看如何去选择之前提到的储存器
在这里插入图片描述
上面这张表是必须要懂的表,MIO为PS的PIN,可以理解为和ARM 或者MCU一样就是芯片的引脚。POR复位后会硬件会采集这些引脚的状态。MIO8,7表示引脚的电平规则,因为电平的采集就会涉及到高低电平。那么ZYNQ的硬件需要知道硬件的电平规则。然后MIO6事故PLL是否旁路的选择。MIO5.4.3 是引导器件的选择,显然有JTAG,NOR,NAND,SPI,SD卡。上电后硬件就会采集引脚状态然后BOOTRom去对于的器件找FSBL(一段代码)中的引导头,然后进行运行域的初始化,就是代码搬移到OCM。

那么就会有一个问题,BootRom需要知道所搬移代码的信息,比如搬移多少代码上去,代码是否加密等等信息。所以需要和程序约定好一个格式告诉BootRom自己的信息。这个信息块就是BootRom Header。

在这里插入图片描述

FSBL 就是BootRom搬运代码的称呼,称为第一阶段引导程序。
所谓第一阶段第二阶段并不重要,其实就是套娃。

加密是什么,就是程序代码进行了加密,需要解密才能正常运行。

PL作为APU的一个外设,在BOOTRom或者用户代码中去初始化。

二 CODE

EQU:给数字常量取一个符号名,相当于C语言中的define
AREA:指示汇编程序汇编新的代码或数据段。
SPACE:分配内存空间
PRESERVE8:当前文件堆栈需按照8字节对齐
EXPORT:声明一个标号具有全局属性,可被外部的文件使用
DCD:以字为单位分配内存,要求4字节对齐,并要求初始化这些内存
PROC:定义子程序,与ENDP成对使用,表示子程序结束
MSR:Move to Special register from Register. 恢复到特殊寄存器
WEAK:弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,如果外部文件没有定义也不出错。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。
IMPORT:声明标号来自外部文件,跟C语言中的EXTERN关键字类似
B:跳转到一个标号ALIGN编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即数,缺省表示4字节对齐。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。
END:到达文件的末尾,文件结束
IF,ELSE,ENDIF:汇编条件分支语句,跟C语言的if else类似
————————————————
版权声明:本文为CSDN博主「烹小鲜啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/denghuajing/article/details/128045438

在XXX_bsp中Libsrc->standalone->src->asm_vector.s为启动代码

.org 0
.text

.globl _vector_table

.section .vectors
_vector_table:
	B	_boot
	B	Undefined
	B	SVCHandler
	B	PrefetchAbortHandler
	B	DataAbortHandler
	NOP	/* Placeholder for address exception vector*/
	B	IRQHandler
	B	FIQHandler

_vector_table
汇编语言源程序中若没有ORG伪指令,则程序执行时,指令代码被放到自由内存空间的CS:0处;若有ORG伪指令,编译器则把其后的指令代码放到ORG伪指令指定的偏移地址。两个ORG伪指令之间,除了指令代码,若有自由空间,则用0填充。

显然从地址0开始存放中断向量表_boot 表示_boot的地址
SVCHander 为系统调用,然后是最后的IRQ,FIQ
文件接下来是 中断处理函数

IRQHandler:					/* IRQ vector handler */

	stmdb	sp!,{r0-r3,r12,lr}		/* state save from compiled code*/
#if FPU_HARD_FLOAT_ABI_ENABLED
	vpush {d0-d7}
	vpush {d16-d31}
	vmrs r1, FPSCR
	push {r1}
	vmrs r1, FPEXC
	push {r1}
#endif

#ifdef PROFILING
	ldr	r2, =prof_pc
	subs	r3, lr, #0
	str	r3, [r2]
#endif

	bl	IRQInterrupt			/* IRQ vector */

#if FPU_HARD_FLOAT_ABI_ENABLED
	pop 	{r1}
	vmsr    FPEXC, r1
	pop 	{r1}
	vmsr    FPSCR, r1
	vpop    {d16-d31}
	vpop    {d0-d7}
#endif
	ldmia	sp!,{r0-r3,r12,lr}		/* state restore from compiled code */


	subs	pc, lr, #4			/* adjust return */

-boot的内容在BOOT.S中
在这里插入图片描述
在这里插入图片描述
通过3个汇编文件逐渐进入到main函数

对于FSBL的main函数究竟做了些什么

在mai中有个相当重要的代码

/* * Read bootmode register */ BootModeRegister =
Xil_In32(BOOT_MODE_REG); BootModeRegister &= BOOT_MODES_MASK;
读取Boot mode寄存器的内容

这边部分的内容我觉得就是POR复位后BOOTRom读取的引脚信息。

后面FSBL根据BootModeRegister 的启动方式去拷贝代码到OCM中运行。
在这里插入图片描述
包含原地址目的地址,长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql一些常用函数

group_concat()函数首先根据group by指定的列进行分组,并且用分隔符分隔,将同一个分组中的值连接起来,返回一个字符串结果。 group_concat([distinct] 字段名 [order by 排序字段 asc/desc] [separator 分隔符])-- 指定排序方式和分隔符 se…

STM32F407 滴答定时器

介绍STM32F407滴答定时器配置方法、使用方式,封装延时函数得到精确的时间。 【1】介绍滴答定时器的章节 STM32F407参考手册中第10章介绍了滴答定时器的校准值。 M4权威指南介绍滴答定时器的章节,M3权威指南中与M4权威指南中的介绍一样。 【2】滴答定时…

Windows 引导启动流程详述(BIOS-UEFI)

Windows 启动流程详述 BIOS 和 UEFI 的由来BIOS 存在哪里BIOS 程序的功能BIOS 和 UEFI 的发展由来如何查看当前计算机是什么方式引导启动呢?Linux 下如何查看 BIOS 大小? 启动流程详述使用 BIOS 进行系统启动流程使用 UEFI 进行系统启动流程SEC阶段PEI阶…

专项练习15

目录 一、选择题 1、如果要打开名为 “window2"的新窗口,可以通过() 2、下列事件哪个不是由鼠标触发的事件() 3、Angular指令中哪种作用域可以继承父scope 4、下列哪些事件不支持冒泡?()…

微信小程序学习记录2 案例分享<智能家居UI>

效果 思路 页面分为4块 前三块 采用同样的class 替换三张矢量图 绑定三个单片机返回的JSON值 最后一块又分为左右两部分 左边部分 采用switch组件 绑定三个事件 右边部分则是普通的文字

记录生产mysql死锁解决过程

最近生产上每个星期都会有几次死锁告警异常,今天终于给处理了,待后续观察,记录下整个过程。 环境:springboot、mybatis、mysql(RC隔离级别) 表结构: CREATE TABLE table1 (id bigint NOT NULL AUTO_INCREMENT,prize…

ASP.NET Core MVC 从入门到精通系列文章(完)

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

redis高可用与持久化

文章目录 一、Redis 高可用1. 概念2. 高可用技术以及作用2.1 持久化2.2 主从复制2.3 哨兵2.4 集群 二、Redis 持久化1. 持久化的功能2. Redis 持久化方式 三、RDB 持久化1. 概述2. 触发条件2.1 手动触发2.2 自动触发2.3 其他自动发机制 3. 执行流程4. 启动时加载 四、AOF 持久化…

自动驾驶货车编队行驶-车辆通讯应用层数据交互要求

1 范围 本文件规定了合作式自动驾驶货车编队行驶时车辆通信应用层数据交互的通信系统架构、通用要求、 数据交互要求、消息层数据集定义等。本文件仅涉及编队成员内部进行编队控制及成员管理相关的车-车通 信交互,不涉及编队与其他实体(云平台、路侧单元…

关于jetBrains的插件translation的使用

文章目录 前言国内使用问题关于无法翻译问题关于无法语音解析问题关于百度翻译Api获取关于百度引擎的invalid account(未解决)关于阿里翻译Api获取关于阿里翻译引擎Wrong request parameter(未解决)有道翻译Api关于有道Ip Address错误(未解决) 前言 translation是一个非常好用…

chatgpt赋能python:Python长浮点型介绍

Python长浮点型介绍 Python是一种强大的编程语言,通过其众多的数据类型,使开发人员可以快速开发复杂的应用程序。其中,Python长浮点型就是Python支持的一种数据类型。长浮点型是指Python可以处理的浮点数的精度可以高达256位。 Python长浮点…

大像素全景,如何让自己的VR全景变得具有高级感?

一个成功的VR全景作品,如果想要在商业领域上获得一定影响力,那么VR全景本身的质量就是关键,如何让自己的VR全景变得具有高级感呢? 从艺术表达手法上,航拍是对VR全景很好的诠释,通过VR全景航拍,人…

Redis进阶 - Redis分片集群

原文首更地址,阅读效果更佳! Redis进阶 - Redis分片集群 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-sharded-cluster.html 搭建分片集群 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&a…

ROS自带OpenCV和本地OpenCV版本冲突问题解决

1、报错信息 首先catkin_make编译功能包没有任何问题,100%生成目标文件,但是报了警告:库文件libmyslam.so需要的是libopencv_core.so.3.4,可能会与libopencv_core.so.3.2冲突。根据工程经验,警告不用管,直…

《设计模式》中介者模式

《设计模式》中介者模式 定义: 中介者模式又称为调停者模式,用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其可以松散耦合,独立地改变它们之间的交互。属于行为型设计模式。 中介者…

前端解析后台返回得文件流导出得 pdf为空

封装的方法 download(res, type, filename) {// 创建blob对象,解析流数据const blob new Blob([res.data], {// 如果后端没返回下载文件类型,则需要手动设置:type: application/pdf;chartsetUTF-8 表示下载文档为pdf,如果是word则…

2023上半年软考系统分析师科目一整理-13

2023上半年软考系统分析师科目一整理-13 给定关系模式 R < U &#xff0c;F >&#xff0c; U {A&#xff0c;B&#xff0c;C&#xff0c;D &#xff0c;E} &#xff0c; F {B→A &#xff0c;D→A &#xff0c;A→E &#xff0c;AC→B }&#xff0c;则 R 的候选关键字为…

2023上半年软考系统分析师科目一整理-11

2023上半年软考系统分析师科目一整理-11 给定关系R(A,B,C,D,E) 和关系S(D,E,F,G&#xff09;&#xff0c;对其进行自然连接运算R ▷◁S后其结果集的属性列为( B )。 A. R.A, R.B, R.C, R.D, R.E, S.D, S.E B. R.A, R.B, R.C, R.D, R.E, S.F, S.G C. R.A, R.B, R.C, R.D, R.E,…

爬虫---某翻译响应解密和sign逆向

目标网址接口&#xff1a;aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl 仅供学习交流使用&#xff0c;非商业用途&#xff0c;如有侵权&#xff0c;请联系删除!!!仅供学习交流使用&#xff0c;非商业用途&#xff0c;如有侵权&#xff0c;请联系删除!!!仅供学习交流使用&…

软件测试技能,JMeter压力测试教程,设置集合点(十七)

一、前言 LoadRunner 中可以设置一个集合点&#xff0c;设置多个虚拟用户等待到一个时间点&#xff0c;到齐后一起发请求达到并发的目的 jmeter 中使用 同步定时器 Synchronizing Timer实现 LoadRunner 中集合点的功能&#xff0c;模拟多用户并发测试&#xff0c;即多个线程在…