📄 flash.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 + -