iMX TR1052芯片FlexSPI接口的使用

系列文章目录

FlexSPI 模块术语表 信号描述 手册1651页

FlexSPI 发送地址到器件上 手册1660页

FLexSPI 使用IP command方式访问

FlexSPI使用AHB命令访问

RT1052 FlexSPI 命令仲裁 手册1691页

FlexSPI 的 SCLK 停止功能 手册1693页

FlexSPI HyperBus 器件的应用 手册1712页

FlexSPI应用于FPGA器件的一些要点 手册1719页

AHB内存映射定义

文章目录

前言

一、RT1052是什么?

二、FlexSPI接口

1.FlexSPI接口简介

2.LUT

3.可编程序列引擎

总结



前言

 

主要记录RT1052芯片调试使用的方法,记录学习过程


提示:以下是本篇文章正文内容,下面案例可供参考

一、RT1052是什么?

RT1052是NXP公司新推出的跨界处理器,crotex M7内核,528/600MHz主频,外设功能丰富,价格便宜。

二、FlexSPI接口

FlexSPI接口简介

简单可以理解为并行SPI接口,RT1052带有两个4位FlexSPI接口,可外挂4线SPI Flash或8线HyperBus Flash;

详细架构内容可以参看官方手册,在此不做重点。这里是对官方手册的翻译与使用解读。

iMX TR1052芯片FlexSPI接口的使用_第1张图片

概述

灵活的串行外设接口(FlexSPI)主机控制器支持两个SPI通道和最多4个外部设备。

每个通道支持单/双/四/八进制模式数据传输(1/2/4/8双向数据线)。

请注意FlexSPI配置依赖于芯片配置。有关boot和pinmux,请参阅系统级部分有关芯片的模式和数量的具体信息支持的设备。

iMX TR1052芯片FlexSPI接口的使用_第2张图片

iMX TR1052芯片FlexSPI接口的使用_第3张图片

特性

特性FlexSPI块支持以下功能:

灵活的顺序引擎(LUT表)支持各种供应商设备串行或Flash或其他具有类似SPI协议的设备,如串行Flash,串行NAND Flash,HyperBus设备(HyperFlash / HyperRAM),FPGA器件。

Flash访问模式:

单/双/ Ouad /八进制模式

SDR/ DDR模式

个人/并行模式

支持采样时钟模式:

内部虚拟读频闸门环路

内部内部虚拟读频闸门环回从引脚

Flash提供读取选通

AHB总线内存映射读/写访问

AHB RX缓冲区实现,以减少读取延迟。AHB RX缓冲区的总大小:128 * 64位

16个AHB主机支持的读访问优先级

4个灵活和可配置的AHB RX缓冲区

实现的AHB TX缓冲区实现一个AHB突发写入所有数据。AHB TX缓冲区大小:8* 64位。

所有的AHB主程序共享这个AHB TX缓冲区。对写访问没有AHB主号码限制。

IP总线软件触发的Flash读/写访问

IP RX FIFO实现缓冲所有从外部设备读取的数据。

FIFO大小:16* 64位IP TX FIFO实现缓冲区所有写入数据到外部设备。

FIFO大小:16 * 64位

DMA支持填充IP TX FIFO

DMA支持读取IP RX FIFO

当读取flash数据且IP RX FIFO已满时SCLK停止;

当写入flash数据且IP TX FIFO是空时SCLK停止。

框图

iMX TR1052芯片FlexSPI接口的使用_第4张图片

 

FlexSPI接口地址和内存映射

根据参考手册,FlexSPI的控制寄存器地址为

iMX TR1052芯片FlexSPI接口的使用_第5张图片

手册1720页开始 27.7.2章节,不再贴图。

访问的内存空间映射为

iMX TR1052芯片FlexSPI接口的使用_第6张图片

算上两个FIFO空间,可访问的地址空间一共是520MB。

LUT

IMXRT1050参考手册1662页

iMX TR1052芯片FlexSPI接口的使用_第7张图片

LUT(查找表)是一个内部存储器,用于保存一些预先编程的序列。每个序列由多达8条指令组成,这8条指令会依次执行。当IP命令或AHB命令触发闪存访问时,FlexSPI控制器将根据序列索引/编号从LUT获取序列,并执行它,这将会在SPI接口上生成一个有效的Flash传输时序。下图是LUT的结构、序列和指令。

iMX TR1052芯片FlexSPI接口的使用_第8张图片

iMX TR1052芯片FlexSPI接口的使用_第9张图片

注意:如果需要的指令数量小于8时,需要把不使用的命令编程为STOP命令(8’h00 FPGA上的写法,1字节0x00)

iMX TR1052芯片FlexSPI接口的使用_第10张图片

对于IP命令和AHB ”写命令”, FlexSPI控制器总是从0指针开始执行。对于AHB ”读命令“,FlexSPI控制器从一个已经记录的起始命令指针处开始执行。FlexSPI控制器分别保存每个Flash器件的起始命令指针。在JMP_ON_CS命令执行之前,所有保存的命令指针都是0。当JMP_ON_CS执行后,在JMP_ON_CS中的操作会被保存为命令起始指针。参照XIP Enhanced Mode 获取更多详情。

iMX TR1052芯片FlexSPI接口的使用_第11张图片

LUT的复位值是未知的,因为他是被当作内部存储执行的。LUT应该根据连接到板上的器件来编程。为了在代码跑飞的时候保持内容,LUT需要被上锁/解锁来避免编程后被错误更改。上锁/解锁的代码是0x5AF05AF0。上锁/解锁流程如下:

iMX TR1052芯片FlexSPI接口的使用_第12张图片

可编程序列引擎

 

iMX TR1052芯片FlexSPI接口的使用_第13张图片

可编程序列引擎

FlexSPI控制器实现了一个可编程的序列引擎,它从LUT执行序列。FlexSPI控制器按顺序执行指令,并在SPI接口上相应地生成flash事务。下表是受支持的指令的完整列表。

iMX TR1052芯片FlexSPI接口的使用_第14张图片

iMX TR1052芯片FlexSPI接口的使用_第15张图片

 

iMX TR1052芯片FlexSPI接口的使用_第16张图片

iMX TR1052芯片FlexSPI接口的使用_第17张图片

iMX TR1052芯片FlexSPI接口的使用_第18张图片

iMX TR1052芯片FlexSPI接口的使用_第19张图片

可编程序列引擎允许软件根据外部串行设备配置FlexSPI LUT。灵活的结构很容易适应不同供应商的命令/协议变化。

DDR序列是一个flash访问序列,它包含的DDR指令不是DUMMY,它可以选择性地包含SDR指令。SDR序列是不包含任何DDR指令的flash访问序列。FlexSPI控制器通过译码指令操作码的第5位来确定指令的SDR或DDR模式。对于SDR和DDR序列,FlexSPI上的输出/输入时间是不同的。特别要注意,SDR指令在SDR序列和DDR序列中的执行方式是不同的。有关更多细节,请参考FlexSPI nput计时和FlexSPI输出计时。

iMX TR1052芯片FlexSPI接口的使用_第20张图片

SPI接口上执行命令

本节详细介绍了在SPI接口上执行指令的过程。对于所有向flash发送/接收数据位的指令,DATA3线上的是高字节,在DATA0线上的是低字节,在B端口上的是高字在A端口上的是低字。(字节续)

iMX TR1052芯片FlexSPI接口的使用_第21张图片

1.命令指令

命令指令(CMD SDR/CMD DDR)通常用于向外部闪存设备传输命令代码。命令码是指令中的8位操作数。命令代码以并行方式同时发送到B端口和A端口。有关示例,请参考Flash访问序列示例。

iMX TR1052芯片FlexSPI接口的使用_第22张图片

2. 地址指令

地址指令(RADDR SDR/RADDR DDR/CADDR SDR/CADDR DDR)通常用于发送闪存访问启动地址(行/列地址)到外部闪存设备。行/列地址位由FlexSPI根据AHB访问地址或IP命令地址确定。更多细节,请参考发送到设备的Flash地址。位数是指令代码中的操作数值。行/列地址位将以并行方式同时发送到B端口和A端口。

iMX TR1052芯片FlexSPI接口的使用_第23张图片

3.模式指令

模式指令(MODEx SDR/MODEx DDR)通常用于发送模式位到外部闪存设备。模式位是指令操作数的(较低)位值。转换位数为1 (MODEI SDR/MODEI DDR), 2 (MODE2 SDR/MODE2 DDR), 4 (MODE4 SDR/MODE4 DDR), 8 (MODE8 SDR/MODE8 DDR)。注意,pad数不应该超过模式位数。例如,对于MODE4 *指令,不允许将num_pads设置为2’b11(八进制模式)。模式位将以并行模式同时发送到B端口和A端口。有关示例,请参考Flash访问序列示例。

4. 数据大小指令

数据大小指令(DATSZ_SDR/DATSZ_DDR)用于向外部设备发送程序/读取数据大小(字节数)。此指令通常在FPGA应用中,当外部设备的内存空间类似FIFO时使用。设备需要数据大小信息来确定有多少数据将从内部FIFO中弹出或推入。位数是指令数据大小中的操作值。位将以并行方式发送到B端口和A端口。有关示例,请参考Flash访问序列示例。

iMX TR1052芯片FlexSPI接口的使用_第24张图片

5. 写指令

写指令(写SDR/写DDR)通常用于发送程序数据到外部设备。从IP TX FIFO (IP命令)或AHB TX缓冲区(AHB命令)获取编程数据。有关flash orogram数据大小的更多细节,请参考flash访问的AHB命令和flash访问的IP命令。编程的字节顺序总是从低到高。奇数bytes在A端口上发送,偶数字节在B端口上发送,以并行方式发送。有关示例,请参考Flash访问序列示例。

6. 读指令

读取指令(读取SDR/读取DDR)通常用于从外部设备接收flash数据。接收到的数据将被放入IP RX FIFO (IP命令)或AHB RX缓冲区f(AHB命令)。有关闪存读取数据大小的详细信息。参考Flash访问AHB命令和Flash访问IP命令。读取的字节顺序总是从低到高。以并行方式从A端口接收奇数字节,从B端口接收偶数字节。有关示例,请参考Flash访问序列示例

iMX TR1052芯片FlexSPI接口的使用_第25张图片

7. 虚拟指令

哑指令(DUMMY_SDR/ DUMMY_DDR/ DUMMY_RWDS_SDR/ DUMMY_RWDS_DDR)用于在SPI接口上提供周转周期。在虚拟指令期间,无论是FlexSPI控制器或外部设备驱动SP]接口。有关虚拟循环数的更多细节,请参考可编程序列引擎。

DUMMY_RWDS DDR可用于超总线设备,该设备使用“RWDS”pin来指示是否需要额外的延迟计数。DUMMY_RWDS SDR预留给未来使用。FlexSPI控制器在SCLK输出切换启用后的第4个周期检查DQS pin输入电平。DQS引脚在超总线规范中称为“RWDS”,参考Flash访问序列示例作为例子。

请注意

FlexSPI在至少一个周期之后释放总线。因此,为了避免数据争用,如果数据在1个以上的行上传输,虚拟行数应该编程超过1个。

 

FLASH访问序列实例

iMX TR1052芯片FlexSPI接口的使用_第26张图片

iMX TR1052芯片FlexSPI接口的使用_第27张图片

iMX TR1052芯片FlexSPI接口的使用_第28张图片

并行模式Flash操作,类似并行总线

iMX TR1052芯片FlexSPI接口的使用_第29张图片

带有单延迟数的HyperBus器件读操作

iMX TR1052芯片FlexSPI接口的使用_第30张图片

带有额外延迟的HyperBus器件读操作时序图


总结

未完

你可能感兴趣的:(RT1052和Spartan7,经验分享)