< 返回
< 返回
问题16:读写W25Q64程序——ID号读取正确,但是写入数据后不能正确读取
本文最后更新时间:2023.8.1
问题原因
可能是芯片处于写保护状态,导致数据无法写入。因为写保护相关的位是掉电不丢失的,所以即使芯片断电重启,也不能自动解除写保护。
状态寄存器中和写保护等功能相关的位(非易失性)
解决方法
可以尝试调用写状态寄存器的指令,解除写保护。
请在STM32入门教程的示例代码,11-1 软件SPI读写W25Q64,的基础上,进行如下修改。
1. 请在W25Q64.c文件的最后,加入如下代码,执行写状态寄存器的时序,并在状态寄存器1和状态寄存器2全部写入0x00。
void W25Q64_WriteStatus(void) { W25Q64_WriteEnable(); //写使能 MySPI_Start(); MySPI_SwapByte(W25Q64_WRITE_STATUS_REGISTER); //发送写状态寄存器的指令 MySPI_SwapByte(0x00); //写入状态寄存器1 MySPI_SwapByte(0x00); //写入状态寄存器2 MySPI_Stop(); W25Q64_WaitBusy(); //等待忙 }
代码示例
2. 请在W25Q64.h文件函数声明的位置,加入如下代码,声明函数。
void W25Q64_WriteStatus(void);
代码示例
3. 请在main.c文件,W25Q64_Init函数之后,加入如下代码,调用函数,执行功能。
W25Q64_WriteStatus();
代码示例
如果成功解除了写保护,后续默认会保持解除保护的状态,就不再需要调用此函数了。
写入状态寄存器的时序依据如下。先写入一个指令0x01,再连续写入两个字节,即对应分别写入状态寄存器1和状态寄存器2。
写状态寄存器指令
写状态寄存器时序
< 返回