MW22-02A/BSP/Driver/w25q128/w25q128.h

103 lines
3.7 KiB
C
Raw Permalink Normal View History

2025-05-21 01:55:40 +00:00
#ifndef _W25Q128_H
#define _W25Q128_H
#include "comm_types.h"
#include "gd32f4xx_gpio.h"
extern unsigned short int ID;
extern unsigned char only_id[8];
/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
#define FLASH_DI_HIGH (gpio_bit_set(GPIOB,GPIO_PIN_5))
#define FLASH_DI_LOW (gpio_bit_reset(GPIOB,GPIO_PIN_5))
#define FLASH_CLK_HIGH (gpio_bit_set(GPIOB,GPIO_PIN_3))
#define FLASH_CLK_LOW (gpio_bit_reset(GPIOB,GPIO_PIN_3))
//#define FLASH_CS_DISABLE (gpio_bit_set(GPIOE,GPIO_PIN_2))
//#define FLASH_CS_ENABLE (gpio_bit_reset(GPIOE,GPIO_PIN_2))
#define FLASH_CS_DISABLE (gpio_bit_set(GPIOB,GPIO_PIN_8))
#define FLASH_CS_ENABLE (gpio_bit_reset(GPIOB,GPIO_PIN_8))
#define FLASH_DO_READ (gpio_input_bit_get(GPIOB,GPIO_PIN_4))
#define FLASH_W25Q128
#define FLASH_WRITE_BUSYBIT 0X01
#ifdef FLASH_W25Q128
#define Flash_ReadData_CMD 0x03 //3 BYTE MODE
#endif
#ifdef FLASH_W25Q256
#define Flash_ReadData_CMD 0x13 //4 BYTE MODE new add
#endif
#define Flash_ReadID 0x90//<2F><>ID***16λ
#define Flash_ReadID_only 0x4b//<2F><>ΨһID***64λ
#define Flash_Chip_Erase_CMD 0xC7//Ƭ<><C6AC><EFBFBD><EFBFBD>
#define Flash_WriteEnable_CMD 0x06
#define Flash_WriteDisable_CMD 0x04
#define Flash_PageProgram_CMD 0x02
#define Flash_WriteSR_CMD 0x01
#define Flash_ReadSR_CMD 0x05
#define Flash_SecErase_CMD 0x20
#define Flash_BlockErase_CMD 0xD8
#define W25Q_4ByteAddrModeEnable 0xB7
#define W25Q_Exit4ByteAddrModeEnable 0xE9
#define Flash_PAGEBYTE_LENGTH 256
#define Flash_SECBYTE_LENGTH (1024*4)
#define Flash_BLOCKBYTE_LENGTH (Flash_SECBYTE_LENGTH << 4) //Block<63><6B>С
//<2F><><EFBFBD><EFBFBD>FLASH<53><EFBFBD><E6B4A2><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define FLASH_BLOCK_ADD(BLOCK) (BLOCK * 65536)
#define FLASH_SECTOR_ADD(BLOCK, SECTOR) ((BLOCK * 65536) + (SECTOR * 4096))
#define W25Q128_BUFFER_LEN 256//һ<>ζ<EFBFBD><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>,<2C><>һ<EFBFBD><D2BB><EFBFBD>ܱ<EFBFBD>1024<32><34><EFBFBD><EFBFBD>
typedef struct _w25q128_add_inf_
{
unsigned int add;//<2F><>ַ
unsigned char block;//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ڵ<EFBFBD>block
unsigned int block_first_add;//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ڵ<EFBFBD>block<63><6B><EFBFBD>׵<EFBFBD>ַ
unsigned int block_tail_add;//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ڵ<EFBFBD>block<63><6B>β<EFBFBD><CEB2>ַ
unsigned char sector;//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ڵ<EFBFBD>sector
unsigned int sector_first_add;//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ڵ<EFBFBD>sector<6F><72><EFBFBD>׵<EFBFBD>ַ
unsigned int sector_tail_add;//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ڵ<EFBFBD>sector<6F><72>β<EFBFBD><CEB2>ַ
}w25q128_add_inf;
/*******************************************************************************
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
void Flash_GPIO_Init(void);
void Flash_Erase_Block(u_int8_t BlockNum);
void Flash_Erase_Sector(u_int8_t Block_Num,u_int8_t Sector_Number);
void Flash_Write_MorePage(u_int8_t *pBuffer, u_int32_t WriteAddr, u_int32_t WriteBytesNum);
void Flash_Read(u_int8_t *pBuffer,u_int32_t ReadAddr,u_int32_t ReadBytesNum);
void Enter4ByteAddrMode(void);
void Exit4ByteAddrMode(void);
void write_many_data(int n,unsigned char *p,unsigned int start_address);
void Flash_Write_Page(u_int8_t *pBuffer, u_int32_t WriteAddr, u_int32_t WriteBytesNum);
char w25q128_random_write(unsigned int write_add, unsigned int cache_add, char *data, unsigned int len);
unsigned int w25q128_random_crc(char *data, unsigned int len);
w25q128_add_inf w25q128_block_sector_to_add(unsigned char block, unsigned char sector);
w25q128_add_inf w25q128_add_to_block_sector(unsigned int add);
void FLASH_BulkErase();
void Read_w25q128_ID();
void Read_w25q128_only_ID();
#endif