Zynq Qspi控制器应用笔记

Zynq Qspi控制器应用笔记

Hello,panda

1 Zynq Qspi控制器

Zynq Qspi控制器支持三种模式:I/O模式、线性地址模式和传统SPI模式,其中线性地址模式双片选支持最大的线性地址空间为32MB,可通过PS DMA读取。

1.1 线性地址模式

线性地址模式只可从Qspi Flash中读数。在配置QSPI BOOT时,BOOT ROM工作在线性地址模式,且访问时钟为ARM接入的晶振时钟,因此在选用晶振时频率不能大于Flash的最高访问时钟频率。

线性地址模式下IO可以配置为单片选4bit接口、双片选8bit并行接口和双片选stacked 接口,单片器件时必须接到QSPI0上。单片QSPI Flash线性地址映射空间为0xFC00_0000~0xFCFF_FFFF,若采用两片,必须是同一生产厂家,保证协议相同,在配置为双片选8bit并行接口时,两片Flash必须要是同样容量同一厂家器件,保证访问完全同步,寻址空间为0xFC00_0000~0xFDFF_FFFF。

配置为双片选stacked 接口时,容量可以不同,但必须是相同协议的器件。但第一片器件建议使用128Mb器件,这样不会存在地址空区。线性地址模式的读操作极为简单,在确保TxFIFO和RxFIFO为空的情况下设置qspi.Config_reg[Man_start_en]和qspi.Config_reg[PCS]为0,qspi.LQSPI_CFG.[LQ_MODE]为1即可。

1.2  IO模式

在IO模式下,访问QSPI Flash的命令、地址和数据都根据SPI Flash数据手册的规定由用户软件组织写到FIFO中,控制器负责将其串行化后从总线发出。在IO模式下,可选择自动和手动两种操作模式,手动模式下又有自动片选和手动片选两种模式。自动模式由发数据转为收数据时存在一定局限,因此在实际使用中多为手动模式。

QSPI控制器提供了四个可将数据写到FIFO的TXD寄存器,如下表1所示。

表1 TXD寄存器


寄存器


数据格式


功能


[31:24]


[23:16]


[15:0]


[7:0]


TXD0


Data3


Data2


Data1


Data0/CMD


传输1byte命令3byte数据或4byte数据


TXD1


保留


保留


保留


Data0/CMD


传输1byte命令


TXD2


保留


保留


Data1


Data0/CMD


传输1byte命令和1byte数据


TXD3


保留


Data2


Data1


Data0/CMD


传输1byte命令和2byte数据

这样就提供了丰富的选择,无论是按字写、按字节、按双字节三字节都可以,但需要注意的是在不同寄存器间切换时需要等待FIFO已经为空状态。TxFIFO和RxFIFO使用同一个门时钟,因此对于每一个字节,包括命令和地址,每从TxFIFO取出一个字节,一个自己的数据也会写入到RxFIFO中。

为了从SPI Flash读数据,软件除了写入相关的命令、地址、模式、dummy等外,还必须向TxFIFO写和读数据个数等额的Dummy数据,这样才会有控制器写RxFIFO的时钟。

需要特别注意的是,在IO模式下,控制器自动识别用户指令,在控制器使能,且片选有效的情况下写入FIFO的第一条指令被控制器认为是命令,命令总是通过数据线D0发出,命令+数据最长为4字节,也就是说在发出读写命令时,有效地址位总是3字节,只能访问16MB地址空间。

控制器自动识别含义的命令如表2所示。

表2 控制器自动识别含义的命令


命令


含义


描述


READ


读数据,CMD=0x03


命令通过D0发出;数据通过D0接收


FAST_READ


快速读数据,CMD=0xB


命令通过D0发出;数据通过D0接收


DOR


双IO读数据,CMD=0x3B


命令通过D0发出;数据通过D[1:0]接收


QOR


四IO线读数据,CMD=0x6B


命令通过D0发出;数据通过D[3:0]接收


DIOR


双IO命令,四IO数据,CMD=BB


命令通过D[1:0]发出,数据通过D[3:0]接收


QIOR


四IO命令,四IO数据,CMD=EB


命令通过D[3:0]发出,数据通过D[3:0]接收


PP


页编程命令,CMD=02


命令通过D0发出,数据通过D0发出


QPP


四IO页编程命令,CMD=32或38


命令通过D0发出,数据通过D0[3:0]发出

无论是线性地址模式还是IO模式访问QSPI,控制器均只支持表2所示的命令并自动切换控制器工作模式。在表2所列命令之外的,控制器均默认通过D0发出和接收。

2 QSPI Flash选择

Zynq Qspi Flash控制器并不支持所有的Qspi Flash器件,因此在选择Qspi Flash时必须满足:

①   支持QOR命令:BootRom默认方式;

②   支持3字节地址模式:默认最大支持16MB,超出16MB部分通过地址寄存器设置后仍可通过3字节地址模式访问的。

不支持Qspi Flash器件见UG585 12.2.6小节的描述。

2.1 QSPI Flash操作实例

以镁光的N25Q512 Qspi Flash为例,简要说明要点:

N25Q512 QspiFlash支持Extended、Dual和Quad三种SPI协议模式,默认为Extended模式,默认模式即和Zynq QSPI 控制器访问协议匹配。

N25Q512 QspiFlash共512Mb的密度,分成4个BANK,每个BANK密度为16MB,可以通过Extended Address Register或者切换到4字节地址模式来对16MB以上的空间进行访问。因为Zynq Qspi Flash仅支持3字节地址模式,因此访问高地址空间时,通过切换Extended Address Register来实现。通过该方式存在一定的风险,那就是BootRom只能访问低16MB空间,为避免镜像写到高地址空间去,在每次用Xilinx工具烧写Flash前一定要重新断电重启,使Flash的Extended
AddressRegister恢复到默认状态。

N25Q512 QspiFlash在Erase、Program和访问内部寄存器前一定要先发出写使能命令(06H);Erase、Program命令发出后一定要读FlagStatus寄存器。

N25Q512 QspiFlash,擦除可以是子页擦除(4KB)、页擦除(64KB)和Die擦除(32MB)。一页大小为256B,因此每个Program命令只能写256字节的数据。

3 作为BOOT器件的考虑

在使用Qspi Flash需要注意:

①    BootROM只能访问低16M(单SS)或低32M(双SS),因此镜像必须存储下可访问空间内;

②    单SS时,启动器件必须挂在QSPI控制0上;

③    双SS并行8bit模式时BootROM的搜索步长是64KB,其模式为32KB,因此为减少搜索时间,启动镜像最好从地址0开始。

4 资源

Xilinx提供裸机板级支持包、Uboot驱动和Linux驱动。

①   Xilinx板级支持包实例:

/SDK/2015.2/data/embeddedsw/XilinxProcessorIPLib/drivers/qspips_v3_2/examples;

②   Uboot驱动:/u-boot-xlnx-master/drivers/spi/zynq_qspi.c

③   Linux驱动:/dirvers/spi/zynq-qspi.c,说明文档在:

www.wiki.xilinx.com/Zynq+QSPI+Driver

④   Hello,Panda讨论群:300148644

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 20:33:31

Zynq Qspi控制器应用笔记的相关文章

Zynq Fatfs文件系统应用笔记

Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统采用在Bare-Metal和轻量级操作系统中常用的FatFs,版本为v0.10b. 在开始介绍FatFs文件系统在Zynq实现之前一定要先对FAT32文件系统有一个清晰的了解. 1 FAT32文件系统 应用笔记针对SD上的FAT32文件系统,在对文件系统作详细介绍之前,先回顾一下硬盘的结构,如图1: 图1 硬盘结构 对一个机械硬盘而

Zynq PS DMA控制器应用笔记

Zynq PS DMA应用笔记 Hello,Panda Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330(PL-330)实现.有关DMA控制器的硬件细节及相关指令集.编程实例内容参考ARM官方文档: DDI0424D:dma330_r1p2_trm.pdf DAI0239A:dma330_example_programs.pdf 本文开发环境为Xilinx SDK2015.2,DMA库版本为dmaps_v2_1. 1 结构特点 DMA控制器具有以下的特点: n   

dispatcher前端控制器学习笔记

1.dispatcher前段控制器的作用 1.文件上传解析,如果请求类型是multipart,将通过MutilpartResolver进行文件上传解析. 2.通过HandlerMapping,将请求映射到处理器 3.通过HandlerAdapter支持多种类型的处理器 4.通过ViewResolver解析逻辑视图名到具体视图实现 5.本地化解析 6.渲染具体的视图等 7.如果执行过程中遇到异常将交给HandlerExcpetionResolver来解析 DispatcherServlet在web

backbone.js实战之导航控制器学习笔记

Backbone框架中提供了两个重要的类模型--导航控制器(router)和历史(history),router封装了兼容各类浏览器history的方案,通过使用浏览器的hash对象和HTML 5中 pushState方法, 将某阶段特殊的URL或锚点地址与既定的事件(event)或函数(action)相绑定.输入这些URL地址时,对应完成 不同的功能,从而实现在单页富应用中分享和收藏的功能. 1. History 对象的方法a. 功能描述b. 实现代码 a.html <head> <t

专用于jsp到jsp/html的转发控制器--学习笔记

<!-- 专用于jsp到jsp/html的转发控制器 --> <bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <!-- 转发到真实视图名 --> <property name="viewName" value="/WEB-INF/05_ind

PID控制器开发笔记之二:积分分离PID控制器的实现

前面的文章中,我们已经讲述了PID控制器的实现,包括位置型PID控制器和增量型PID控制器.但这个实现只是最基本的实现,并没有考虑任何的干扰情况.在本节及后续的一些章节,我们就来讨论一下经典PID控制器的优化与改进.这一节我们首先来讨论针对积分项的积分分离优化算法. 1.基本思想 我们已经讲述了PID控制引入积分主要是为了消除静差,提高控制精度.但在过程的启动.结束或大幅度增减设定值时,短时间内系统输出有很大偏差,会造成PID运算的积分累积,引起超调或者振荡.为了解决这一干扰,人们引入了积分分离

PID控制器开发笔记之三:抗积分饱和PID控制器的实现

积分作用的引入是为了消除系统的静差,提高控制精度.但是如果一个系统总是存在统一个方向的偏差,就可能无限累加而进而饱和,极大影响系统性能.抗积分饱和就是用以解决这一问题的方法之一.这一节我们就来实现抗积分饱和的PID算法. 1.抗积分饱和的基本思想 所谓积分饱和就是指系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而扩大,从而导致控制器输出不断增大超出正常范围进入饱和区.当系统出现反响的偏差时,需要首先从饱和区退出,而不能对反向的偏差进行快速的响应. 为了解决积分饱和的问题,人们引

PID控制器开发笔记之四:梯形积分PID控制器的实现

从微积分的基本原理看,积分的实现是在无限细分的情况下进行的矩形加和计算.但是在离散状态下,时间间隔已经足够大,矩形积分在某些时候显得精度要低了一些,于是梯形积分被提出来以提升积分精度. 1.梯形积分基本思路 在PID控制其中,积分项的作用是消除余差,为了尽量减小余差,应提高积分项的运算精度.在积分项中,默认是按矩形方式来计算积分,将矩形积分改为梯形积分可以提高运算精度.其计算公式为: 于是如果在位置型PID算法中引入梯形积分则可以修改计算公式如下: 同样要在增量型PID算法中引入梯形积分则可以修

spi-mem: 为SPI存储器生态系统带来一些一致性

在本文中,我们将介绍关于spi-mem Linux内核框架的工作,该框架将允许在SPI NOR设备和常规SPI设备以及SPI NAND设备上复用SPI控制器驱动程序. 从SPI到双线.四线.八线SPI 在过去,SPI是一个简单的协议,总线上的所有设备只共享3根信号线: MISO: Master In Slave Out,主设备输入从设备输出线 MOSI: Master Out Slave In,主设备输出从设备输入线 SCLK: Serial Clock,时钟线 另外每个设备有一个独立信号线,用