iMX TR1052芯片FlexSPI接口的使用

系列文章目录

 

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

 

文章目录

  •  

前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

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


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

一、RT1052是什么?

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

二、FlexSPI接口

1.FlexSPI接口简介

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

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

2.LUT

IMXRT1050参考手册1662页

iMX TR1052芯片FlexSPI接口的使用

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

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

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

iMX TR1052芯片FlexSPI接口的使用

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

iMX TR1052芯片FlexSPI接口的使用

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

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

3.可编程序列引擎

 

iMX TR1052芯片FlexSPI接口的使用

可编程序列引擎

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

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

 

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

可编程序列引擎允许软件根据外部串行设备配置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接口的使用

SPI接口上执行命令

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

iMX TR1052芯片FlexSPI接口的使用

1.命令指令

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

iMX TR1052芯片FlexSPI接口的使用

2. 地址指令

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

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

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接口的使用

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接口的使用

iMX TR1052芯片FlexSPI接口的使用

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接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

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

iMX TR1052芯片FlexSPI接口的使用

iMX TR1052芯片FlexSPI接口的使用

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

iMX TR1052芯片FlexSPI接口的使用

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


总结

未完