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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2