当前位置: 首页 > news >正文

Renesas R7FA8D1BH (Cortex®-M85) QSPI的功能介绍

目录

概述

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的所有总线主机。


http://www.mrgr.cn/news/60055.html

相关文章:

  • HarmonyOS ArkTS与C++数据类型转换
  • mysql是如何使用 B+ 树的 B+ 树如何实现 举例说明
  • Git的初次使用
  • 项目文章 | 药学TOP期刊PRChIP-seq助力揭示激酶LIMK2促进梗死不良重构的机制
  • Kafka-代码示例
  • LangGraph 源码分析 | 结构化输出
  • 【路径跟踪控制:Pure Pursuit控制与车辆运动学模型】
  • Java | Leetcode Java题解之第516题最长回文子序列
  • 如何在 CMD 窗口中校验文件的 MD5 值
  • 如何在 Ubuntu 16.04 上使用 Let‘s Encrypt 保护 Nginx
  • 深度学习(六)CNN:图像处理的强大工具(6/10)
  • 【STM32-HAL库】TEMT6000光照强度传感器(STM32F407ZGT6)(附带工程下载链接)
  • 动态规划算法专题(九):完全背包问题
  • C语言 | Leetcode C语言题解之第515题在每个树行中找最大值
  • C++ | Leetcode C++题解之第516题最长回文子序列
  • #### 运用语言影切进行旧脑抑制:
  • 【STM32-HAL库】火焰传感器(STM32F407ZGT6)(附带工程下载链接)
  • 你了解kafka消息队列么?
  • Java基础04
  • 【音视频 | ADPCM】音频编码ADPCM详细介绍及例子
  • PCL库中的算法封装详解
  • springmvc请求源码流程解析(二)
  • Java语言-异常
  • 查找与排序-插入排序
  • golang中的goroutine
  • OD机试真题-单词接龙