|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
// File name : eflash_drv.h
|
|
|
// Version : V0.1
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
#ifndef __EFLASH_DRV_H__
|
|
|
#define __EFLASH_DRV_H__
|
|
|
|
|
|
#include "type.h"
|
|
|
#include "memmap.h"
|
|
|
|
|
|
#define EFCR EFM_BASE_ADDR
|
|
|
|
|
|
#define EFLASH_BASE (0x8000000)
|
|
|
#define EFLASH_PAGE_SIZE_BYTE (0x200) //512
|
|
|
#define EFLASH_PAGE_SIZE_HFWORD (0x100) //256
|
|
|
#define EFLASH_PAGE_SIZE_WORD (0x80) //128
|
|
|
#define EFLASH_BYTE_SIZE (0x80000) //512kbytes, 128k words
|
|
|
#define EFLASH_ALL_PAGE_LEN (1024) //1024page
|
|
|
#define PAGE_MASK (EFLASH_PAGE_SIZE_BYTE-1)
|
|
|
|
|
|
#define EFLASH_WRITEABLE TRUE
|
|
|
#define EFLASH_READABLE TRUE
|
|
|
#define EFLASH_DISWRITEABLE FALSE
|
|
|
#define EFLASH_DISREADABLE FALSE
|
|
|
|
|
|
#define EFM0_MAIN_BASEADDR (0x08000000)
|
|
|
#define EFM0_MAIN_LEN (0x00080000)
|
|
|
|
|
|
#define EFLASH_PAGE_SIZE_BYTE (0x200)
|
|
|
#define EFLASH_PAGE_SIZE_HFWORD (0x100) //256
|
|
|
#define EFLASH_PAGE_SIZE_WORD (0x80) //128
|
|
|
|
|
|
#define EFLASH_OP_PASS 0
|
|
|
#define EFLASH_OP_FAIL 1
|
|
|
#define EFLASH_PARA_ERR 2
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFlash_Disboot
|
|
|
* Description : disboot
|
|
|
* Input : - None
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : TRUE or FALSE
|
|
|
******************************************************************************/
|
|
|
extern UINT8 EFlash_Disboot(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFlash_Recovery_to_Boot
|
|
|
* Description : 回到ROM BOOT状态
|
|
|
* Input : - None
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : TRUE or FALSE
|
|
|
******************************************************************************/
|
|
|
extern UINT8 EFlash_Recovery_to_Boot(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_Set_RWSC
|
|
|
* Description : 设置EFLASH RWSC值
|
|
|
* Input : -rwsc: rwsc值,默认为0x07
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
void EFLASH_Set_RWSC(UINT8 rwsc);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_Init
|
|
|
* Description : EFLASH初始化
|
|
|
* Input : - f_sys_khz: 系统时钟(单位khz)
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
void EFLASH_Init(UINT32 sys_clk_khz);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_SetWritePermission
|
|
|
* Description : 开启EFLASH首块操作
|
|
|
* Input : None
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
void EFLASH_SetWritePermission(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_ClrWritePermission
|
|
|
* Description : 关闭EFLASH首块操作
|
|
|
* Input : None
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
void EFLASH_ClrWritePermission(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_ByteRead
|
|
|
* Description : 从EFLASH目标地址读取一个byte数据
|
|
|
* Input : - addr: EFLASH destination address
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 读取的byte数据
|
|
|
******************************************************************************/
|
|
|
extern UINT8 EFLASH_ByteRead(UINT32 addr);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_HalfWordRead
|
|
|
* Description : 从EFLASH目标地址读取一个half word数据
|
|
|
* Input : - addr: EFLASH destination address
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 读取的half word数据
|
|
|
******************************************************************************/
|
|
|
extern UINT16 EFLASH_HalfWordRead(UINT32 addr);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_WordRead
|
|
|
* Description : 从EFLASH目标地址读取一个word数据
|
|
|
* Input : - addr: EFLASH destination address
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 读取的word数据
|
|
|
******************************************************************************/
|
|
|
extern UINT32 EFLASH_WordRead(UINT32 addr);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_WordsRead
|
|
|
* Description : 从EFLASH目标地址读取长度为len的word数据
|
|
|
* Input : - addr: EFLASH destination address
|
|
|
* - len: 需要读取word数据的长度
|
|
|
*
|
|
|
* Output : - des: 读取的word数据缓冲
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void EFLASH_WordsRead(UINT32 addr, UINT32 *des, UINT32 len);
|
|
|
extern void EFLASH_WordsRead_8(UINT32 addr, UINT8 *des, UINT32 len);
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_PageErase
|
|
|
* Description : EFLASH页擦除
|
|
|
* Input : - addr: 要擦除的EFLASH页地址
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 0:擦除成功 1:擦除失败
|
|
|
******************************************************************************/
|
|
|
extern UINT8 EFLASH_PageErase(UINT32 addr);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_WordProg
|
|
|
* Description : EFLASH的单word编程
|
|
|
* Input : - addr: 要编程的EFLASH地址
|
|
|
* - dat: 编程的word数据
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 0:编程成功 1:编程失败
|
|
|
******************************************************************************/
|
|
|
extern UINT8 EFLASH_WordProg(UINT32 addr, UINT32 dat);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_WordsProg
|
|
|
* Description : EFLASH的多word编程
|
|
|
* Input : - addr: 要编程的EFLASH地址
|
|
|
* - des: 编程的word数据指针
|
|
|
* - len: 要编程的word数据长度
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 0:编程成功 1:编程失败
|
|
|
******************************************************************************/
|
|
|
extern UINT8 EFLASH_WordsProg(UINT32 addr, UINT32 *des, UINT32 len);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : EFLASH_Write
|
|
|
* Description : EFLASH任意地址写数据
|
|
|
* Input : - flash_addr: 目的地址
|
|
|
* - ram_addr: 源地址指针
|
|
|
* - len: 数据长度
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : TRUE:编程成功 FALSE:编程失败
|
|
|
******************************************************************************/
|
|
|
UINT8 EFLASH_Write(UINT32 flash_addr, const UINT8* ram_addr, UINT32 len);
|
|
|
|
|
|
#endif // end of __EFLASH_DRV_H__
|