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

2023-12-28 · 1 min · 94 words · RamLife

stm32 使用 flash 保存数据

需求 需要使用 stm32 内置的 flash 来保存数据. 解决 最快的方法就是参考官方例程,默认是在用户目录下面的 STM32Cube/Repository, 可以参考这个的例子去写。基本就分为 擦除,写入,读取 这三块。 注意: 擦除和写入都需要先 unlock, 操作完成之后,再 lock 一下。 注意: 需要更加手册确定好使用芯片的 flash sector 的排布,修改相关的宏定义,才能正常的操作。 参考 STM32 HAL库手册获取和查阅方法以及查看官方例程 STM32用HAL库写内部FLASH 【STM32+cubemx】0015 HAL库开发:内部flash读写 STM32系列(HAL库)——内部FLASH读写实验 STM32系列(HAL库)——内部FLASH读写实验_简约版 STM32 实现内部Flash的读写(HAL库版)

2023-05-24 · 1 min · 33 words · RamLife