From 69791ae0278eb3812b130f07c518800589951157 Mon Sep 17 00:00:00 2001 From: lei <3224404793@qq.com> Date: Wed, 31 Aug 2022 17:11:46 +0800 Subject: [PATCH] modified: src/W25QXXArduino/w25qxx.cpp --- src/W25QXXArduino/w25qxx.cpp | 63 +++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/src/W25QXXArduino/w25qxx.cpp b/src/W25QXXArduino/w25qxx.cpp index 53919e0..336531a 100644 --- a/src/W25QXXArduino/w25qxx.cpp +++ b/src/W25QXXArduino/w25qxx.cpp @@ -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擦除情况,测试用