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