diff --git a/.vscode/arduino.json b/.vscode/arduino.json new file mode 100644 index 0000000..093603f --- /dev/null +++ b/.vscode/arduino.json @@ -0,0 +1,5 @@ +{ + "configuration": "PSRAM=disabled,PartitionScheme=default,CPUFreq=240,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,LoopCore=1,EventsCore=1,DebugLevel=none", + "board": "esp32:esp32:esp32", + "sketch": "spi_test.ino" +} \ No newline at end of file diff --git a/src/W25QXXArduino/w25qxx.cpp b/src/W25QXXArduino/w25qxx.cpp index adbbacf..53919e0 100644 --- a/src/W25QXXArduino/w25qxx.cpp +++ b/src/W25QXXArduino/w25qxx.cpp @@ -259,6 +259,33 @@ void W25QXX_Write_Page(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWri W25QXX_CS1; //取消片选 W25QXX_Wait_Busy(); //等待写入结束 } +/** + * @brief 只能写入一页的数据,刚好256字节. + * + * @param pBuffer 待写入的数据256字节 + * @param WriteAddr flash的首地址,确保是页的开头地址。 + * @return uint8_t 错误返回1,完成返回0 + */ +uint8_t W25QXX_Write_Page_Only(uint8_t* pBuffer,uint16_t WriteAddr){ + uint16_t i; + if ((WriteAddr%256)!=0){ + return 1; //要写入的地址不是页首地址就直接返回 + } + W25QXX_Write_Enable(); //SET WEL + W25QXX_CS0; //使能器件 + SPI1_ReadWriteByte(W25X_PageProgram); //发送写页命令 + if(W25QXX_TYPE==W25Q256) //如果是W25Q256的话地址为4字节的,要发送最高8位 + { + SPI1_ReadWriteByte((uint8_t)((WriteAddr)>>24)); + } + SPI1_ReadWriteByte((uint8_t)((WriteAddr)>>16)); //发送24bit地址 + SPI1_ReadWriteByte((uint8_t)((WriteAddr)>>8)); + SPI1_ReadWriteByte((uint8_t)WriteAddr); + SPI.writeBytes(pBuffer,256); //写256个数据 + W25QXX_CS1; //取消片选 + W25QXX_Wait_Busy(); //等待写入结束 + return 0; +} //无检验写SPI FLASH //必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败! //具有自动换页功能 diff --git a/src/W25QXXArduino/w25qxx.h b/src/W25QXXArduino/w25qxx.h index c006517..0dbcf5e 100644 --- a/src/W25QXXArduino/w25qxx.h +++ b/src/W25QXXArduino/w25qxx.h @@ -89,3 +89,4 @@ void W25QXX_Erase_Sector(uint32_t Dst_Addr); // void W25QXX_Wait_Busy(void); //等待空闲 void W25QXX_PowerDown(void); //进入掉电模式 void W25QXX_WAKEUP(void); //唤醒 +uint8_t W25QXX_Write_Page_Only(uint8_t* pBuffer,uint16_t WriteAdd);