Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

215 řádky
4.4 KiB

#ifndef __FLASH_H
#define __FLASH_H
#include "sys.h"
#include "LT768.h"
#define MCU_SPI   1
#define LT_SPI    0
#define UartTFT_Flash_0   0
#define DMA_flag  0
#define Back_color		  White
#define File_name_color   Black
#define Warm_color   	  Orange
#define OK_color 		  Blue
#define NG_color     	  Red
#define Fail_color		  Red
#define None_color		  Purple
#define Progress_color	  Black
extern u8 MUC_SS_flag;
extern u8  W25Q256 ;
typedef  struct VCOM_REP
{
	//UINT8  buf[512];
    UINT32 wrAddr;
    UINT16 wrLen;
    UINT8  fullIndex;
    UINT8  actIndex;
} vcom_rep;
typedef union {
	char u8[4];
	int  u32;
}UN_u32Data;
typedef union {
	char u8[2];
	short  u16;
}UN_u16Data;
extern u8  Flash_type;
#if MCU_SPI
void MCU_SS_RESET(void);
void MCU_SS_SET(void);
#define Flash_SS_RESET 	/*SPI1->U8SPIPORT.SS = 0*/MCU_SS_RESET()
#define Flash_SS_SET   	/*SPI1->U8SPIPORT.SS = 1*/MCU_SS_SET()
#define SPIWR   SPI1_ReadWriteByte
#else
#define Flash_SS_RESET 	nSS_Active()
#define Flash_SS_SET   	nSS_Inactive()
#define SPIWR   SPI_Master_FIFO_Data_Put
#endif
/*
#define MUC_CS0_RESET   *(volatile unsigned char*)(0x40019000+0x05) &= ~(1<<(5));	 //GINT5 拉低
#define MUC_CS0_SET     *(volatile unsigned char*)(0x40019000+0x05) |= (1<<(5));	 //GINT5 拉高
#define MUC_CS0_INPUT   *(volatile unsigned char*)(0x40019000+0x03) &= ~(1<<(5));     //GINT5配置为输入,CS0配置为输入
#define MUC_CS0_OUTPUT  *(volatile unsigned char*)(0x40019000+0x03) |= 1<<(5);        //GINT5配置为输出,CS0配置为输出
*/
#define MUC_CS0_RESET 	EPORT_WriteGpioData(EPORT_PIN3, Bit_RESET);//EPORT_WriteGpioData(EPORT_PIN1, Bit_RESET);
#define MUC_CS0_SET 	EPORT_WriteGpioData(EPORT_PIN3, Bit_SET);//EPORT_WriteGpioData(EPORT_PIN1, Bit_SET); 
#define MUC_CS0_OUTPUT 	EPORT_ConfigGpio(EPORT_PIN3, GPIO_OUTPUT);
#define MUC_CS0_INPUT 	EPORT_ConfigGpio(EPORT_PIN3, GPIO_INPUT);
void SPI1_Flash_Init(void);
void  Close_SPI1(void);
UINT8 SPI1_ReadWriteByte(UINT8 Send);
void SPI1_Clock(u8 prescale);
/*************************** winbond NorFlash ***************************/
/*读取器件ID*/
UINT16 W25QXX_ReadID(void);
UINT32 W25QXX_ReadID_9F(void);
//-----------------------------------------
/*写使能和失能*/
void  W25QXX_Write_Enable(void);   			//W25QXX写使能
void  W25QXX_Wait_Busy(void);   			//W25QXX写禁止
//-----------------------------------------
/*读写状态寄存器*/
UINT8 W25QXX_ReadSR(void);			   //读取W25QXX的状态寄存器
//-----------------------------------------
/*擦除*/
void W25QXX_Erase_Chip(void);
void W25QXX_SectorErase4KB(UINT32 addr);
void W25QXX_BlockErase64KB(UINT32 addr);
//-----------------------------------------
/*读写操作*/
//单页读写
void W25QXX_Write_Page(UINT8* pBuffer,UINT32 WriteAddr,UINT16 NumByteToWrite);
//连续读写
void W25QXX_Read(UINT8* pBuffer,UINT32 ReadAddr,UINT16 NumByteToRead);
void W25QXX_Write_NoCheck(UINT8* pBuffer,UINT32 WriteAddr,UINT16 NumByteToWrite);
//-----------------------------------------
/*4Byte地址*/
void W25QXX_Enter_4Byte_AddressMode(void);
//-----------------------------------------
void W25QXX_Wait_Busy(void);
/*************************** winbond NorFlash ***************************/
/*************************** winbond NandFlash **************************/
/*读取器件ID*/
uint32_t W25N01GV_ReadID(void);
//-----------------------------------------
/*写使能和失能*/
void W25N01GV_Write_Enable(void);   			
void W25N01GV_Write_Disable(void);   			
//-----------------------------------------
/*读写状态寄存器*/
uint8_t W25N01GV_ReadSR(uint8_t reg);
void W25N01GV_Write_SR(uint8_t reg, uint8_t val);			   
//-----------------------------------------
/*擦除*/
void W25N01GV_EraseFlash(void);
void W25N01GV_Erase_Block(uint16_t block);
//-----------------------------------------
void W25N01GV_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
void W25N01GV_Read_NoCheck(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead);
void W25N01GV_WritePageAddr_Data(uint8_t* pBuffer,uint16_t ColumnAddr,uint32_t PageAddr,uint16_t NumByteToWrite);   //不能写入超过2048 Byte(一页2048个Byte,后面的64 Byte非数据位)
void W25N01GV_ReadPageAddr_Data(uint8_t* pBuffer,uint16_t ColumnAddr,uint32_t PageAddr,uint16_t NumByteToRead);   
			
typedef struct 
{
	uint16_t  LBA ;       //坏块地址
	uint16_t  PBA ;		  //替换地址
}BBM;
void W25N01GV_Read_BBM_LUT(BBM * L );
uint8_t W25N01GV_Bad_Block_Replace(uint16_t LBA,uint16_t PBA);
#endif