• 正文
  • 相关推荐
申请入驻 产业图谱

STM32N6 使用单个 XSPI 驱动双片相同 HyperRAM

09/29 16:37
302
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32N6 内置 4.2MB 片上 SRAM,面对机器学习推理、图像信号处理、大音频缓存等业务场景,片上内存经常捉襟见肘,需要外接 HyperRAM 来扩充内存容量。 常规方案会占用两路独立 XSPI 接口分别挂载两片外部 RAM,但 STM32N6 引脚资源紧张,以 14×14 封装为例,芯片拥有 3 个 XSPI 控制器,仅提供 2 个物理 Port 端口,Port1 为 16 线、Port2 为 8 线,很多项目没有多余 Port 可以分配给第二片 HyperRAM。

ST 官方 LAT1717 给出一套硬件方案:单路 XSPI 接口,共用时钟、数据线,依靠两套独立片选 NCS1/NCS2,配合寄存器 EXTENDMEM 位,实现硬件自动切换片选,把两片同规格 HyperRAM 拼成一段连续内存映射地址空间,无需软件手动频繁切换 CS,节省宝贵的 IO 端口资源。 本文还原硬件接线、CubeMX 配置、软件初始化流程,梳理实操中的约束条件与常见踩坑点。

资料获取:实战经验 | LAT1717 STM32N6如何使用单个XSPI驱动双片相同HyperRAM

1. 方案适用边界与硬件接线要点

1.1 硬性使用前提

该方案不是任意两片存储器都可以直接启用,有明确约束:

  1. 两片 HyperRAM 型号、容量完全一致;
  2. 两片存储器挂接在同一个 XSPI 物理 Port 端口;
  3. 开启EXTENDMEM后两片设备映射为连续地址空间;
  4. 示例用例:XSPI1‑Port1 挂载两片 16 线 128MB(1Gbit)HyperRAM,总容量拓展至 256MB 内存映射空间。

注意:内存映射模式下,单 Port 最大支持 256MB,单片器件参数要按单片真实容量填写,不能直接填写两片叠加后的总容量。

1.2 硬件接线规则(Port1,16‑bit HyperRAM)

  • 共用信号线:P1_CLK、P1_NCLK、P1_DQS、P1_IO[0:15],两片 HyperRAM 并联;
  • 独立片选:P1_NCS1接第一片 HyperRAM,P1_NCS2接第二片 HyperRAM;
  • 如果使用双 8 线 HyperRAM/PSRAM,仅需要P1_IO[0:7],CLK、NCLK、DQS、NCS 接线逻辑不变。

原理图关键逻辑:AXI/AHB 总线访问不同地址区间,XSPI 硬件内部根据访问地址,自动输出对应的 NCS 片选信号,软件不需要手动改写 CS 寄存器。

2. STM32CubeMX 外设参数配置

配置分为两层:XSPIM 管理器配置,以及 XSPI1 外设本身配置。

2.1 XSPIM 管理器配置

XSPIM 负责控制器和物理 Port 之间的路由映射,寄存器XSPIM_CR关键配置:

  1. MUXEN = 0:关闭复用仲裁模式;
  2. MODE = 0:直接模式,XSPI1 映射 Port1,XSPI2 映射 Port2;
  3. CSSEL_OVR_EN = 0:使用 XSPI 内部 CSSEL 控制位,关闭片选强制覆盖。

在 CubeMX 图形界面选择Mode Direct (XSPI1 to Port1; XSPI2 to Port2; XSPI3 not used)。

2.2 XSPI1 外设图形界面参数

以单片 1Gbit(128MB)HyperRAM 为例:

配置项 参数值说明
Mode HyperBus16(TM)
Port Port1 Hexa
Memory Type HyperBus(TM)
Memory Size 1GBits(填写单片容量,非两片总和)
Clock Prescaler 0,后续代码中生效
Memory Mode Enable(开启内存映射)
Chip Select Override NCS1‑Port1

其余 HyperBus 时序参数:RW Recovery Time Cycle=2、Access Time Cycle=6、Write Zero Latency=Enable等按照器件 datasheet 匹配。

重要提示:CubeMX 图形界面没有提供EXTENDMEM寄存器配置选项,该位无法在 GUI 勾选,需要在用户初始化代码手动设置,很多工程师在这里遗漏,导致无法自动切换两片 RAM。

3. 软件初始化完整流程

核心寄存器:XSPI_DCR1寄存器的EXTENDMEM位,置 1 后开启双存储器拓展模式,XSPI 硬件根据访问地址自动切换 NCS1/NCS2,两片存储器地址连续。 软件初始化分为 4 个步骤,不能颠倒执行顺序:

  1. Step1:初始化 XSPI,选中 NCS1,配置第一片 HyperRAM 调用初始化函数,选择NCS1片选,关闭硬件自动片选覆盖,完成 HyperRAM 时序参数配置,对 HyperRAM1 做寄存器初始化。
  2. Step2:重新初始化 XSPI,切换至 NCS2,配置第二片 HyperRAM 重新调用初始化接口,选择NCS2,配置第二片 HyperRAM 器件内部工作参数。

两片 HyperRAM 都必须单独完成器件寄存器配置,不能只配置一片。

  1. Step3:开启硬件自动片选 HW_CSSEL 模式 重新初始化 XSPI,关闭 CS Override,切换到硬件自动片选模式,此时会使能EXTENDMEM拓展存储位。之后 XSPI 会依据访问的内存地址区间,硬件自动输出 NCS1 或者 NCS2 信号。
  2. Step4:开启 XSPI 内存映射模式 使能内存映射,外部两片 HyperRAM 对外呈现一段连续的 AXI/AHB 地址空间,CPU、DMA 可以直接指针访问。

简化参考代码片段(基于 HAL 库自动生成代码修改):

// Step1 初始化并配置HyperRAM1
MX_XSPI1_Init(HAL_XSPI_CSSEL_NCS1, HAL_XSPI_CSSEL_OVR_NCS1, HAL_XSPI_CSSEL_SW);
MX_XSPI1_HyperBus_Init();

// Step2 切换NCS2,配置HyperRAM2
MX_XSPI1_Init(HAL_XSPI_CSSEL_NCS2, HAL_XSPI_CSSEL_OVR_NCS2, HAL_XSPI_CSSEL_SW);
MX_XSPI1_HyperBus_Init();

// Step3 切换硬件自动片选模式,EXTENDMEM使能生效
MX_XSPI1_Init(HAL_XSPI_CSSEL_NCS1, HAL_XSPI_CSSEL_OVR_DISABLED, HAL_XSPI_CSSEL_HW);

// Step4 开启内存映射模式
// 此处省略使能内存映射、Cache维护相关代码

说明:HyperRAM 设备寄存器配置、内存映射使能可以参考官方样例工程STM32N6‑GettingStartedImageClassification。

软件方案对比

  • 软件手动切换 CS:业务代码读写前手动改写CSSEL寄存器,应用层需要管理地址边界,逻辑繁琐,容易引入 BUG;
  • EXTENDMEM 硬件自动切换 CS(本文方案):对上层软件透明,直接访问连续地址,由 XSPI 硬件处理片选切换,业务代码无需感知两片 RAM 边界。

4. 工程排查清单

  1. 两片 HyperRAM 容量规格不一致:EXTENDMEM 模式要求两片器件完全相同,容量不同会出现读写异常、数据错乱。
  2. Memory Size 填写两片总容量:CubeMX 参数必须填写单片容量,内存映射硬件自动拓展为两倍,填总容量会造成地址解析错误。
  3. 遗漏对第二片 HyperRAM 初始化:Step2 必须执行 NCS2 的初始化,第二片 HyperRAM 没有配置时序寄存器,读写会不稳定。
  4. 忘记开启 EXTENDMEM 寄存器位:CubeMX 没有图形勾选入口,只能代码设置,不置位则硬件不会自动切换片选,始终只访问 NCS1。
  5. 仍然使用 CSSEL 软件覆盖模式:没有切换为HAL_XSPI_CSSEL_HW硬件模式,硬件自动片选不会工作。
  6. 封装 Port 资源差异:不同 STM32N6 封装 Port 资源不一样,14×14 封装 Port1 为 16 线,Port2 仅 8 线,选型硬件设计务必核对 datasheet 端口资源。

5. 小结

  1. STM32N6 单 XSPI Port 驱动两片同规格 HyperRAM,依靠硬件EXTENDMEM位实现根据访问地址自动切换 NCS1/NCS2,对外输出连续内存映射地址,节约 Port 引脚资源,适合 AI 推理、图像处理等需要大容量外部 RAM 场景。
  2. 硬件上时钟、DQS、数据线并联,两片 RAM 使用独立 NCS 片选;软件层面 CubeMX 仅完成外设基础配置,EXTENDMEM 寄存器需要手动代码设置,无 GUI 开关。
  3. 初始化流程固定:分别配置 NCS1、NCS2 两片器件,再切换硬件自动片选模式,最后开启内存映射;两片存储器必须是完全相同型号、容量。
  4. 对比软件手动切换片选,硬件自动切换方案对上层业务代码透明,降低应用开发复杂度。

6. FAQ

Q:我可以两片不同容量 HyperRAM 开启 EXTENDMEM 吗?

A:依据 LAT1717 文档,必须两片大小、类型完全一致,不支持异构容量组合。

Q:CubeMX 找不到 EXTENDMEM 开关怎么办?

A:该寄存器位没有图形界面配置项,必须在 HAL 初始化代码中配置,属于正常现象。

Q:该模式下最大外部内存映射空间多大?

A:内存映射模式下,单 Port 最大 256MB,所以单片器件最大 128MB,两片拼接得到 256MB。

免责声明:本文全部内容基于 ST LAT1717 官方文档,实际硬件调试以 ST 官方参考手册、器件 datasheet、样例源码为准。

相关推荐