硬件SPI读写W25Q64
代码实现了 STM32 与 W25Q64 之间的 SPI 通信,完成了设备 ID 读取、扇区擦除、数据写入和读取等闪存操作,并将相关数据显示在 OLED 屏幕上,用于验证闪存操作的正确性。
在 main 函数中,首先初始化 OLED 显示屏,初始化 W25Q64 闪存芯片。
W25Q64_Init() 内部初始化自定义的 SPI 通信模块,包括 GPIO 引脚配置(如设置 SPI 相关引脚的模式、速度等)和 SPI 接口的参数配置(如主从模式、数据方向、数据大小、时钟极性、相位等)。
调用 W25Q64_ReadID(&MID, &DID) 函数读取 W25Q64 的制造商 ID(MID)和设备 ID(DID)。
在 W25Q64_ReadID 函数中,通过 MYSPI_Start() 使能 SPI 通信(拉低片选信号),然后依次发送读取 ID 的命令 W25Q64_JEDEC_ID ,并接收 MID 和 DID,最后通过 MYSPI_Stop() 停止 SPI 通信(拉高片选信号)。
读取到的 MID 和 DID 通过 OLED_ShowHexNum 函数显示在 OLED 屏幕上。
调用 W25Q64_SectorErase(0x0000000) 对 W25Q64 的指定扇区(这里是起始扇区)进行擦除操作。在擦除前会调用 W25Q64_WriteEnable() 使能写入,擦除过程中通过 W25Q64_WaitBusy() 等待擦除完成(轮询状态寄存器,直到忙标志位清除)。
调用 W25Q64_PageProgram(0x0000000, ArrayWrite, 4) 将 ArrayWrite 数组中的数据写入到 W25Q64 的指定地址。同样需要先使能写入,然后发送页编程命令、地址,再发送要写入的数据,最后等待写入完成并停止 SPI 通信。
调用 W25Q64_ReadData(0x0000000, ArrayRead, 4) 从 W25Q64 的指定地址读取数据到 ArrayRead 数组中。
写入的数据和读取到的数据分别通过 OLED_ShowHexNum 函数显示在 OLED 屏幕上,以便对比验证数据的写入和读取是否正确。