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