stm32u5 qspi 读写 w25q128 timeout
需求 使用 STM32U575 主控芯片,使用 QSPI 读写 W25Q128,简单的读写测试没有问题。但是在后面调试中发现,当按照 11 个字节一组进行读写,从 4352 这个地址开始写,写入到 4605 的时候,就超时状态了。 HAL_OSPI_STATE_ERROR 然后我单独从 4605 写入 11 个字节,确实会超时,但是前面写入并没有超时,很奇怪。 然后,我测试了一下,从0开始写,每次写 11 个字节,当从 1023 开始写入 11 个字节会超时。感觉好像是在 256字节的页边界出写入会出问题,但是又不是每个 256 边界都会出问题。 解决 先使用 16个字节为一组进行测试,没有跨界问题。然后又使用了4字节写入,写入了 400多万组,也没有任何问题。 这基本就说明了,是软件或者库的某个层面,因为32位对齐产生的这个 bug. 解决的方法也很简单,我原来写入 11 个字节是对结构体使用了 pragma pack(1) ,只要不用这个字节对齐命令,编译器会自动进行 32位对齐,重新测试,数据就可以正常读写,没有问题了。 参考 stm32: QSPI flash driver concurrent access issue STM32L4使用QSPI驱动spiFLASH(W25Q64) {SPI/QSPI} 正确理解STM32H7驱动QSPI W25Q手册中时钟后缀1-2-2,1-4-4等代表的含义 AN4760 Quad-SPI interface on STM32 microcontrollers and microprocessors HAL_QSPI_AutoPolling() fail when polling the SR of NOR flash in QPI mode Stm32h7 Hal qspi autpolling timeout stm32u575rit6 qspi driver ST external loader learning w25q flash series part 8 quadspi external loader