ST意法半导体
直播中

张勇

8年用户 1545经验值
私信 关注
[问答]

使用调试器读取OCTOSPIM->PCR寄存器的复位值失败咋办

TLDR:
使用调试器读取 OCTOSPIM->PCR 寄存器的复位值失败。
文档:
RM0468 Rev 2 - 表 7. 寄存器边界地址
0x5200B400 - 0x5200B7FF - OCTOSPI1 控制寄存器 第 24.7 节:OCTOSPI 寄存器
CMSIS STM32h730xx.c内容
  • #define PERIPH_BASE              (0x40000000UL) /*!< Base address of : AHB/APB Peripherals                                                  */
  • #define D1_AHB1PERIPH_BASE      (PERIPH_BASE + 0x12000000UL)
  • #define OCTOSPIM_BASE        (D1_AHB1PERIPH_BASE + 0xB400UL)
  • #define OCTOSPIM           ((OCTOSPIM_TypeDef *) OCTOSPIM_BASE)
  • /**
  • * @brief OCTO Serial Peripheral Interface IO Manager
  • */
  • typedef struct
  • {
  • __IO uint32_t CR;         /*!< OCTOSPI IO Manager Control register,                Address offset: 0x00 */
  • __IO uint32_t PCR[3];     /*!< OCTOSPI IO Manager Port[1:3] Configuration register, Address offset: 0x04-0x20 */
  • } OCTOSPIM_TypeDef;
连接调试器,在任何代码运行之前在 Reset_Handler 中停止 CPU,并检查该位置的内存,结果如下:

预期的默认值:

我无法在至少两个 CPU 上配置 OCTOSPIM 外围设备。
1)STM32H730VBH6
2)STM32H730VBT6
我有两种设计,一种使用 STM32H730VBH6,它使用 OCTOSPIM 数据线 0-3。OCTOSPIM 设备的默认配置允许它正常工作。
第二种设计使用 STM32H730VBT6,将 OCTOSPIM 数据线 4-7 用于闪存芯片,因此需要非默认配置。
我验证了两种设计的问题。任何写入或读取 OCTOSPIM 外围设备的尝试都不会影响这两种设计。构建了多个 PCB,所有硅都有相同的问题。
我*能够*使用调试器和其他代码读取其他非零复位值,例如 PWR 控制寄存器 1 的默认值。

问题:
1)基址是否正确?
2)硅坏了吗?
3)为什么在HAL代码中OCTOSPIM_TypeDef->PCR et的长度为3。当只有两个 PCR 寄存器时。
4)解决方案/解决方法是什么?
我检查了勘误表,但目前没有提到这个问题。


回帖(1)

陈霞玻

2022-12-14 14:02:16

成功!
感谢一百万点我在那个登记处,我怀疑我会找到它。
解决方法/解决方案是:


  • RCC->AHB3ENR |= RCC_AHB3ENR_IOMNGREN;
  • ...
  •   if (HAL_OSPIM_Config(&hospi1, &sOspiManagerCfg, HAL_OSPI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)

这个问题强调:


  • ST MCU 文档不完整。
  • HAL/CMSIS 库缺少时钟启用代码。
  • CubeMX 生成的代码不会启用在任何调用“HAL_OSPIM_Config”之前*需要*的时钟。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分