Zynq 7000 系列之启动模式—Quad-SPI启动

news2024/10/7 12:25:30

Quad-SPI启动是一种高效的闪存启动方式,它利用Quad-SPI接口的高速数据传输能力来加速启动过程。Quad-SPI(四路串行外设接口)是一种改进的SPI(串行外设接口)协议,通过使用四条数据线而不是传统的单条数据线,实现了更高的数据传输速率。

1 特点

Quad-SPI 启动的主要特点有:
• 支持x1、x2和x4单设备配置。这些配置允许用户根据具体的存储需求和性能要求,灵活选择Quad-SPI接口的宽度。
• 支持双SS(Slave Select,从设备选择)、8位并行I/O设备配置。这种配置提供了更高的数据传输速率和更大的存储容量,适用于需要高速数据访问的应用。
• 支持双SS、4位堆叠I/O配置。这种配置可以在保持高数据传输速率的同时,减少引脚数量,降低硬件成本。
• 就地执行(Execute-in-place)选项。这允许直接从Quad-SPI Flash存储器中执行代码,无需先将其复制到其他内存区域,从而提高了系统启动速度和效率。

此外,在使用Quad-SPI Boot时,还需要注意以下几点:
• 虽然支持双SS、4位堆叠I/O设备配置,但BootROM仅在前16MB地址范围内进行搜索。BootROM访问连接到QSPI0_SS_B从设备选择信号的设备。
• 在Quad-SPI启动的情况下,如果需要验证映像,则启动映像应放置在除0x0之外的32K偏移量处(启动映像不应从0x0偏移量开始放置在Quad-SPI中)。
• 当使用超过16MB的Flash存储器时,存在特殊的复位要求。
• 当使用大于16MB的QSPI和RSA身份验证时,存在特定的启动映像要求。

总的来说,Quad-SPI Boot为嵌入式系统提供了高效、灵活的启动解决方案,可以满足各种应用场景的需求。

2 I/O配置检测

BootROM可以使用宽度检测(Width Detection,值为0xAA995566)参数值来检测Quad-SPI接口的预期I/O宽度。在8位并行的情况下,还会使用映像标识(Image Identification,值为0x584C4E58)参数值来进行检测。

2.1 4位I/O检测

在Quad-SPI启动过程中,BootROM会将控制器配置为4位I/O。这种配置包括单个设备和双4位堆叠的情况。BootROM以x1模式读取第一个(可能也是唯一的)Quad-SPI设备,并读取BootROM Header中的宽度检测参数。如果宽度检测参数等于0xAA995566,那么BootROM就假定找到了一个请求4位I/O配置的有效Header。这可能是一个设备,也可能是双4位堆叠配置。在后一种情况下,BootROM总是忽略第二个设备,但用户代码可以访问它。在x1模式下读取宽度检测参数后,BootROM会尝试在x4模式下读取该参数。如果x4模式失败,它会尝试x2模式。之后,BootROM会使用支持的最宽I/O总线宽度来访问Quad-SPI设备。
通过这种方式,BootROM能够智能地确定并配置Quad-SPI接口的I/O宽度,从而确保与连接的存储设备的正确通信。

2.2 8位I/O检测

BootROM还可以查找双设备和8位并行配置。此时,BootROM只读取BootROM Header中的偶数位,因为它只访问第一个设备,而Header信息跨两个设备分布。BootROM将形成一个32位字,该字包括宽度检测(位于0x20)和映像标识(位于0x24)参数值的偶数位。当BootROM检测到这种情况时,它会假定系统使用8位并行配置,并将控制器编程为x8操作模式。该模式用于启动过程的其余部分。

2.3 BootROM Header搜索

如果BootROM未检测到有效的Header信息,那么它将继续搜索,直到找到有效的Header信息或达到32MB的搜索限制。在4位堆叠I/O的情况下,仅搜索第一个Quad-SPI设备,并且搜索仅限于内存的前16MB。

BootROM具有强大的I/O配置检测能力,能够根据不同的配置模式(如4位I/O、8位并行I/O等)智能地配置Quad-SPI接口。当检测到有效的Header信息时,BootROM会相应地设置控制器的工作模式,以确保与存储设备的正确通信。此外,BootROM还具有Header搜索功能,能够在一定范围内搜索有效的Header信息,从而提高了系统的可靠性和容错能力。

2.4 MIO编程

在Quad-SPI启动模式过程中,加载到MIO_PIN寄存器的值如表6-9所示。最初,BootROM启用4位模式。如果宽度检测机制确定数据宽度为8位,则会启用表中所示的其他MIO引脚。
在这里插入图片描述

3 就地执行选项

对于就地执行选项,BootROM使用Quad-SPI控制器的线性寻址功能进行非安全启动模式。对于单个设备,初始FSBL/用户代码必须适合在内存的前16MB内;对于x8双Quad-SPI设备系统,则必须在内存的前32MB内。

4 配置寄存器设置

BootROM通过以下配置来设置qspi.LQSPI_CFG:
• CLK_POL:0,CLK_PH:0
• BAUD_RATE_DIV:1(除以4)
• INST_CODE设置为: x1模式 = 0x03,x2模式 = 0x3B,x4模式 = 0x6B
• DUMMY_BYTE设置为: x1模式 = 0,x2和x4模式 = 1
• 如果使用双x4配置,则设置SEP_BUS和TWO_MEM

通过这些设置,BootROM确保了Quad-SPI接口的正确配置,以便与连接的设备进行通信。根据检测到的I/O宽度,BootROM会相应地调整配置寄存器的值,以优化数据传输效率。此外,就地执行选项允许BootROM直接从Quad-SPI闪存中执行代码,而无需将其加载到RAM中,这有助于减少启动时间和内存占用。

5 启动时间优化

在Quad-SPI启动过程中,可以通过在读取闪存内容到OCM(片上存储器)之前修改操作模式来加速启动过程。通过编程BootROM Header寄存器初始化参数来改进启动时间或选择模式。

以下示例中的寄存器优化值来源于供应商的数据手册。这些都是示例,可能并未针对特定的闪存设备或板卡设计进行优化。这些设置假定PS_CLK为33 MHz。如果使用了更快的时钟,则需要考虑使用更大的分频器。
MIO多路复用器、时钟控制和其他配置的优化设置如表6-10所示。如果某个寄存器的宽度或安全组合未列出,则使用BootROM后的值。
在这里插入图片描述
通过优化这些配置,可以确保Quad-SPI接口以最高效率工作,从而加快从闪存中读取数据的速度,减少启动时间。

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

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

相关文章

Typora配置PicGo图床,将图片文件上传到gitee厂库,获取图片链接显示在md文件中

Typora配置PicGo图床,将图片文件上传到gitee厂库,获取图片链接显示在md文件中 创建Gitee创库和配置私人令牌 名字、路径、描述自己随便添,但是必须开源,链接才能可以访问: 进入偏好设置 > 图像 > 选择PicGo-Cor…

基于java+springboot+vue实现的物流管理系统(文末源码+Lw)208

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套物流管理系统有管理员和用户…

Windows使用bat远程操作Linux并执行命令

背景:让客户可以简单在Windows中能自己执行 Linux中的脚本,傻瓜式操作! 方法:做一个简单的bat脚本!能远程连接到Linux,并执行Linux命令!客户双击就能使用! 1、原先上网查询到使用P…

大厂常见算法50题-替换空格

专栏持续更新50道算法题,都是大厂高频算法题,建议关注, 一起巧‘背’算法! 文章目录 题目解法一 String类replace方法解法二 遍历替换总结 题目 解法一 String类replace方法 String类自带的replace,方法传入两个char类型的参数,分…

Pixelmator Pro for Mac:简洁而强大的图像编辑软件

Pixelmator Pro for Mac是一款专为Mac用户设计的图像编辑软件,它集简洁的操作界面与强大的功能于一身,为用户提供了卓越的图像编辑体验。 Pixelmator Pro for Mac v3.5.9中文激活版下载 该软件支持多种文件格式,包括常见的JPEG、PNG、TIFF等&…

Gromacs——教程学习(6)

谈谈怎么判断分子动力学模拟是否达到了平衡 在计算RMSD之前必须先通过最小二乘法将各帧结构相对于参考结构进行最大程度叠合,从而消除体系的整体运动而令RMSD只体现生物分子内部结构的变化,这称为align或者least squares fit。 需要注意的是&#xff0…

Rundeck(四)安全配置

自动化运维工具rundeck GitHub - rundeck 是java开发的开源自动化服务,具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务,适合运维自动化管理、自动发布管理、运维数据分析等 网站:https://www.rundeck.co…

【golang-ent】go-zero框架 整合 ent orm框架实现一对一 一对多 多种姿势查询方式

一、ent的 O2O 问题 官方文档如下: https://entgo.io/zh/docs/schema-edges#o2o-same-type 1、ent O2O问题 官方提供了三种 one2one的方式,可以看到他全部使用了 mysql的 foregionKey 的方式进行关联,虽然举例了单表和双表的不同使用方式,但是我们实际使用mysql中是不创建…

flutter笔记-webrtc使用1:依赖本地包socket.io-client

文章目录 1. 示例工程2. yaml 修改3. 使用4. socketio 关于自定义服务器自定义签名的问题封装成async和await方式 本文开始介绍webrtc的使用,阅读本文的前提是假设你已经使用过webrtc,了解webrtc的交互机制,不了解的可以看之前的文章&#xf…

【Python】全面掌握 Collections Deque:队列与栈的高效实现及动态内存管理指南

文章目录 第一章:deque 的定义和特性1. 什么是双端队列(deque)2. deque 与普通列表(list)的性能差异 第二章:构造函数1. 如何创建一个 deque2. 可选参数 maxlen 的作用和使用场景 第三章:添加和…

信息泄露后担心被恶意点了网贷怎么办?

在当今信息时代,个人信息泄露已成为一个普遍现象,而泄露的信息可能被不法分子用于进行恶意行为,如恶意申贷。一旦被恶意申贷,可能会导致信用受损、法律责任等一系列问题。那么,信息泄露后担心被恶意申贷了怎么办呢?本…

金三银四面试题(二十三):装饰器模式知多少?

什么是装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许动态地向对象添加新的行为,而无需修改原始对象的结构。通过将对象包装在一个或多个装饰器对象中,装饰器模式可以增强原始对象的功能。 装…

Swift - 枚举

文章目录 Swift - 枚举1. 枚举的基本用法2. 关联值(Associated Values)3. 关联值举例4. 原始值5. 隐式原始值(Implicitly Assigned Raw Values)6. 递归枚举(Recursive Enumeration)7. MemoryLayout Swift -…

ESP32-C3第二路串口(非调试)串口打通(2)

接前一篇文章:ESP32-C3第二路串口(非调试)串口打通(1) 本文内容参考: ESP32爬坑之旅②——初识FreeRTOS_esp32 xtaskcreate-CSDN博客 特此致谢! 上一回讲解了ESP32-C3系列芯片UART引脚复用的细…

安卓常用组件(启停活动页面、活动之间传递信息、收发应用广播、操作后台服务)

启停活动页面 Activity的启动和结束 页面跳转可以使用startActivity接口,具体格式为startActivity(new Intent(this, 目标页面.class));。 关闭一个页面可以直接调用finish();方法即可退出页面。 Activity的生命周期 页面在安卓有个新的名字叫活动,因…

指导网友完成一起Linux服务器系统文件删除导致不能启动情况下的数据恢复案例

昨日有网友在微信群发起救助,Linux系统不能启动,使用救援U盘也无法恢复,协助他进行了数据恢复,本文记录了处置过程。 图片为网友提供,照得歪歪扭扭的,将就着看看吧。 一、问题现象 1、报错信息 Linux服…

Linux 第十一章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

比较美观即将跳转html源码

源码介绍 比较美观即将跳转html源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 源码截图 比较美观的一个跳转界面,修改方法如上&…

【Spring】IOC/DI中常用的注解@Lazy、@Scope与@Conditional

目录 1、Lazy 懒加载bean 1.1、与component配合使用 1.2、与Bean注解配合使用 2、Scope bean的作用域 2.1、不指定Scope 2.2、指定Scope为 prototype 3、Conditional 条件注解 1、Lazy 懒加载bean Lazy用于指定单例bean实例化的时机,在没有指定此注解时&…

异常处理Exception(一)

文章目录 1、添加异常捕捉2、链式CATCH3、一个CTACH捕捉多个异常4、捕捉所有异常总结 有些代码可以通过语法检查,但运行时会发生错误而崩溃,比如除数是0的情况。对于这类代码,需要使用 TRY, CATCH进行异常捕捉,避免代…