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