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

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

一文彻底搞懂Java 中的 SPI 是什么

《一文彻底搞懂Java中的SPI是什么》:本文主要介绍Java中的SPI是什么,本篇文章将通过经典题目、实战解析和面试官视角,帮助你从容应对“SPI”相关问题,赢得技术面试的加分项,需要的朋... 目录一、面试主题概述二、高频面试题汇总三、重点题目详解✅ 面试题1:Java 的 SPI 是什么?如何实现一个

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失