2022-08-31 14:26:52 +08:00
|
|
|
|
#ifndef _W25QXX_H__
|
|
|
|
|
#define _W25QXX_H__
|
|
|
|
|
#endif
|
|
|
|
|
#include <Arduino.h>
|
|
|
|
|
#include <SPI.h>
|
|
|
|
|
//W25Xϵ<58><CFB5>/Qϵ<51><CFB5>оƬ<D0BE>б<EFBFBD>
|
|
|
|
|
//W25Q80 ID 0XEF13
|
|
|
|
|
//W25Q16 ID 0XEF14
|
|
|
|
|
//W25Q32 ID 0XEF15
|
|
|
|
|
//W25Q64 ID 0XEF16
|
|
|
|
|
//W25Q128 ID 0XEF17
|
|
|
|
|
//W25Q256 ID 0XEF18
|
|
|
|
|
#define W25Q80 0XEF13
|
|
|
|
|
#define W25Q16 0XEF14
|
|
|
|
|
#define W25Q32 0XEF15
|
|
|
|
|
#define W25Q64 0XEF16
|
|
|
|
|
#define W25Q128 0XEF17
|
|
|
|
|
#define W25Q256 0XEF18
|
|
|
|
|
|
|
|
|
|
#define NM25Q80 0X5213
|
|
|
|
|
#define NM25Q16 0X5214
|
|
|
|
|
#define NM25Q32 0X5215
|
|
|
|
|
#define NM25Q64 0X5216
|
|
|
|
|
#define NM25Q128 0X5217
|
|
|
|
|
#define NM25Q256 0X5218
|
|
|
|
|
|
|
|
|
|
extern uint16_t W25QXX_TYPE; //<2F><><EFBFBD><EFBFBD>W25QXXоƬ<D0BE>ͺ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
//#define W25QXX_CS PCout(4) //W25QXX<58><58>Ƭѡ<C6AC>ź<EFBFBD>
|
|
|
|
|
#define W25QXX_CS0 digitalWrite(NORFLASH_CS_PIN, LOW)
|
|
|
|
|
#define W25QXX_CS1 digitalWrite(NORFLASH_CS_PIN, HIGH)
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//SPI<50><49><EFBFBD><EFBFBD><EFBFBD>趨
|
|
|
|
|
#define SPI_FREQUENCY 30*1000000 //SPIʱ<49><CAB1>Ƶ<EFBFBD>ʣ<EFBFBD>Ӳ<EFBFBD><D3B2>SPIʹ<49><CAB9>
|
2022-09-02 20:33:32 +08:00
|
|
|
|
// #define HARDWARE_SPI //ʹ<><CAB9>Ӳ<EFBFBD><D3B2>SPI
|
|
|
|
|
#define SOFTWARE_SPI //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI
|
|
|
|
|
#define FLASH_TEST_ENABLE //ʹ<>ܲ<EFBFBD><DCB2><EFBFBD>
|
2022-09-02 20:39:26 +08:00
|
|
|
|
//<2F>˿ڶ<CBBF><DAB6><EFBFBD>
|
|
|
|
|
#ifdef HARDWARE_SPI
|
|
|
|
|
#define ESP32S3
|
|
|
|
|
#ifdef ESP32 //choose ESP32
|
|
|
|
|
#define NORFLASH_CS_PIN 5
|
|
|
|
|
#define NORFLASH_CLK_PIN 18
|
|
|
|
|
#define NORFLASH_MOSI_PIN 23
|
|
|
|
|
#define NORFLASH_MISO_PIN 19
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef ESP32S3 //choose ESP32S3
|
|
|
|
|
#define NORFLASH_CS_PIN 10
|
|
|
|
|
#define NORFLASH_CLK_PIN 12
|
|
|
|
|
#define NORFLASH_MOSI_PIN 11
|
|
|
|
|
#define NORFLASH_MISO_PIN 13
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef SOFTWARE_SPI
|
|
|
|
|
#define NORFLASH_CS_PIN 10
|
|
|
|
|
#define NORFLASH_CLK_PIN 12
|
|
|
|
|
#define NORFLASH_MOSI_PIN 11
|
|
|
|
|
#define NORFLASH_MISO_PIN 14
|
|
|
|
|
#endif
|
2022-08-31 14:26:52 +08:00
|
|
|
|
|
2022-09-02 20:33:32 +08:00
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
2022-08-31 14:26:52 +08:00
|
|
|
|
//ָ<><D6B8><EFBFBD><EFBFBD>
|
|
|
|
|
#define W25X_WriteEnable 0x06
|
|
|
|
|
#define W25X_WriteDisable 0x04
|
|
|
|
|
#define W25X_ReadStatusReg1 0x05
|
|
|
|
|
#define W25X_ReadStatusReg2 0x35
|
|
|
|
|
#define W25X_ReadStatusReg3 0x15
|
|
|
|
|
#define W25X_WriteStatusReg1 0x01
|
|
|
|
|
#define W25X_WriteStatusReg2 0x31
|
|
|
|
|
#define W25X_WriteStatusReg3 0x11
|
|
|
|
|
#define W25X_ReadData 0x03
|
|
|
|
|
#define W25X_FastReadData 0x0B
|
|
|
|
|
#define W25X_FastReadDual 0x3B
|
|
|
|
|
#define W25X_PageProgram 0x02
|
|
|
|
|
#define W25X_BlockErase 0xD8
|
|
|
|
|
#define W25X_SectorErase 0x20
|
|
|
|
|
#define W25X_ChipErase 0xC7
|
|
|
|
|
#define W25X_PowerDown 0xB9
|
|
|
|
|
#define W25X_ReleasePowerDown 0xAB
|
|
|
|
|
#define W25X_DeviceID 0xAB
|
|
|
|
|
#define W25X_ManufactDeviceID 0x90
|
|
|
|
|
#define W25X_JedecDeviceID 0x9F
|
|
|
|
|
#define W25X_Enable4ByteAddr 0xB7
|
|
|
|
|
#define W25X_Exit4ByteAddr 0xE9
|
|
|
|
|
|
|
|
|
|
void W25QXX_Init(void);
|
|
|
|
|
uint16_t W25QXX_ReadID(void); //<2F><>ȡFLASH ID
|
|
|
|
|
uint8_t W25QXX_ReadSR(uint8_t regno); //<2F><>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
void W25QXX_4ByteAddr_Enable(void); //ʹ<><CAB9>4<EFBFBD>ֽڵ<D6BD>ַģʽ
|
|
|
|
|
void W25QXX_Write_SR(uint8_t regno,uint8_t sr); //д״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
void W25QXX_Write_Enable(void); //дʹ<D0B4><CAB9>
|
|
|
|
|
void W25QXX_Write_Disable(void); //д<><D0B4><EFBFBD><EFBFBD>
|
|
|
|
|
void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
|
|
|
|
|
void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead); //<2F><>ȡflash
|
|
|
|
|
void W25QXX_Write_Page(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
|
|
|
|
|
void W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint32_t NumByteToWrite);//д<><D0B4>flash
|
|
|
|
|
void W25QXX_Erase_Chip(void); //<2F><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>
|
|
|
|
|
void W25QXX_Erase_Sector(uint32_t Dst_Addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void W25QXX_Wait_Busy(void); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void W25QXX_PowerDown(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
void W25QXX_WAKEUP(void); //<2F><><EFBFBD><EFBFBD>
|
2022-08-31 14:46:26 +08:00
|
|
|
|
uint8_t W25QXX_Write_Page_Only(uint8_t* pBuffer,uint16_t WriteAdd);
|