#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