目录
概述
1 RA QSPI 介绍
1.1 QSPI特性
1.1.1 QSPI接口功能
1.1.2 注意点
2 配置参数
2.1 时钟配置
2.2 IO配置
3 使用方法
3.1 xSPI支持的使用说明
3.2 自动校准
3.3 芯片选择延迟
3.4 XiP支持
3.5 xSPI命令
3.6 DOTF支持
4 要点总结
概述
本文主要介绍Renesas R7FA8D1BH (Cortex®-M85) QSPI的功能,包括其特性,配置要点,使用方法等内容。
1 RA QSPI 介绍
OSPI_B外设支持兼容xSPI(或OSPI)的外部存储设备,并与这些设备接口进行数据I/O操作。OSPI_B外设不支持可寻址设备,因此所有连接的存储设备必须连接到单个芯片选择引脚。请注意,本文档将引用xSPI协议,而OSPI是该协议的子集。OSPI_B外设兼容多种xSPI协议工作模式。
1.1 QSPI特性
1.1.1 QSPI接口功能
1) OSPI_B驱动程序具有以下关键特性来支持xSPI设备:
执行数据I/O操作 直接内存映射访问xSPI设备内存,最大可达256 MB。 可以在两个通道中的任何一个上配置xSPI设备。使用组合写入对xSPI设备进行编程(最多64字节) 擦除xSPI设备发送设备特定的命令,并读取最多8字节的响应,3字节寻址和4字节寻址,并实现自动校准功能。
2) 其他构建时功能:
与OSPI_B一起使用时,可选(构建时)DMAC支持数据传输。 可选的(构建时)XiP支持,用于进入/退出目标设备的XiP模式。 可选的(构建时)数据频闪(DS)自动校准支持目标设备使用DS信号。 可选的(构建时)动态解密(DOTF)
1.1.2 注意点
对于OSPI_B,强烈建议使用DMAC进行数据传输。在不使用DMAC的情况下,由于OSPI外设的高速硬件设计,数据传输可能对时序变化很敏感,这可能导致基于软件的内存映射操作意外失败。
2 配置参数
2.1 时钟配置
PCLKA是Octal-SPI总线接口,PCLKB用于设置OSPI寄存器。到xSPI目标设备的信号来自OCTASPICLK。OMSCLK信号为OCTASPICLK / 2。
如果协议模式设置为双数据速率模式(8D-8D-8D或4S-4D-4D),则支持OCTASPICLK速率输出。可以在RA Configuration编辑器的Clocks选项卡上设置PCLKB、PCLKA和OCTASPICLK频率。
2.2 IO配置
以下引脚可用于连接外部OSPI设备:
OMSCLK: OSPI时钟输出(OCTASPICLK / 2)
OMDQS: OSPI数据频闪信号
OMCS0: OSPI设备0选择
OMCS1: OSPI设备1选中
OMSIO0:数据0 I/O
OMSIO1:数据1 I/O
OMSIO2:数据2 I/O
OMSIO3:数据3 I/O
OMSIO4:数据4 I/O
OMSIO5:数据5 I/O
OMSIO6:数据6 I/O
OMSIO7:数据7 I/O
3 使用方法
3.1 xSPI支持的使用说明
在R_OSPI_B_Open()成功完成后,xSPI设备内容被映射到地址0x80000000 (bank CS0)或0x90000000 (bank CS1),并且可以像片上闪存一样读取。bank CS0只能从OSPI_B通道/从0访问,同样,Bank CS1只能从OSPI_B通道/从1访问。Bank CS0和CS1各自支持最多256 MB的地址空间。
3.2 自动校准
如果启用了支持,当配置器属性中的“数据锁存延迟”字段设置为0时,自动触发自动校准程序。当使用数据闸门(DS)模式或使用R_OSPI_B_SpiProtocolSet() API将SPI协议更改为DS模式时,用户应用程序负责在调用R_OSPI_B_Open()之前设置适当的前导模式。
在简单SPI模式(推荐)或非ds模式下,可以使用R_OSPI_B_Write() API将适当的序言模式写入所需的地址。确保通过配置器传递相同的地址。如果xSPI设备已经处于DS模式,则必须在调用R_OSPI_B_Open()之前使用调试器对序言模式进行编程。
序言模式预计为
{0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0xF7}。
3.3 芯片选择延迟
芯片选择延迟可以通过配置器设置。默认设置支持SPI最小延迟。如果驱动程序在SPI模式下打开,稍后将使用R_OSPI_B_SpiProtocolSet()切换到DOPI模式,请在调用R_OSPI_B_Open()之前选择DOPI所需的延迟。
3.4 XiP支持
OSPI_B支持XiP (eXecute in Place)操作模式。这可以用于只读内存映射访问,通过跳过xSPI事务中的命令序列来减少总体读取延迟。可以为任意一个附加的目标设备指定单独的XiP进入和退出代码。调用R_OSPI_B_XipEnter()后,目标设备的相关内存区域切换为只读模式,并将输入码发送到设备。调用R_OSPI_B_XipExit()将传输退出代码并将内存区域转换回读写访问。
进入XiP模式后,只能使用一个flash设备。一旦输入,XiP代码将传输到所有连接的设备。
3.5 xSPI命令
可以为每种支持的协议模式单独指定命令集和擦除命令。默认情况下,配置器只支持DOPI (8D-8D-8D)模式的替代命令集。命令集不能在运行时更改。当更改协议模式时,将选择适当的命令集。如果没有找到命令集,则默认为SPI命令集。
如果没有指定自定义DOPI擦除命令,请确保擦除命令是适当的2字节DOPI命令。较低的字节将用于1字节的命令协议。
3.6 DOTF支持
动态解密对OSPI Flash是可配置的,默认情况下在构建时禁用。使用DOTF特性需要首先在PC上创建加密的blob,然后使用适当的参数配置DOTF模块,以便在将blob编程为OSPI后对其进行解密。使用安全密钥管理工具创建加密blob。
例如:
使用128 AES加密密钥“ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff”和iv“000000000000000000000000”加密输入的srec文件中的4096字节区域,
从0x90000000到0x90000FFF,使用SKMT参数:
-
SKMT .exe /encdotf /keytype "AES-128" /enckey " ffffffffffffffffffffffffffffffffffffffffffffffff " /nonce "00000000000000000000000000000000" /startaddr "90000000" /endaddr "90000FFF“ /prg ”输入。“ / explain /output ”encrypted_output.srec"
用于使用SKMT创建blob的key、iv和解密区起始地址和结束地址的值必须在FSP的DOTF配置中设置。
确保传入DOTF配置的Key和IV是4字节对齐的。
这可以使用如下所示的编译器对齐属性来完成:
uint8_t aes_key[] attribute((aligned(4))) =
{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
0x13, 0x14, 0x15, 0x16, 0x1c, 0x1d, 0x1e, 0x1f
};
4 要点总结
开发人员在使用OSPI_B驱动程序时应该注意以下限制:
1)OSPI_B 使用CS0/bank0可能会出现问题。
与CS1/bank1的OSPI_B通道1已经过测试并确认工作。 对内存映射访问的预取和组合支持全局应用于所有从设备。 组合写限制为最大64字节。在尝试写更多字节之前,用户应该验证写操作是否已经完成。 CPU对内存映射区域的写入限制为具有8字节目标对齐的64位访问。此限制不适用于其他总线主机(例如DTC或DMAC)。
2)使用Arm LLVM的注意点
当使用Arm LLVM时,如果没有使用DMAC,请确保与R_OSPI_B_Write()一起使用的任何只读(const)数据都是word(4字节)对齐的。如果参数检查被启用,源指针对齐将被验证调用R_OSPI_B_Write()。 注意限制对OSPI内存区域的并发访问。如果其他总线主机试图写入OSPI内存区域,而另一个主机正在读取OSPI内存区域,则总线上可能发生冲突。
3)8D-8D-8D模式下的操作要点
当使用8D-8D-8D模式时,应注意在均匀对齐的地址上进行访问。如果使用奇数地址对齐,可能会出现问题。此限制适用于使用OSPI_B的所有总线主机。