modified: src/W25QXXArduino/w25qxx.cpp
parent
27a0da5377
commit
69791ae027
|
@ -12,7 +12,10 @@ static void delayus(uint32_t nus){
|
||||||
while (i-- > 0);
|
while (i-- > 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @brief 初始化SPI,ESP32一共用4个SPI,能用的有两个.
|
||||||
|
*
|
||||||
|
*/
|
||||||
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 FLASH的IO口
|
||||||
|
*
|
||||||
|
*/
|
||||||
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 FLASH必须确保所写的地址范围内的数据全部为0XFF,否则在非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擦除情况,测试用
|
||||||
|
|
Loading…
Reference in New Issue