原文地址:http://blog.csdn.net/haoxingheng/article/details/47399437

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,说明文档在:

http://blog.csdn.net/haoxingheng/article/details/47399437

Zynq Qspi控制器应用笔记相关推荐

  1. Zynq Fatfs文件系统应用笔记

    Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统采用在Bare-Metal和轻量级 ...

  2. Zynq PS DMA控制器应用笔记

    Zynq PS DMA应用笔记 Hello,Panda Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330(PL-330)实现.有关DMA控制器的硬件细节及相关指令集.编程 ...

  3. linux zynq ps dma,Zynq PS DMA控制器应用笔记

    Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330(PL-330)实现.有关DMA控制器的硬件细节及相关指令集.编程实例内容参考ARM官方文档: DDI0424D:dma3 ...

  4. (13)Zynq DDR控制器介绍

    1.1 Zynq DDR控制器介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Zynq DDR控制器介绍: 5)结束语. 1.1.2 本节引言 "不积跬步 ...

  5. (12)Zynq CAN控制器介绍

    1.1 Zynq CAN控制器介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Zynq CAN控制器介绍: 5)结束语. 1.1.2 本节引言 "不积跬步 ...

  6. (11)Zynq SPI控制器介绍

    1.1 Zynq SPI控制器介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Zynq SPI控制器介绍: 5)结束语. 1.1.2 本节引言 "不积跬步 ...

  7. (10)Zynq IIC控制器介绍

    1.1 Zynq IIC控制器介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Zynq IIC控制器介绍: 5)结束语. 1.1.2 本节引言 "不积跬步 ...

  8. (9)Zynq UART控制器介绍

    1.1 Zynq UART控制器介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Zynq UART控制器介绍: 5)结束语. 1.1.2 本节引言 "不积 ...

  9. PID控制器开发笔记(转)

    源: PID控制器开发笔记 转载于:https://www.cnblogs.com/LittleTiger/p/10499701.html

最新文章

  1. 凭借识别人的情绪,他们做到了2000多万用户、1000多万订单
  2. mysql存储过程1267_mysql存储过程一例
  3. CSSyphus:烦躁不安的烦恼设计指南。
  4. 超级玛丽程序_如何构建一个超级快速的微笑跟踪应用程序
  5. 千里之行始于足下---在“从普通走向优秀”的路上
  6. node之npm一直出错
  7. tiktok+独立站怎么引流?
  8. 用python画漂亮图-大部分人都不知道-Python竟能画这么漂亮的花,帅呆了
  9. Golang并发编程进程通信channel了解及简单使用
  10. Type-C引脚、24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C
  11. Python基础之模块(Module)和包(Package)
  12. matlab小课堂2
  13. thinkPHP3.2.3使用163邮箱发送邮件
  14. 龙ol服务器维护补偿boss,BOSS也疯狂《龙OL》野外BOSS大搜罗
  15. 产业安全专家谈 | 数字化转型过程中,企业如何建立顶级反欺诈能力?
  16. 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析
  17. 与省市级联的市县——根据省/直辖市显示对应的市县
  18. dfc trace performance anaysis
  19. Android播放音频工具类
  20. iOS开发之Code:-402653103,Code:5

热门文章

  1. 如何实现快手主页服务一键跳转微信
  2. 微信小程序 修改键盘的回车键及监听事件
  3. 正态分布 小说版的叙述
  4. 为office 365用户上传头像
  5. pureftpd 配置 mysql_pureftpd+mysql验证的安装配置文档
  6. TypeError: Object of type set is not JSON serializable
  7. python3 zipfile_Python之zipfile模块的使用
  8. HTML DOM 树
  9. 系统思考:情境企划的主要步骤有哪些?
  10. [转载]你不知道的Trello隐藏生产力提升技巧