1. 引言
STM32N6是基于Arm Cortex-M55内核的高性能MCU,其内存架构与传统STM32系列有较大差异。片上集成了4.2MB的SRAM,分布在多个域以支持并行处理和低延迟访问。 虽然片上RAM容量较大,但在实际应用中,特别是在涉及机器学习推理、图像处理、音频处理或大容量数据缓冲的场景下,STM32N6片上RAM仍有可能无法满足需求。此时,外部PSRAM或HyperRAM就成了扩展内存容量的理想选择。本文将介绍使用单个XSPI 驱动双片相同的HyperRAM的方法。
2. 单XSPI接口驱动双片相同外部HyperRAM
2.1. 硬件连接
当应用需求超过单片外部HyperRAM的容量时,设计者自然会想到使用多片HyperRAM进行扩展。由于STM32N6的XSPI接口资源有限,每个XSPI控制器通常只能连接一个外部存储器设备。直接使用两个XSPI接口会占用更多引脚资源,而STM32N6的引脚资源本身就比较宝贵。14*14封装STM32N6有3个XSPI,但port只有两个,port1是16线接口,port2是8线接口。不同的封装具体资源配置不同,请读者以数据手册资源配置说明为准。
XSPI 连接外部存储器有多种模式:直接8线模式,直接16线模式,双8线模式,交换模式等,以及我们本文要介绍的单XSPI驱动双片相同存储器的模式。
下面我们以单XSPI1驱动两片相同的16线HyperRAM(单片128MBytes),并设置为内存映射模式为例进行详细说明。
接线方式上,双片16线HyperRAM需要使用 Port1。其中,P1_CLK、P1_NCLK、P1_DQS 以及 P1_IO[0:15] 由两片器件共用;P1_NCS1 连接 HyperRAM1,P1_NCS2 连接 HyperRAM2。请参考图 1。图中使用的是两片相同的 16 线 HyperRAM,因此需要用到 P1_IO[0:15]。如果使用双 8 线 HyperRAM/PSRAM,则仅需用到 P1_IO[0:7],其余CLK、NCLK、DQS 和 NCS 的连接方式相同。
图1. STM32N6 单XSPI驱动双片相同的存储器
2.2. XSPIM 设置
配置时,一如既往可以使用STM32CubeMX进行快速设置。针对我们的用例,需要设置外设XSPI与XSPIM。XSPIM 的设置相对简单,如图 2 所示。这里将 XSPI1 映射到 Port1(16 线),将 XSPI2 映射到 Port2(8 线),并配置为直接模式。
图2. STM32N6 XSPIM设置
XSPIM_CR 寄存器的详细配置如下:
- MUXEN = 0:禁用复用模式(无仲裁)
- MODE = 0:直接模式(XSPI1连接端口1,XSPI2连接端口2)
- CSSEL_OVR_EN = 0:使用XSPI自身的CSSEL控制位(默认)
2.3. XSPI1 设置
当两个大小相同的外部存储器(Extmem1 和 Extmem2)连接到同一个 I/O 端口,并在内存映射空间中连续排列、由单个 XSPI 驱动时,该 XSPI 会根据访问地址自动将 CS 切换到 Extmem1 或 Extmem2。为了实现该功能,首先使用STM32CubeMX对XSPI1进行设置,如下图3所示。
图3. STM32N6 XSPI1 设置
关键参数说明:
- Memory Type : HyperBus(TM);
- Memory Size : 1GBits, 对应 128MBytes,是单片 HyperRAM的容量。需要注意的是,当使用内存映射模式时,最大容量范围为256MBytes,本文使用了双片相同HyperRAM,单片为128MBytes,Memory Size按单片容量选择;
- Clock Prescaler : 0,在代码中进行设置。
- 其它参数根据实际情况进行设置即可。
2.4. 软件配置
如前所述,在内存映射模式下,外部存储器的地址空间是连续的,XSPI1 会根据访问地址自动切换片选,从而选择对应的HyperRAM。要实现XSPI1 自主控制两个芯片选择信号(NCS1 和 NCS2)的生成,需要在 XSPI_DCR1 中设置 EXTENDMEM 使能,从而允许将两个外部存储器连接到由 XSPI1 驱动的同一 I/O 端口。
EXTENDMEM 的作用是将可用外部存储器容量扩展为原来的两倍。两个存储器在内存映射中必须是连续的,且必须具有相同的类型和大小。下面是相应的初始化代码(基于生成的代码进行修改)。
使用时,可以分四步进行:
在 XSPI 初始化完成后,还需要通过发送命令完成设备端配置,例如设置HyperRAM工作参数、使能内存映射等常规操作。本文对此不再赘述,如有需要,可参考 STM32N6-DK 板使用外部存储器的示例源码,例如STM32N6-GettingStarted-ImageClassification工程,相关资料可从ST官网获取。
3. 小结
本文介绍了使用单XSPI 驱动双片相同HyperRAM的方法。XSPI 根据访问的内存地址,切换相应的CS 至 Extmem1 或 Extmem2。如果采用软件方式切换,则需要动态设置 XSPI_CR 寄存器中的 CSSEL 位,实现起来相对复杂。本文介绍了一种通过硬件方式自动切换CS的方法,其关键在于使能 XSPI_DCR1 寄存器中的 EXTENDMEM 位,可供有类似需求的用户参考。
点击下载《STM32N6 如何使用单个XSPI驱动双片相同HyperRAM》原文档。
重要通知 - 请仔细阅读
意法半导体公司及其子公司 (“ST”)保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利