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启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx