[STM32F7] QUADSPI 裸机 C 语言内存映射波形显示有数据,但变量读取仅 1 字节。

[复制链接]
136|8
内核558 发表于 2025-10-21 08:35 | 显示全部楼层 |阅读模式
CubeIDE在STM32F746 Disco 开发板通过寄存器用 C 语言实现 QUADSPI。

MCU 运行在默认的 16MHz HSI 内部时钟,QUADSPI 以 1MHz 运行。

间接写入/间接读取工作正常,并返回预期的字节数。

我以前从未在内存映射模式下使用过它。这是我的代码:
uint32_t readout_firstword;
QSPI_readMemoryBytesQuad(0x00000000, 4, (uint8_t*) (&readout_firstword));
uint32_t readout_secondword;
QSPI_readMemoryBytesQuad(0x00000004, 4, (uint8_t*) (&readout_secondword));

/* Activate memory-mapped mode */
QSPI_enabledMemoryMappedMode();

uint32_t readout_firstwordMemoryMapped = *(uint32_t*) (0x90000000);

读取 readout_firstwordMemoryMapped 返回 0x000000fa,这仅仅是整个字(0xFACE8D00)中一个正确的字节。

奇怪的是,波形包含了第一个字、未读取的第二个字,随后还出现了几十个时钟周期,而且mcu选择信号始终没有释放。一直保持低电平。

这是在内存映射模式下寻址内存所产生的波形:
5691168f64b5fe5768.png
有一条指令,有一个地址(0x000000),还有虚拟字节是6个。接着是数据8个字节。然后时钟运行了一段时间,片选信号从未释放。而变量只有1个字节,其他7个字节被丢弃了。所以实际上我收到了8个字节,并且片选信号一直没有释放,而变量只有1个字节。而正确的应该是只读取4个字节并在那里释放片选信号。我将数据长度寄存器设置为3(即4个字节)。另外,我试了超时值0xFFFF和0x0000,但完全没有区别。
这些是在内存映射读取之后的QUADSPI寄存器:
1835968f64c402732d.png
以下是启用内存映射模式的方法:
void QSPI_enabledMemoryMappedMode(void) {
        QUADSPI->CR &= ~(0x01 << 0);
        QUADSPI->DLR = 4U - 1U;
        QUADSPI->CR = (QUADSPI->CR & ~(0x1F << 8)) | (0x03 << 8); //Set FIFO threshold to 4
        QUADSPI->CCR = (QSPI_FMODE_MEMORY_MAPPED << 26) | (QSPI_QUAD << 24)
                        | (QSPI_QUAD << 8) | (QSPI_QUAD << 10) | (QSPI_ADSIZE_24 << 12)
                        | (MT25QL128ABA1EW9_COMMAND_QUAD_IO_FAST_READ << 0);
        QUADSPI->LPTR = 0x0000;
        QUADSPI->CR |= (0x01 << 0);
}
不知道哪里配置错了,为什么我的 QUADSPI 在请求 1 个 WORD 后 FIFO 中有 20 个字节,以及为什么有完整的 32 位字波形,但实际只收到了第一个字节的数据。


今天会画卧蚕吗 发表于 2025-10-21 15:27 | 显示全部楼层
地址没对齐
又见江南雨 发表于 2025-10-21 16:28 | 显示全部楼层
QUADSPI配置可能未正确切换
海滨消消 发表于 2025-10-21 17:29 | 显示全部楼层
寄存器配置可能不对
甜心puppy 发表于 2025-10-21 19:30 | 显示全部楼层
可能是QUADSPI内存映射模式未正确配置或闪存芯片未进入QUAD模式。
麻花油条 发表于 2025-10-21 20:30 | 显示全部楼层
重新配置QUADSPI寄存器,内存映射模式与闪存芯片需兼容。
豌豆爹 发表于 2025-10-21 22:31 | 显示全部楼层
QUADSPI内存映射模式需要正确配置基地址和地址范围。如果基地址与您的Flash存储器地址不匹配,会导致读取异常。
classroom 发表于 2025-10-21 15:32 | 显示全部楼层
CS信号未释放?
cr315 发表于 2025-10-21 15:33 | 显示全部楼层
在进入内存映射模式前,禁用QUADSPI并重新初始化
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

57

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部