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

📄 flash.h

📁 at45081 bsp 源码
💻 H
字号:
#ifndef _FLASH_H
#define _FLASH_H

#include "struct.h"

#define	FLASH_QUEUE					FALSE

// every page has 264 byte
#define FLASH_PAGE_SIZE				(uint)264

// the flash has page num
#define FLASH_PAGE_NUM				(uint)4096

// the flash data pages
#define	FLASH_PAGE_DATA_NUM			(uint)2999
#define	FLASH_PAGE_DATA_FIRST		(uint)0
#define	FLASH_PAGE_DATA_LAST		(uint)2998

// the flash page for config writing
#define	FLASH_PAGE_CONFIT_NUM		(uint)1095
#define FLASH_PAGE_CONFIG_FIRST		(uint)3000
#define	FLASH_PAGE_CONFIG_LAST		(uint)4094

#define	FLASH_PAGE_COMMON_CONFIG	(uint)FLASH_PAGE_CONFIG_FIRST	
#define	FLASH_PAGE_GASVALUE			(uint)(FLASH_PAGE_COMMON_CONFIG+1)
#define	FLASH_PAGE_RATESTUDY		(uint)(FLASH_PAGE_GASVALUE+1)
#define	FLASH_PAGE_MILEMETER		(uint)(FLASH_PAGE_RATESTUDY+1)
#define	FLASH_PAGE_DIALOUT			(uint)(FLASH_PAGE_MILEMETER+1)
#define	FLASH_PAGE_DIALIN			(uint)(FLASH_PAGE_DIALOUT+1)
#define	FLASH_PAGE_FIRST_REPLY		(uint)(FLASH_PAGE_DIALIN+1)
#define	FLASH_PAGE_LINE				(uint)(FLASH_PAGE_FIRST_REPLY+MAX_REPLY_MESSAGE_NUM)
#define	FLASH_PAGE_FIRST_STATION	(uint)(FLASH_PAGE_LINE+1)		

// Write Flash State
#define FLASH_EMPTY                 0xFF
#define FLASH_WRITING             	0xFE
#define FLASH_NORMAL		        0xFC                
#define FLASH_TRANSMITED            0xF8
#define FLASH_INVALID				0x00

// Erase Flash State
#define	FLASH_STATE_EMTPY			0xFF		//	init state
#define	FLASH_STATE_ERASING			0xFC		//	Erasing the page one by one
#define	FLASH_STATE_NORMAL			0xF0		//  Whole block erased normally

//////////////////////////////////////////////////////////////////////////
///  Erase page No and states
//////////////////////////////////////////////////////////////////////////
#define	FLASH_ERASEPAGE_DATA_NO			(FLASH_PAGE_DATA_LAST+1)
#define	FLASH_ERASEPAGE_DATA_START_ADDR	((ulong)FLASH_ERASEPAGE_DATA_NO*(FLASH_PAGE_SIZE))

#define	FLASH_ERASEPAGE_CONFIG_NO			(FLASH_PAGE_CONFIG_LAST+1)
#define	FLASH_ERASEPAGE_CONFIG_START_ADDR	((ulong)FLASH_ERASEPAGE_CONFIG_NO*(FLASH_PAGE_SIZE))

#define	FLASH_ERASEPAGE_EMTPY		0xFF		// ERASE BLOCK doesn't initialized
#define	FLASH_ERASEPAGE_UPDATING	0xFC		// Updating the ERASE BLOCK
#define	FLASH_ERASEPAGE_NORMAL		0xF0		// ERASE BLOCK is normal, whole flash erased
#define	FLASH_ERASEPAGE_ERASING		0x00		// erasing the ERASE BLOCK


typedef struct
{
	BYTE	ucErasePageState;
	BYTE	ucFlashState;
} ERASEPAGEINFO;

////////////////////  Config type definitions here ///////////////////////////
#define CONFIG_TYPE_COMMON		0x01		// 常用的设置信息
#define CONFIG_TYPE_GASVALUE	0x02		// 油量纪录
#define CONFIG_TYPE_RATESTUDY	0x03		// 速度学习纪录
#define CONFIG_TYPE_MILEMETER	0x04		// 里程记录表
#define CONFIG_TYPE_DIALOUT		0x05		// 拨出记录表
#define CONFIG_TYPE_DIALIN		0x06		// 拨入记录表
#define CONFIG_TYPE_REPLYMSG	0x07		// 回复消息设置
#define CONFIG_TYPE_LINEINFO	0x08		// 线路信息
#define CONFIG_TYPE_STATIONINFO	0x09		// 站点信息


//////////////////////////////////////////////////////////////////////////////
// flash reply message state
#define	REPLY_MESSAGE_EMPTY		0xFF
#define	REPLY_MESSAGE_VALID		0x55
#define	REPLY_MESSAGE_INVALID	0x00

// flash.c
static void FLASH_RdDatFromSpi(BYTE xdata *p, UINT count);
static void FLASH_WrDatToSpi(BYTE xdata *p, UINT count);
static void FLASH_LoadOpCode(BYTE opcode, UINT pageID, UINT pageAddr, BYTE DontCare);

static BOOL FLASH_PageRead(UINT pageID, UINT pageAddr, BYTE xdata *dataAddr, UINT size);

static void FLASH_WriteBuf1(UINT bufAddr, BYTE xdata *dataAddr, UINT size);
static void FLASH_WrBuf1ToPage(UINT pageID);
static BOOL FLASH_RdPageToBuf1(UINT pageID);

static BOOL FLASH_PageWrite(UINT pageID, UINT pageAddr, BYTE xdata *dataAddr, UINT size);

static void FLASH_ReadData(ulong Addr, BYTE xdata *dataAddr, UINT size);
static BYTE FLASH_WriteData(ulong Addr, BYTE xdata *dataAddr, UINT size);

static void FLASH_PageErase( UINT pageID);
static void Delay_us(BYTE us);
static void FLASH_InitData( void );
static BOOL FLASH_InitConfig( void );

static BOOL WriteCommonConfig( void );
static BOOL ReadCommonConfig( void );
static BOOL WriteDialInConfig( void );
static BOOL ReadDialInConfig( void );
static BOOL WriteDialOutConfig( void );
static BOOL ReadDialOutConfig( void );
static BOOL WriteMultiInstance( uint Page, uchar * Instance, uchar Size);
static BOOL ReadMultiInstance( uint Page, uchar * Instance, uchar Size );
static BOOL WriteReplyMessage( void );
static BOOL ReadReplyMessage( void );
static BOOL WriteLineInfo( void );
static BOOL ReadLineInfo( void );
static BOOL WriteStationInfo( void );
static BOOL ReadStationInfo( void );


#if (FLASH_QUEUE == TRUE )
////////////// 队列信息结构定义 //////////////////////////////////////////////
#define	FLASH_TYPE_RECORD	0x01	// 动态数据记录
#define	FLASH_TYPE_SETTING	0x02	// 静态配置信息	
typedef struct
{
	uint	Len;
	uchar	Type;
} FLASH_QUEUE_HEADER;
typedef FLASH_QUEUE_HEADER * FLASH_QUEUE_HEADER_PTR;

typedef struct
{
	FLASH_QUEUE_HEADER Header;
	uchar Message[FLASH_PAGE_SIZE];	// 消息内容
} FLASH_QUEUE_ITEM;
typedef FLASH_QUEUE_ITEM * FLASH_QUEUE_ITEM_PTR;

/////////////// Data Communication Queue functions deifinitions //////////////
extern BOOL FLASH_Q_Init();
extern BOOL FLASH_Q_Add( void *Source );
extern BOOL FLASH_Q_Peek( void * Destination );
extern BOOL FLASH_Q_Delete();
extern UINT FLASH_Q_GetLength();
extern void FLASH_Q_Verify();

#endif

#define		MAX_RECORD_LENGTH		56
typedef struct
{
	uchar	State;
	uchar	CommandID;
	uchar	Len;
	uchar	Reserved;
	ulong	ConsoleID;
} FLASH_RECORD_HEADER;

typedef struct
{
	uchar	State;
	uchar	CommandID;
	uchar	CommandLength;
	uchar	Reserved;
	ulong	ConsoleID;
	uchar	Message[MAX_RECORD_LENGTH];
} FLASH_RECORD;
typedef FLASH_RECORD * FLASH_RECORD_PTR;

#define FLASH_RECORD_LEN  sizeof(FLASH_RECORD)

extern BOOL FLASH_Init( void );
extern BOOL FLASH_Format( void );
extern BOOL FLASH_AppendRecord( void );
extern BOOL FLASH_DeleteFirstRecord( void );
extern BOOL FLASH_ReadRecord( void );
extern BOOL FLASH_ReadFirstRecord( void );
extern BOOL FLASH_WriteConfig( uchar Type );
extern BOOL FLASH_ReadConfig( uchar Type );

#endif

⌨️ 快捷键说明

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