理解AXI Quad Serial Peripheral Interface(SPI) IP核
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
转载于:https://www.cnblogs.com/limanjihe/p/9890979.html
理解AXI Quad Serial Peripheral Interface(SPI) IP核相关推荐
- 串行外设接口(Serial Peripheral Interface, SPI)逻辑设计部分 - spi_slave
目录 1. (csn == 1'b1) 时 1.1. spi_slave 完成 Master读写握手 的最短时间 1.2. spi_slave 完成 Slave读写握手 的最短时间 2. (csn = ...
- 串行外设接口(Serial Peripheral Interface, SPI)逻辑设计部分 - spi_master
目录 1. baud_clk_gen 1.1. 代码 2. spi_master 2.1. IDLE:等待写入 2.2. WAIT_CS:等待选通 2.3. TRANS:传输 (CPOL ^ CPHA ...
- 嵌入式硬件协议: SPI串行外设接口 Serial Peripheral Interface
简介 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线.它被广泛地使用在ADC.LCD 等设备与M ...
- 谈谈SPI (Serial Peripheral Interface,串行外设接口)
今天我们来一起聊聊谈谈SPI (Serial Peripheral Interface,串行外设接口): 什么是SPI SPI (Serial Peripheral Interface,串行外设接口) ...
- 同步和串行的区别_谈谈SPI (Serial Peripheral Interface,串行外设接口)
什么是SPI SPI (Serial Peripheral Interface,串行外设接口)是Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线: 它以主从方式 ...
- Hardware - Serial Peripheral Interface - BIOS
Serial Peripheral Interface 简称SPI X86的主板BIOS是如何工作的呢 , 其实就是依赖于SPI通讯 目前的芯片组都支持双BIOS Flash, 但这种做法在我们生 ...
- FPGA再入门——SPI IP核调用
型号:XC7K325TFFG900+AD9235-1 软件:Vivado 2019.2及其对应的Vitis 按照上篇博客中提到的block design的方法,新增SPI IP核,需要注意的是不能使能 ...
- Uniform Sector Standard and Quad Serial Flash - GD55LB01GE DATASHEET
目录 1. FEATURES 2. GENERAL DESCRIPTIONS 3. MEMORY ORGANIZATION 4. DEVICE OPERATIONS 4.1. SPI Mode 4.3 ...
- AXI Quad SPI读写Flash做远程升级
未经允许,本文禁止转载 目录 简介 AXI Quad SPI IP设置 寄存器说明 AXI Quad SPI支持的通用命令 读flash id 读flash 数据 擦除扇区 写flash 数据 注意事 ...
最新文章
- ZDOzMRVAOq
- CentOS6.5安装配置
- PHP连接sql seaver数据库
- 『转』数据库的委托之类型分类处理
- cookie代码加时间多久出现一次_恶意代码分析 丨 一个毫无套路的咸鱼诈骗网站...
- python3简明教程-实验楼_#python实验楼教程#学Python哪里有一问一答的Python学习?求具体的~...
- BZOJ #3746: [POI2015]Czarnoksiężnicy okrągłego stołu 动态规划
- 软件测试_性能测试_关注点
- Sep 12.1.4112.4156部署客户端
- python贝叶斯估计库_tsbngen一个python库,可从任意动态贝叶斯网络生成时间序列数据...
- TeamTalk消息协议
- asp.net体育用品销售系统
- 微信打开网页 提示防诈骗
- 3dmax给模型添加渐变背景有哪些方法
- java开发实战小参考常见问题及处理
- flink 单作业模式部署提交作业爆:Trying to access closed classloader. Please check if you store classloaders direc
- Gvim计数器模板经典练习
- Roguelike 游戏中的计算哲学
- UVA 1103 - Ancient Messages(古代象形符号) By SuCicada
- three.js伪入门教程之旋转的九尾妖狐