reference :   PG153-AXI Quad SPI v3.2 LogiCORE IP Product Guide.pdf

在使用MicroBlaze过程中,调用了此IP,所以有必须仔细学习下;

名词:

XIP: eXecute In  Place

Motorola M68HC11

支持特性:

*可配置的AXI4接口

*支持对DRR/DTR FIFO的突发操作;

*支持可配置的XIP模式操作;

*支持AXI4-Lite或者AXI4接口连接的32bit Slave;

*支持可配置的SPI模式:标准、双、四模式;

*可编程的SPI时钟相位和极性;

*可配置的FIFO深度,16、256深度;对XIP模式只支持64深度;

*Configurable slave Memories in dual and quad modes are: Mixed,Micro,Winbond,and Spansion;

*AXI 接口选项:

XIP 模式: 使能AXI4 和 AXI4-Lite接口,地址模式可以选择24bit和32bit;

Performance 模式:使能AXI4接口;使用AXI4接口可以在核的发送和接收FIFO地址处启用突发功能。当不使能performance模式时,AXI4-Lite将被使用。

*SPI 选项

模式可以选择: standard/dual/quad

Transacton Width:  8/16/32

频率比率:2~2048, 代表了SPI的sck =  ext_spi_clk/ratio  ;

NO. of Slave: 代表了slave的个数;1~32;

*寄存器:

AXI4-Lite写访问寄存器由32位AXI写数据(* _wdata)信号更新,不受AXI写数据选通(* _wstrb)信号的影响。对于写入,AXI写地址有效(* _awvalid)和AXI写数据有效(* _wvalid)信号需要同时有效。

表2-3显示了适用的寄存器集,无论是否使能Performance Mode,或禁止XIP模式。应单独访问某些AXI Quad SPI内核寄存器。这些寄存器是可配置的,可通过AXI4-Lite接口或AXI4接口(增强模式)访问。 所有寄存器都以32位的形式访问。

如果访问不存在的寄存器,它们将返回OKAY响应。 这些寄存器的读取返回0,写入没有任何影响。

*SPISRR: 写入0xA,进行软件复位;

*SPICR

*SPISR

*SPI DTR:

After the SPE bit is set to 1 in master mode or spisel is active in the slave mode,the data is transferred from the SPI DTR to the shift register. 

1. DN-1位始终表示MSB位,与LSB优先或MSB优先传输选择无关。 当传输宽度参数为8或16时,未使用的高位((AXI数据宽度-1)到N)被保留。
    2.在标准SPI模式下,根据内核配置,该寄存器的宽度可以是8或16或32。 在双通道或四通道SPI模式下,该寄存器为8位宽。

*SPI DRR

SPI数据接收寄存器(SPI DRR)用于读取从SPI总线接收的数据。 这是一个双缓冲寄存器。 每次完成传输后,接收的数据将被放入该寄存器中。 SPI架构没有为从设备提供任何方法来限制总线上的流量; 因此,只有在最后一次SPI传输之前读取了SPI DRR时,才会在每次完成的事务后更新SPI DRR。如果未读取SPI DRR且已满,则最近传输的数据将丢失并发生接收溢出中断。 主SPI设备也会出现相同的情况。

在标准模式下,读取空DRR FIFO会返回从错误。

*SPISSR:

SPI从选择寄存器(SPISSR)包含一个长度为N的低有效,one-hot编码的slave选择矢量SS,其中N是从机数。
SS向量占据寄存器的最右位。 最多将一位置为低电平。 该位表示本地主站与之通信的从站。 SPISSR中的位分配如图2-6所示,并在表2-9中进行了描述

*TX_FIFO_OCY:

仅当AXI Quad SPI内核配置了FIFO(FIFO深度= 16或256)时,才会出现SPI发送FIFO占用寄存器(TX_FIFO_OCY)。 如果它存在且发送FIFO不为空,则寄存器包含一个四位右对齐值,该值比FIFO中的元素数少一(占用率减1)。

该寄存器是只读的。 写入时,或当FIFO为空时读取,寄存器内容不受影响。 确定发送FIFO为空/满的唯一可靠方法是读取SPI状态寄存器中的Tx_Empty / Tx_Full状态位或中断状态寄存器中的DTR空位。

*RX_FIFO_OCY:

仅当AXI Quad SPI内核配置了FIFO(FIFO深度= 16或256)时,才会出现SPI接收FIFO占用寄存器(RX_FIFO_OCY)。 如果寄存器存在且接收FIFO不为空,则寄存器包含一个四位右对齐值,该值比FIFO中的元素数少一(占用率减1)。
该寄存器是只读的。 写入(或FIFO为空时的读取)不会影响寄存器内容。 确定接收FIFO为空/满的唯一可靠方法是读取SPI状态寄存器中的Rx_Empty / Rx_Full状态位。

*DGIER

默认[31]=0,全局使能处于disable状态;

*IPISR

根据系统是否配置了FIFO,以及是否配置为主模式或从模式,最多可以有14种独特的中断条件。
没有FIFO的系统有七个中断。 中断控制器中的32位中断状态寄存器可以独立使能每个中断。 IP中断状态寄存器(IPISR)收集所有中断事件。 中断寄存器是一个读/写切换寄存器。 将1写入寄存器中的位位置会导致相应的位切换。 所有寄存器位在复位时清零。

*IPIER

中断允许寄存器(IPIER)寄存器允许系统中断输出有效。 如果IPISR寄存器中的有效位对应于IPIER寄存器中的使能位,则会产生该中断。 IPIER寄存器对IPISR的每个定义位都有一个使能位。 所有位在复位时清零。

* 编程顺序:

写使能命令顺序: 

1.通过置位SPICR(60h)的主禁止位来禁用主事务,并通过SPICR复位RX和TX FIFO。
         示例:将0x1E6写入SPICR
    2.通过将0x06写入SPIDTR来发出write enable命令。
    3.通过向SPISSR(70h)写入0x00来发出芯片选择。
    4.通过置低SPICR主禁止位来使能主事务。
    5.通过将0x01写入SPISSR来置低片选。
    6.通过置位SPICR主禁止位来禁用主事务。

 擦除命令序列:
      1.通过SPICR复位RX和TX FIFO。
      2.将扇区擦除命令(a)发送到SPIDTR以擦除闪存扇区地址后面的任何特定扇区或发出批量擦除命令(a)擦除整个闪存
         然后是flash基地址。
         示例:将0xD8写入SPIDTR
     3.通过向SPISSR写入0x00来发出芯片选择。
     4.通过置低SPICR主禁止位来使能主事务。
     5.通过将0x01写入SPISSR来置低片选。
     6.通过置位SPICR主禁止位来禁用主事务。

写数据命令序列:

1.通过SPICR复位RX和TX FIFO。
    2.将写入数据命令(a)(b)发送到SPIDTR,以将数据写入任何特定扇区
        其次是闪存扇区地址。
    3.使用要写入闪存的数据填充SPIDTR; 最大数据大小取决于
        配置的QSPI FIFO大小。
    4.通过向SPISSR写入0x00来发出芯片选择。
    5.通过置低SPICR主禁止位来使能主事务。
    6.通过将0x01写入SPISSR来置低片选。
    7.通过置位SPICR主禁止位来禁用主事务。

读取数据命令序列:
   1.通过SPICR复位RX和TX FIFO。
   2.将读取数据命令(a)(b)发送到SPIDTR以从任何特定扇区读取数据
       其次是闪存扇区地址。
   3.使用虚拟数据填充SPIDTR以从闪存中读取所需数据。
   4.通过向SPISSR(70h)写入0x00来发出芯片选择。
   5.通过置低SPICR主禁止位来使能主事务。
   6.通过将0x01写入SPISSR来置低片选。
   7.通过置位SPICR主禁止位来禁用主事务
   8.读取SPIDRR,以获取从SPI总线接收的读取数据。

a.参见相应的SPI Slave(闪存)数据表,了解要发出的命令。
     b.写入/读取命令因使用的模式(标准/双/四)而异。

推荐:https://www.cnblogs.com/chensimin1990/p/8526497.html#4105474

理解AXI Quad Serial Peripheral Interface(SPI) IP核的更多相关文章

  1. SPI通讯(Serial Peripheral interface)

    1. SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线:SCLK,MISO,MOSI,CS 2. SPI结构简图: 可以看出,SPI主从设备两端都有一个位移寄存器,数据在位 ...

  2. 自定义AXI总线形式SPI接口IP核,点亮OLED

    一.前言 最近花费很多精力在算法仿真和实现上,外设接口的调试略有生疏.本文以FPGA控制OLED中的SPI接口为例,重新夯实下基础.重点内容为SPI时序的RTL设计以及AXI-Lite总线分析.当然做 ...

  3. Altera FIFO IP核时序说明

    ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).FIFO主要应用在需要数据 ...

  4. 从Xilinx FFT IP核到OFDM

    笔者在校的科研任务,需要用FPGA搭建OFDM通信系统,而OFDM的核心即是IFFT和FFT运算,因此本文通过Xilinx FFT IP核的使用总结给大家开个头,详细内容可查看官方文档PG109.关于 ...

  5. FPGA基础学习(2) -- FIFO IP核(Quartus)

    ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).FIFO主要应用在需要数据 ...

  6. AXI Quad SPI

    AXI Quad SPI 信息来源

  7. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  8. xilinx AXI相关IP核学习

    xilinx AXI相关IP核学习 1.阅读PG044 (1)AXI4‐Stream to Video Out Top‐Level Signaling Interface (2)AXI4‐Stream ...

  9. 第7讲 SPI和RAM IP核

    学习目的: (1) 熟悉SPI接口和它的读写时序: (2) 复习Verilog仿真语句中的$readmemb命令和$display命令: (3) 掌握SPI接口写时序操作的硬件语言描述流程(本例仅以写 ...

随机推荐

  1. javascript之封装(引用网络)

    一. 例:事件监听封装 jQuery 中的事件监听,完全可以用 addEventListener/attachEvent 模拟,分别对应于现代浏览器和 IE ,可以把两个方法封装一下,但是为了方便,这 ...

  2. Android+Servlet+MySql+JSON实现简单的数据查询操作--C/S架构

    本例简单地实现Android客户端与服务器端交互,主要是通过客户端输入内容(学号)提交到服务器端,服务器端与数据库交互去查询相应信息(姓名).根据这个做个完整的安卓登录是没问题的.本例数据库服务器都采 ...

  3. Django使用admin管理后台管理数据库表

    1.在admin.py文件中注册需要创建的表,例: from .models import * # Register your models here. admin.site.register(Use ...

  4. LeetCode--278--第一个错误的版本

    问题描述: 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个 ...

  5. Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

    参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...

  6. 并查集-解决区间和纠错问题 hdu-3038

    题目:多次给出信息,告诉你[a,b]区间的和,求多少个错误信息(错误信息不考虑). 乍一看有点像线段树,但想想就发现这个并不能用线段树方便地解决.后来经提醒是并查集的一种经典题型. 把区间抽象为并查集 ...

  7. 微信小程序发起微信支付

    点击链接查看详情:(支付中配置参数需要从后台得到->签名需要从微信申请才可以得到) https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.h ...

  8. 【洛谷p1601】A+B Problem(高精)

    高精度加法的思路还是很简单容易理解的 A+B Problem(高精)[传送门] 洛谷算法标签: 附上代码(最近懒得一批) #include<iostream> #include<cs ...

  9. 创建xml树

    XMLElement 节点XMLDocument 节点的CUID操作 XMLNode 抽象类 操作节点 (XMLElement XMLDocument ) XElement xElement = ne ...

  10. linux创建定时任务,定时执行sql

    终于弄清楚一个问题了.linux创建定时任务,定时执行sql,其中分为两个case. case-1 sql语句较少,因此直接在 shell脚本中 写sql语句.如下: [oracle@Oracle11 ...