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

2024-04-29 14:04

本文主要是介绍Zynq 7000 系列之启动模式—Quad-SPI启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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接口以最高效率工作,从而加快从闪存中读取数据的速度,减少启动时间。

这篇关于Zynq 7000 系列之启动模式—Quad-SPI启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946290

相关文章

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin