在线时间4067 小时
UID3441752
注册时间2017-11-21
NXP金币754069
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32024
- 最后登录
- 2024-4-25
|
1 引言
i.MX RT 系列单片机是恩智浦的跨界产品。i.MX RT 包含了一个 FlexSPI 控制器,该控制器支持 HyperBus 设备(HyperFlash/HyperRAM),串行 NORFlash 或者其他使用类似于 SPI 协议的设备等。How to Enable HyperRAM with i.MX RT(文档 AN12239)介绍了在 i.MX RT上使用 HyperRAM 的基础知识以及相关配置等。本应用笔记在此基础上,主要介绍 i.MX RT 上 HyperRAM/PSRAM 的一些高级用法,包括 FlexSPI 预取功能,HyperRAM 刷新间隔以及 i.MX RT 支持的 HyperRAM/PSRAM 设备等。
本应用笔记选用 i.MX RT1050 以及 RT1170 作为示例,并测试了不同厂商的HyperRAM/PSRAM 设备。
2 FlexSPI 控制器
i.MX RT1050 上的 FlexSPI 控制器支持如下功能:
• 支持多种不同类型设备:
— Serial NOR/NAND Flash
— HyperBus 设备(HyperFlash/HyperRAM)
— FPGA 设备
• 支持的 Flash 访问模式:
— Single/Dual/Quad/Octal 模式
— SDR/DDR 模式
— Individual/Parallel 模式
• 通过 AHB 总线进行内存映射访问读写:
— AHB RX Buffer 用于减少读数据延迟,AHB RX Buffer 总大小: 128 × 64 Bits
— AHB RX Buffer 共有 4 个可灵活配置的 buffer
— AHB TX Buffer 用于缓存一个 AHB burst 中所有的写数据,AHB TX Buffer 总大小: 8 × 64 Bits
• 通过 IP 总线进行软件触发 flash 读/写访问:
— IP RX FIFO 用于缓存从外部设备读取的数据,FIFO 总大小: 16 × 64 Bits
— IP TX FIFO 用于缓存写到外部设备的数据,FIFO 总大小: 16 × 64 Bits
3 HyperBus 接口
FlexSPI 控制器可以支持 HyperBus 设备,HyperRAM 是使用 HyperBus 接口的设备之一。
HyperBus 支持 DDR 接口,可以实现高速率数据读写。命令、地址和数据通过 HyperBus 的 8 根数据线 DQ[7:0]进行传输。当
HyperBus 从设备接收命令、地址和数据时,时钟(CK#, CK)用于采样这些数据信息。
CS 信号拉低代表一次传输的开始,首先通过数据线传输 6 个 CA 字节(命令地址数据),接着传输初始访问延迟,最后读/写数据
会在数据线上进行传输,直到 CS 信号拉高为止。
图 1 是一个数据读取过程。
图 2 给出了写数据传输流程。
4 PSRAM 简介
本章简单介绍了在该应用笔记中使用的 PSRAM 设备的一些特性。
4.1 QSPI PSRAM
使用的其中一款 PSRAM 是 APS6404L-3SQR, 它是 apmemory 厂商的一种 QSPI PSRAM。
这款 PSRAM 设备拥 有 4 个 SDR (单数据速率)I/O 引脚 , 使用 SPI 或 QPI 接口,工作频率高达 133 MHz。该设备的数据输
入依靠时钟来锁存所有指令,地址和数据,适用于低功耗和低成本便携式应用。该设备拥有自我管理的刷新机制,因此无需主机
系统支持对 DRAM 的刷新。
SPI / QPI PSRAM 设备是字节寻址的。设备可以识别以下各种命令:
4.2 Octal SPI PSRAM
另一款使用的 PSRAM 设备是 APS12808L-OBM-BA, 它也是 apmemory 厂商的,是一种 Octal SPI PSRAM。
这款 PSRAM 设备拥有 8 个 DDR(双数据速率)I/O 引脚,每个时钟周期传输两个字节,使用 SPI 接口,工作频率高达 200 MHz。
Octal DDR PSRAM 设备也是通过字节寻址的。不过,对该设备内存空间的寻址必须从偶地址开始(地址最后一位时钟为 0)。模
式寄存器的寻址没有什么特殊要求。
该 PSRAM 设备可以识别在 A/DQ 引脚定义的指令周期上指定的以下命令:
5 高级用法
本章主要介绍在 i.MX RT 上使用 HyperRAM/PSRAM 的一些高级知识点,包括 FlexSPI 预取功能,HyperRAM 自刷新,以及 i.MX
RT 支持的 HyperRAM/PSRAM 设备等。
5.1 预取
FlexSPI 支持 AHB RX prefetch buffer,当从外部存储器读取数据时,该 buffer 用于预取数据并缓存,从而减少读数据访问延迟,
提高整体性能。
i.MX RT1050 将 AHB RX buffer 分为 4 个缓冲区。AHB RX buffer 总大小为 1K 字节,每个缓冲区大小通过寄存器域
AHBRXBUF0CR0[BUFSZ] - AHBRXBUF3CR0[BUFSZ]进行配置。
FlexSPI 可以给不同的 master 分配不同的 AHB RX 缓冲区,通过配置寄存器域 AHBRXBUF0CR0[MSTRID] -
AHBRXBUF3CR0[MSTRID]将 AHB RX 缓冲区分配给特定的 master 使用。
一些 master 有特定的 master ID。如 表 1 所示,Core, eDMA 以及 DCP 这些 master 都有独立的 ID,其他 master 共用一个相同
的 ID。
表 1. Master IDs
通过配置寄存器域 AHBCR[PREFETCHEN]和 AHBRXBUFxCR0[PREFETCHEN]来控制 AHB 读预取功能的使能与否。只有当
AHBCR[PREFETCHEN]和 AHBRXBUFxCR0[PREFETCHEN]同时设置为 1 时,AHB 读预取功能才会使能。预取的数据大小由分
配给该 master 的 AHB RX 缓冲区的大小决定。
接下来以 HyperRAM 为例介绍一下 AHB 预取的流程。当 AHB 预取使能时,一旦接收到总线的读命令,FlexSPI 首先确认需要读取
数据的地址是否在当前 AHB 缓冲区地址范围内。如果在,则直接返回相应地址的数据,如果不在,FlexSPI 会触发 对 HyperRAM
的读访问。当读取到相应的数据并返回给总线后,FlexSPI 会继续从 HyperRAM 中预取数据到 AHB RX 缓冲区,直到存满整个缓
冲区。新的 IP 或者 AHB 命令请求会打断当前正在进行的 AHB 读预取过程。
图 7 给出了读预取一般流程。
5.2 TCSH/TCSS 域
访问外部设备时,在片选(CS)信号和串行时钟(SCLK)信号之间,FlexSPI 需要遵循特定的时序要求。
对于 SDR 访问模式,CS 拉低到 SCLK 第一个上升沿之间需要至少(TCSS+0.5)个串行时钟周期,SCLK 最后一个下降沿到 CS拉高之间至少需要 TCSH 个串行时钟周期。图 8 给出了 SDR 模式下 CS 和 SCLK 之间的时序关系图。
对于 DDR 访问模式,CS 拉低到 SCLK 第一个上升沿之间需要至少(TCSS+0.5)个串行时钟周期,SCLK 最后一个下降沿到 CS
拉高之间至少需要(TCSH+0.5)个串行时钟周期。图 9 给出了 DDR 模式下 CS 和 SCLK 之间的时序关系图。
HyperRAM 支持 DDR 访问模式,因此 CS 和 SCLK 信号之间的时序需要遵循 图 9。APS6404L PSRAM 设备支持 SDR 访问模
式,而 APS12808L 设备支持 DDR 访问模式。
TCSH 指 CS 信号 hold 时间,TCSS 指 CS 信号 setup 时间,是 FLSHAxCR1/FLSHBxCR1(x=1,2)寄存器中的两个域,如 图 10
所示,可以通过设置这两个域值以满足不同设备的时序要求。
例如,对 HyperRAM 设备来说,TCSH 和 TCSS 相当于对应数据手册中的 tCSH 和 tCSS 这两个时序参数。例如,表 2 给出了
S27KS0642 HyperRAM 设备的对应时序参数。
一般来说,TCSH 和 TCSS 的值要根据实际使用的 HyperRAM 设备的时序参数进行配置。例如,根据 表 2,TCSH 设置为 0 即
可,但是由于 FlexSPI 的一些固有限制,若此时读预取被打断时(预取功能使能的情况下),可能会出现 SCLK 信号还未复位
到默认状态但 CS 信号已经拉高的情况,此时就会导致读取错误,如 图 11 所示。
因此,建议保持 TCSH 和 TCSS 值为默认值,如 图 10 所示,TCSH 和 TCSS 的值均设为 3。
5.3 刷新间隔
DRAM 存储器需要定期进行阵列刷新以保证数据不丢失,刷新可以由主机系统定期进行操作。
HyperRAM 设备内部包含一个自刷新逻辑,可以自动刷新阵列中的所有行。只有当主机系统没有对 HyperRAM 进行读/写操作时,
才能进行自动刷新。若需要自刷新时正在进行读/写操作,那么刷新逻辑会等到所有读/写操作结束后才进行自刷新。如果在自刷新
结束之前主机发起一个新的读/写请求,那么在主机发送命令/地址(CA)期间,HyperRAM 将驱动 RWDS 信号拉高,以表明在开
始新访问之前需要额外的初始延迟时间,以便在开始新访问之前完成刷新操作。
表 3 给出了不同温度下刷新整个 HyperRAM 内存阵列所需的刷新时间间隔。一般来说,内存阵列的刷新可以在每个间隔开始时以单
批访问的方式完成,一次以组(突发刷新)的方式刷新几行,或者在整个时间间隔内以均匀分布的单行刷新的方式完成。HyperRAM的
自刷新逻辑采用分布式单行刷新的方式,该刷新方式可以避免内存处于长时间的自刷新而无法响应主机的访问请求。
分布式刷新方式要求主机不能执行太长时间的突发访问,以防止内存无法进行分布式刷新。为此,HyperRAM 设置了读/写访问的最
长时间,以便刷新逻辑可以在读/些操作之间正常的进行自刷新。该时间用 tCSM 表示,tCSM 等于((阵列刷新间隔 / 阵列总行数)/2),如 表 3 所示。
当访问 HyperRAM 时,需要保证每一次访问操作都不能超过 tCSM。否则会导致 HyperRAM 无法进行自刷新,从而造成不可预知的错误。
为了避免对 HyperRAM 的访问操作违反 tCSM 规则,需要遵循以下两点:
• AHB RX buffer 大小不要设置过大。当读预取功能使能时,buffer 越大意味着单个读操作时间越长,从而可能超过 tCSM 值。
• FlexSPI 和 AHB 总线的时钟频率不能设置过小。这两个时钟频率减小会使单个读/写操作时间增大,从而可能超过 tCSM 值。
5.4 验证的 HyperRAM 设备
本应用笔记在 i.MX RT 系列上测试了不同厂商的 HyperRAM 设备,测试结果如 表 4 所示。
测试过程中,Cypress 厂商的“7KS0641DPHI02”设备在使能读预取时,会出现不可预知的访问错误。
该错误是由于在发送命令/地址期间发生了预取终止操作而造成的。为避免该错误,需要保证在发送命令/地址期间不能进行预取终
止操作,这对于 FlexSPI 来说是很难控制的。
i.MX RT 系列可以很好地支持 表 4 中测试通过的设备。
5.5 PSRAM 测试
本节主要介绍了在 i.MX RT 系列上测试 PSRAM 以及总结一下支持的 PSRAM 设备。
5.5.1 QSPI PSRAM
所有的 i.MX RT 系列均可以支持 QSPI PSRAM 设备。
在 RT1050 板子上测试了一款 PSRAM APS6404L-3SQR。测试结果表明 RT1050 可以很好地支持该 PSRAM 设备。
5.5.2 Octal SPI PSRAM
i.MX RT1020/RT1050/RT1060 因为 FlexSPI 的一些限制,不能支持 Octal SPI PSRAM 设备。
前面章节提到, Octal SPI PSRAM 设备的内存寻址必须从偶地址开始,但是 RT1020/RT1050/RT1060 的 FlexSPI 控制器不支持
这种访问形式,因此无法支持访问这类 PSRAM 设备。
通过升级 FlexSPI ,目前 RT1010 和 RT1170 可以支持这类 PSRAM 了。为了验证该功能,在 RT1170 板子上测试了一款 Octal
SPI PSRAM 设备 APS12808L-OBM-BA。
为支持该类 PSRAM ,软件上,对 FlexSPI 控制器要遵循以下两点配置:
• 当对 PSRAM 进行 AHB 读访问时, AHBCR 寄存器,(图 12)中的 READADDROP 比特必须置 1。
• 当对 PSRAM 进行 AHB 写访问时, FLSHCR4 寄存器(图 12)中的 WMOPT1 比特必须清 0。
测试结果表明 RT1170 可以很好地支持 Octal SPI 类 PSRAM。
5.5.3 支持的 PSRAM
表 5 列出了在 i.MX RT 系列上支持的以及验证过的 PSRAM 设备。对于 QSPI 类 PSRAM ,所有 RT 系列都可以支持,但是对于
Octal SPI 类 PSRAM,只有 RT1010/RT1170 和所有的 RTyyy 系列支持。
|
|