📄 flash_drv.c
字号:
//----------------------------------------------------------------------------
// Filename : Flash_drv.c
//----------------------------------------------------------------------------
//
// Copyright (c) 2008,东莞太平计算机科技有限公司
// All rights reserved.
// www.pacific-gold.com.cn
//
// 历史版本:
//
// 版本: V1.0
// 作者: 罗先能
// 日期: 2007-12-21
// 描述: 建立第一版本
//
//
// 描述:
// 1. 设备st39vf1601的驱动程序
//
//
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------------
// system headers
#include "71x_lib.h"
// internal headers
#include "Flash_drv.h"
// extern headers
#include "flashhelper.h"
//----------------------------------------------------------------------------
// Local Constant Definitions
//----------------------------------------------------------------------------
typedef enum
{
FLASH_BASE = 0x60000000,
ASC_BASE = 0x60004000,
HZK_BASE = 0x60005000,
USER_BASE = 0x6004a800
} FLASH_SPACE_DEF;
//----------------------------------------------------------------------------
// Local Variables Definitions
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Global Variables Definitions
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Local Function Definitions
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Global Function Definitions
//----------------------------------------------------------------------------
/**************************************************************
* Function: flash_init(...)
* Description:
* initialize the device of extern flash
* Input: no
*
* Return: TRUE : ok
* FALSE: error
*
**************************************************************/
public bool flash_init( void )
{
Flash_Init();
return TRUE;
}
/**************************************************************
* Function: flash_open(...)
* Description: open the device of extern flash
*
* Input: no
*
* Return: TRUE : ok
* FALSE: error
**************************************************************/
public bool flash_open( void )
{
return TRUE;
}
/**************************************************************
* Function: flash_close(...);
* Description:
* not use
* Input:
*
* Return:
*
**************************************************************/
public bool flash_close( void )
{
return TRUE;
}
/**************************************************************
* Function: flash_write(...)
* Description: write datas to the device of flash
*
* Input: offset [--> ]: start address
* size [--> ]: the number of data bytes
* buffer [--> ]: the datas
* Return: TRUE : ok
* FALSE: error
**************************************************************/
public bool flash_write(u32 addr, u32 size, void* buffer)
{
if( ExtFlash_Program(addr, buffer, size) == -1 ) return FALSE;
return TRUE;
}
/**************************************************************
* Function: flash_read(...)
* Description: read datas from flash
*
* Input: offset [--> ]: start address of extern flash
* size [<-->]:
* [ -->]: the size of want to get.
* [<-- ]: return the size of have getted data.
* buffer [<-- ]: the buffer of return data
*
* Return: TRUE : ok
* FALSE: error
**************************************************************/
public bool flash_read(u32 addr, u32 size, void* buffer)
{ u32 i;
vu16 *address_ptr;
u16 temp;
u8 *buffer_ptr;
address_ptr = (vu16*)addr;
buffer_ptr = (u8*)buffer;
if( size==0 || buffer==NULL ) return FALSE;
for(i=0; i<size; i++)
{
temp = *address_ptr;
*buffer_ptr = (u8)temp;
buffer_ptr++;
if((++i)<size) *buffer_ptr = (u8)(temp>>8);
address_ptr++;
buffer_ptr++;
}
return TRUE;
}
/**************************************************************
* Function: flash_ctrl(...)
* Description: controll the flash
*
* Input: cmd [--> ]: control command
* arg [--> ]: parameter of command
* buffer[--> ]:
* Parameter: cmd, arg, buffer
* -------------------------------------
* CHIP_ERASE, - , -
* BLOCK_ERASE, address, -
* SECTOR_ERASE, address, -
* WORD_PROGRAM, address, buffer[0]
* GET_SPACE,
* GET_USED_SPACE,
* GET_RELEASE_SPACE,
* GET_ID,
*
* Return: TRUE: ok
* FALSE: error
**************************************************************/
public bool flash_ctrl( FLASH_CTRL_DEF cmd, u32 arg, void* buffer )
{
switch(cmd)
{ // 1. chip erase
case CHIP_ERASE:
{
ExtFlash_ChipErase();
break;
}
// 2. block erase
case BLOCK_ERASE:
{
if( ExtFlash_BlockErase(arg) == -1) return FALSE;
break;
}
// 3. sector erase
case SECTOR_ERASE:
{
if( ExtFlash_SectorErase(arg) == -1) return FALSE;
break;
}
// 4. word program
case WORD_PROGRAM:
{
if( ExtFlash_WordWrite(arg,((u16*)buffer)[0]) == -1 ) return FALSE;
break;
}
// 5. get the size of all space
case GET_SPACE:
{
{ return FALSE; }
break;
}
// 6. get_the size of used space
case GET_USED_SPACE:
{
{ return FALSE; }
break;
}
// 7. get the size of release space
case GET_RELEASE_SPACE:
{
{ return FALSE; }
break;
}
// 8. get the chip's ID
case GET_ID:
{
{ return FALSE; }
break;
}
default:
{ return FALSE; }
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -