modified: src/W25QXXArduino/w25qxx.cpp

second
YUNLEI 2022-08-31 17:11:46 +08:00
parent 27a0da5377
commit 69791ae027
1 changed files with 40 additions and 23 deletions

View File

@ -12,7 +12,10 @@ static void delayus(uint32_t nus){
while (i-- > 0); while (i-- > 0);
} }
} }
/**
* @brief SPI,ESP324SPI.
*
*/
void SPI1S_Init(void){ void SPI1S_Init(void){
// gpio init // gpio init
// pinMode(NORFLASH_HOLD_PIN, OUTPUT); // pinMode(NORFLASH_HOLD_PIN, OUTPUT);
@ -77,10 +80,12 @@ void SPI1S_Init(void){
} }
#endif #endif
} }
/**
//SPI1 读写一个字节 * @brief
//TxData:要写入的字节 *
//返回值:读取到的字节 * @param TxData
* @return uint8_t
*/
uint8_t SPI1_ReadWriteByte(uint8_t TxData) uint8_t SPI1_ReadWriteByte(uint8_t TxData)
{ {
uint8_t Rxdata; uint8_t Rxdata;
@ -104,7 +109,10 @@ uint8_t SPI1_ReadWriteByte(uint8_t TxData)
return Rxdata; //返回收到的数据 return Rxdata; //返回收到的数据
} }
//初始化SPI FLASH的IO口 /**
* @brief SPI FLASHIO
*
*/
void W25QXX_Init(void) void W25QXX_Init(void)
{ {
SPI1S_Init(); //初始化SPI SPI1S_Init(); //初始化SPI
@ -128,6 +136,12 @@ void W25QXX_Init(void)
//HOLD/RST DRV1 DRV0 (R) (R) WPS ADP ADS //HOLD/RST DRV1 DRV0 (R) (R) WPS ADP ADS
//regno:状态寄存器号,范:1~3 //regno:状态寄存器号,范:1~3
//返回值:状态寄存器值 //返回值:状态寄存器值
/**
* @brief W25QXX
*
* @param regno :1~3
* @return uint8_t
*/
uint8_t W25QXX_ReadSR(uint8_t regno) uint8_t W25QXX_ReadSR(uint8_t regno)
{ {
uint8_t byte=0,command=0; uint8_t byte=0,command=0;
@ -286,14 +300,14 @@ uint8_t W25QXX_Write_Page_Only(uint8_t* pBuffer,uint16_t WriteAddr){
W25QXX_Wait_Busy(); //等待写入结束 W25QXX_Wait_Busy(); //等待写入结束
return 0; return 0;
} }
//无检验写SPI FLASH /**
//必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败! * @brief SPI FLASH0XFF,0XFF!
//具有自动换页功能 * ,!
//在指定地址开始写入指定长度的数据,但是要确保地址不越界! *
//pBuffer:数据存储区 * @param pBuffer
//WriteAddr:开始写入的地址(24bit) * @param WriteAddr (24bit)
//NumByteToWrite:要写入的字节数(最大65535) * @param NumByteToWrite (65535)
//CHECK OK */
void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite) void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
{ {
uint16_t pageremain; uint16_t pageremain;
@ -314,13 +328,14 @@ void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteTo
} }
}; };
} }
//写SPI FLASH
//在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大65535)
uint8_t W25QXX_BUFFER[4096]; uint8_t W25QXX_BUFFER[4096];
/**
* @brief SPI FLASH.!uint8_t W25QXX_BUFFER[4096];
*
* @param pBuffer
* @param WriteAddr (24bit)
* @param NumByteToWrite (65535)
*/
void W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint32_t NumByteToWrite) void W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint32_t NumByteToWrite)
{ {
uint32_t secpos; uint32_t secpos;
@ -377,9 +392,11 @@ void W25QXX_Erase_Chip(void)
W25QXX_CS1; //取消片选 W25QXX_CS1; //取消片选
W25QXX_Wait_Busy(); //等待芯片擦除结束 W25QXX_Wait_Busy(); //等待芯片擦除结束
} }
//擦除一个扇区 /**
//Dst_Addr:扇区地址 根据实际容量设置 * @brief ,:150ms
//擦除一个扇区的最少时间:150ms *
* @param Dst_Addr
*/
void W25QXX_Erase_Sector(uint32_t Dst_Addr) void W25QXX_Erase_Sector(uint32_t Dst_Addr)
{ {
//监视falsh擦除情况,测试用 //监视falsh擦除情况,测试用