⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 en25b16_driver.h

📁 en25b16 flash驱动
💻 H
字号:
/****************************************************************************
 **             - EN25B16_driver.h -
 **
 **      NewMsg_EN25B16模块驱动程序的匹配h文档
 **      Two 4-Kbyte, one 8-Kbyte, one 16-Kbyte,one 32-Kbyte, and thirty one 64-Kbyte sectors
 **     
 **
 **             mader:许利军
 **    
 **     File version: $2008.6.27$   V1.1
 **
 ***************************************************************************/

#ifndef  EN25B16_DRIVER_H
#define  EN25B16_DRIVER_H 

/*IO定义*/
#pragma message ("警告:EN25B16模块驱动IO使用默认定义!")
#define EN25B16_CS_DDR   DE_2
#define EN25B16_DO_DDR   DE_3
#define EN25B16_DI_DDR   DE_4
#define EN25B16_WP_DDR   DE_5
#define EN25B16_CLK_DDR  DE_6
#define EN25B16_HOLD_DDR DE_7
//
#define EN25B16_CS   E_2
#define EN25B16_DO   E_3
#define EN25B16_DI   E_4
#define EN25B16_WP   E_5
#define EN25B16_CLK  E_6
#define EN25B16_HOLD E_7
//
#define EN25B16_CS_PING   PE_2
#define EN25B16_DO_PING   PE_3
#define EN25B16_DI_PING   PE_4
#define EN25B16_WP_PING   PE_5
#define EN25B16_CLK_PING  PE_6
#define EN25B16_HOLD_PING PE_7



/*所有扇区地址*/
#define SECTOR_4K_BASE_ADDRESS    0X000000
#define SECTOR_4K_ADD_ONE_ADDRESS 0X001000
#define SECTOR_8K_BASE_ADDRESS    0X002000
#define SECTOR_16K_BASE_ADDRESS   0X004000
#define SECTOR_32K_BASE_ADDRESS   0X008000
#define SECTOR_64K_BASE_ADDRESS   0X010000
#define SECTOR_64K_ADD_ONE_ADDRESS 0X010000


/*状态寄存器*/
#define SRP 0x01
//Status Register Protect (SRP置1&&(WP#) is driven Low)) 为保护
#define BP2 0x00
//所有扇区都不保护
#define BP1 0x00
#define BP0 0x00
#define WEL 0x00
//Write Enable Latch    可接受擦写
#define BUSY 0x00
//When set to 1, such a cycle is in progress, when reset to 0 no such cycle is in progress

#define STATUS_RERISTER ((SRP<<7)|(BP2<<4)|(BP1<<3)|(BP0<<2)|(WEL<<1)|(BUSY<<0))  

/*所有命令*/
#define WriteStatusRegister 0x01
#define ReadStatusRegister  0x05
#define ReadDataBytes       0x03
#define FastRead            0x0B   //The first byte addressed can be at any location. The address is automatically
                                  // incremented to the next higher address after each byte of data is shifted out.
                                  //停止信号由CS置1 产生
#define PageProgram         0x02
#define SectorErase         0xD8
#define BulkErase           0xBE
#define DeepPowerdown       0xB9
#define ReadManufacturer_DeviceID 0x90
#define ReadIdentification  0x9F
#define WriteEnable         0x06
#define WriteDisable        0x04
#define ReleaseDeepPowerdown 0xAB
#define ManufacturerDeviceID 0x90


/*
#define EN25B16_IO_INITIALIZTION()\
EN25B16_CS_DDR  = 1;\
EN25B16_DO_DDR  = 0;\
EN25B16_DI_DDR  = 1;\
EN25B16_WP_DDR  = 1;\
EN25B16_CLK_DDR = 1;\
EN25B16_HOLD_DDR = 1;\
EN25B16_CS     = 1;\
EN25B16_DO     = 1;\
EN25B16_DI     = 1;\
EN25B16_WP     = 1;\
EN25B16_CLK    = 0;\
EN25B16_HOLD   = 1


#define EN25B16_INITIALIZTION()\
EN25B16_IO_INITIALIZTION();\
EN25B16Write8Bit(WriteEnable);\
EN25B16_CS   = 1 ;\
EN25B16Write8Bit(WriteStatusRegister);\
EN25B16Write8Bit(STATUS_RERISTER);\
EN25B16_CS   = 1;





#define GoToDeepPowerdownMode()\
EN25B16Write8Bit(DeepPowerdown);\
EN25B16_CS   = 1

#define ReleaDeepPowerdownMode()\
EN25B16Write8Bit(ReleaseDeepPowerdown);\
EN25B16_CS   = 1
*/


/*函数申明*/
/*EN25B16初始化*/
void EN25B16_INITIALIZTION();
/*进入DeepPowerdownMode*/
void GoToDeepPowerdownMode(void);
/*解除DeepPowerdownMode*/
void ReleaDeepPowerdownMode(void);

void EN25B16Write8Bit(unsigned char byte);
unsigned char EN25B16Read8Bit(void);

/*函数使用说明 sector_num为选择扇区的第1.2个 data_num为所需要写入的数据个数,*pdata为数据指针*/
//!!!!!!!!!!!!!!!!!!!!!写入函数最多支持一次256byte的写入 超多256则需要分多次写!!!!!!!!!!!!!!!!!!!!!!!!!!!
void WriteSector_4K(unsigned char sector_num,unsigned char data_location,unsigned char data_num,unsigned char *pdata);
void WriteSector_8K(unsigned char data_num,unsigned char data_location,unsigned char *pdata);
void WriteSecror_16K(unsigned char data_num,unsigned char data_location,unsigned char *pdata);
void WriteSector_32K(unsigned char data_num,unsigned char data_location,unsigned char *pdata);
void WriteSector_64K(unsigned char sector_num,unsigned char data_location,unsigned char data_num,unsigned char *pdata);

void ReadSector_4K(unsigned char sector_num,unsigned char data_location,unsigned char data_num,unsigned char *pdata);
void ReadSector_8K(unsigned char data_num,unsigned char data_location,unsigned char *pdata);
void ReadSector_16K(unsigned char data_num,unsigned char data_location,unsigned char *pdata);
void ReadSector_32K(unsigned char data_num,unsigned char data_location,unsigned char *pdata);
void ReadSector_64K(unsigned char sector_num,unsigned char data_location,unsigned char data_num,unsigned char *pdata);

void EraseSector_4K(unsigned char sector_num);
void EraseSector_8K(void);
void EraseSector_16K(void);
void EraseSector_32K(void);
void EraseSector_64K(unsigned char sector_num);
void EraseAll(void);
/*快速读取某byte*/
void FastReadSomeByte(unsigned long int add,unsigned char data_num,unsigned char *pdata);
#endif //EN25B16_DRIVER_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -