?? ddfrom.h
字號:
/********************************************************************/
/* Copyright (c) 2005,夏新電子通信事業部 */
/* All rights reserved. */
/* */
/* 文件名稱:Ddfrom.h */
/* 摘 要:該文件包含Atmel Flash驅動中間層的函數聲明和宏定義 */
/* */
/* 當前版本:1.0 */
/* 作 者:王勁濤 */
/* 完成日期:2005年6月14日 創建 */
/* */
/********************************************************************/
#ifndef _DDFROM_H_
#define _DDFROM_H_
#define ATMEL_1601
/**-----------------------------------------------------------------*/
/** Compiler Flag */
/**-----------------------------------------------------------------*/
#ifdef __cplusplus
extern "C"
{
#endif
#include "Tdef.h"
/**-----------------------------------------------------------------*/
/** 枚舉型定義 */
/**-----------------------------------------------------------------*/
typedef enum
{
FML_SUCCESS = 0, //FML層操作成功
FML_FAILURE //FML層操作失敗
}FML_RESULT; //FML層函數操作結果
typedef enum
{
FML_FLASH_FREE = 0, //未使用
FML_FLASH_INUSE, //使用中
FML_FLASH_INVALID //已廢棄
}FML_FLASH_STATUS; //FLASH的使用狀態
/**-----------------------------------------------------------------*/
/** 結構體定義 */
/**-----------------------------------------------------------------*/
typedef struct
{
byte page_lid; //塊內邏輯頁號
byte page_sts; //頁狀態
}PAT_UNIT_INFO; //PAT管理單元
/**-----------------------------------------------------------------*/
/** 常量定義 */
/**-----------------------------------------------------------------*/
#define ROM_BASE 0xE00000 //Flash基地址,待定
#define BLOCK_SIZE 0x8000 //可根據Flash型號修改
#define PAGE_SIZE 128 //可根據Flash型號及應用情況修改
#define MAX_USE_BLOCK 3 //可擦除塊個數,根據可變更數據情況定義
#define MAX_FREE_BLOCK 1 //備用塊個數,根據Flash剩余空間大小定義
#define MAX_PHY_PAGE_NUM 254 //每個可擦除塊中最大有效物理頁個數
//chg start by wjt 2005.09.06
//#define MAX_LOGIC_PAGE_NUM 200 //每個可擦除塊中最大有效邏輯頁個數
#define MAX_LOGIC_PAGE_NUM 160 //每個可擦除塊中最大有效邏輯頁個數
//chg end by wjt 2005.09.06
#define BLOCK_INFO_SIZE 2 //塊信息占用空間
#define PAT_SIZE 254 //可擦除塊中分配表PAT大小
#define MAX_TIMEOUT 0x7FFF //判斷Prog是否結束的最大檢測次數
#define Erase_MAX_TIMEOUT 0x7FFFFFFF //判斷Erase是否結束的最大檢測次數
#define BLOCK_ADDR_INVALID 0xFFFFFFFF //塊物理地址非法
#define IO7_BIT 0x0080 // IO/7標志位
#define ERASE_PROG_CODE_SIZE 64 //擦除/字寫入的代碼長度
//塊狀態定義
#define BLOCK_INVALID 0x0000 //該Block已廢棄
#define BLOCK_IN_USE 0xFF00 //該Block已使用
#define BLOCK_FREE 0xFFFF //該Block未使用
//頁狀態定義
#define PAGE_USED 0x00 //該頁已使用
#define PAGE_FREE 0xFF //該頁未使用
#define PAGE_INVALID 0x0000 //該頁已廢棄
//Flash地址偏移量轉換
#define sysAddress(offset) ((volatile word *)( ROM_BASE + (offset)*2))
#define CMN_FSY_OK 0x00
#define CMN_FSY_DRIVER_ERROR 0x01
#ifdef ATMEL_1601
#define FONT_BLOCK_NUM 4
#define MAIN_BLOCK_NUM 31
#define PARA_BLOCK_NUM 8
#define MAIN_BLOCK_SIZE 32*1024
#define PARA_BLOCK_SIZE 4*1024
#define PRRA_BLOCK_START_ADDR MAIN_BLOCK_SIZE*MAIN_BLOCK_NUM
#endif
/**--------------------------------------------------------------------------*
** Atmel Flash 驅動中間層函數聲明 *
**--------------------------------------------------------------------------*/
//提供給A09文件系統的API
word dDFRomFormat(void); //格式化Flash中存放可變數據的塊
word dDFRomInit(void); //初始化驅動中間層的管理
word dDFRomRead(word aUnit, word nID, byte *pcBuffer); //根據起始邏輯頁號從Flash上讀入一頁或幾頁的信息
word dDFRomWrite(word nID, byte *aSrcAddr); //根據起始邏輯頁號向Flash上寫入一頁或幾頁的信息
word dDFRomStatusChk(void); //判斷輸入的邏輯頁號是否在規定范圍內
word dDFRomReWriteSet(word aMode); //Flash碎片的整理回收,為兼容原有文件系統而保留,不做具體操作
//Atmel Flash 驅動中間層內部函數
void FML_init(void); //解除開機后所有FML管理下的Flash塊的soft-lock
word FML_SectorUnLockF(void); //Atmel Flash Block軟解鎖
FML_RESULT FML_BlockEraseF(ulong pwAddr);
FML_RESULT FML_ProgOneWordF(ulong dst, word data);
FML_RESULT FML_ProgOnePage(ulong dst, word *src); //往Flash的指定地址上寫入1頁的數據
static FML_RESULT FML_ReadOnePage(ulong addr, word *data_ptr); //從Flash的指定地址上讀入1頁數據
static FML_FLASH_STATUS FML_GetRealAddr(ulong nID, byte *block_id,
byte *page_id, ulong page_addr); //得到邏輯頁對應的真實物理地址
static FML_RESULT FML_AllocNewBlock(byte block_id, ulong *block_addr); //分配新的物理塊
static FML_RESULT FML_BlockCopy(byte block_id); //將可用空間不足的物理塊上的數據整理復制到新塊中
static FML_RESULT FML_AllocNewPage(byte block_id, ulong *page_addr); //分配新的物理頁并置為待寫入狀態
word FML_SectorUnLock(void);
word FML_BlockErase(ulong block_addr); //擦除已廢棄的物理塊
word FML_ProgOneWord(ulong dst, word data); //往Flash的指定地址上寫入1個word
word FML_SectorLockF(ulong sector);
#ifdef __cplusplus
}
#endif
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -