⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flashloader.c

📁 linked list construct to support any number of Flash banks.
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********************************文件头部注释*******************************************/

/*/////////////////////////////////////////////////////////////////////////////////////////
//
// 文件名:		flashloader.c
//
// 创建者:		HCX
//
// 创建时间:	2002.05.12
//
// 文件描述:	包含loader部分关于flash设备的全部驱动
//
// 修改记录:
//				日期(月.日.年)   作者   修改原因及内容
//
//
/////////////////////////////////////////////////////////////////////////////////////////*/


/************************************文件包含*********************************************/

#include <string.h>
#include <ostime.h>
#include <stdarg.h>

#include "stlite.h"
#include "stddefs.h"
#include "stflashd.h"
#include "stcommon.h"

#include "app_data.h"

/* Private Types ---------------------------------------------------------- */

/* linked list construct to support any number of Flash banks */

struct inst_t
{
    struct inst_t       *Next;                      /* ptr. to next (else NULL) */
    ST_DeviceName_t     BankName;                   /* Initialization bank name */
    U32                 MagicNumber;                /* Handle validity check value */
    BOOL                BankOpen;                   /* Flash bank Opened iff TRUE */
    U32                 LastOffsP1;                 /* last offset plus one */
    U32                 DeviceCode;                 /* stored for GetParams */
    U32                 ManufactCode;               /* stored for GetParams */
    STFLASH_DeviceType_t DeviceType;                /* Flash device type */
    U32                 *BaseAddress;               /* Flash bank base address */
    U32                 *VppAddress;                /* Flash bank Vpp enable address */
    U32                 MinAccessWidth;             /* Access width of device(s) (bytes) */
    U32                 MaxAccessWidth;             /* devices per bank * MinAccessWidth */
    U32                 MinAccessMask;              /* MinAccessWidth - 1 */
    U32                 MaxAccessMask;              /* MaxAccessWidth - 1 */
    ST_Partition_t      *DriverPartition;           /* base address of partition */    
    U32                 NumberOfBlocks;             /* number of regions in Blocks */
    STFLASH_Block_t     Blocks[1];                  /* extendable size */
};

typedef struct inst_t   stflash_Inst_t;


/************************************常量定义*********************************************/
#define MAGIC_NUMBER    0x31415927                  /* easy as pi(e) */

/* /////////////////////////////////////////
 /////   hcx add for flash            //////
 /////////////////////////////////////////*/

#define STFLASH_BANK_0_BASE     FLASH_BANK_0_BASE_ADDRESS
#define STFLASH_BANK_1_BASE     FLASH_BANK_1_BASE_ADDRESS
#define   FLASH_BOOT_BLOCK_ADDR			0x7fff0000


#ifdef  FLASH_BOTTOM_8M
#define MIN_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS
#define MAX_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS

#define   FLASH_BOOT_BLOCK_NO			19
#define NUM_BLOCKS           19

#define DEVICE_TYPE STFLASH_M29W800B

static  STFLASH_Block_t      BlockData_s[NUM_BLOCKS] =
{ 
  { STFLASH_BOOT_0_SIZE, STFLASH_BOOT_BLOCK },
  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
  { STFLASH_PARA_1_SIZE, STFLASH_PARAMETER_BLOCK },
  { STFLASH_MAIN_1F_SIZE, STFLASH_MAIN_BLOCK },

  { STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK }};

#endif

#ifdef   FLASH_TOP_8M
#define MIN_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS
#define MAX_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS

#define   FLASH_BOOT_BLOCK_NO			19
#define NUM_BLOCKS           19

#define DEVICE_TYPE STFLASH_M29W800T

static  STFLASH_Block_t      BlockData_s[NUM_BLOCKS] =
{ 
	{ STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_1F_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
  { STFLASH_PARA_1_SIZE, STFLASH_PARAMETER_BLOCK },
  { STFLASH_BOOT_0_SIZE, STFLASH_BOOT_BLOCK } };

#endif

#ifdef  FLASH_BOTTOM_16M
/* keith modification */
#if 1

#define MIN_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS
#define MAX_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS

#define   FLASH_BOOT_BLOCK_NO			39
#define NUM_BLOCKS           39

#define DEVICE_TYPE STFLASH_M29W1600B

static	STFLASH_Block_t      BlockData_s[NUM_BLOCKS] =
	{ 
	  { STFLASH_PARA_0_SIZE, STFLASH_BOOT_BLOCK  },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },

	  { STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_F_SIZE, STFLASH_MAIN_BLOCK },

	  { STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK }};

#else

#define MIN_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS
#define MAX_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS

#define   FLASH_BOOT_BLOCK_NO			35
#define NUM_BLOCKS           35

#define DEVICE_TYPE STFLASH_M29W1600B

static  STFLASH_Block_t      BlockData_s[NUM_BLOCKS] =
{ 
  { STFLASH_BOOT_0_SIZE, STFLASH_BOOT_BLOCK },
  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
  { STFLASH_PARA_1_SIZE, STFLASH_PARAMETER_BLOCK },
  { STFLASH_MAIN_1F_SIZE, STFLASH_MAIN_BLOCK },

  { STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK },

  { STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK },
  { STFLASH_MAIN_F_SIZE, STFLASH_MAIN_BLOCK }};
  
#endif
#endif

#ifdef  FLASH_TOP_16M

	#define MIN_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS
	#define MAX_ACCESS_WIDTH     STFLASH_ACCESS_16_BITS

	#define   FLASH_BOOT_BLOCK_NO			35
	#define NUM_BLOCKS           35
	
	#define DEVICE_TYPE STFLASH_M29W1600T

	static  STFLASH_Block_t      BlockData_s[NUM_BLOCKS] =
	{ 
		{ STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_F_SIZE, STFLASH_MAIN_BLOCK },

		{ STFLASH_MAIN_0_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_1_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_2_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_3_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_4_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_5_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_6_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_7_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_8_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_9_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_A_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_B_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_C_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_D_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_E_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_MAIN_1F_SIZE, STFLASH_MAIN_BLOCK },
	  { STFLASH_PARA_0_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_PARA_1_SIZE, STFLASH_PARAMETER_BLOCK },
	  { STFLASH_BOOT_0_SIZE, STFLASH_BOOT_BLOCK } };
#endif


/**********************************外部变量声明*******************************************/


/*******************************本文件使用变量定义****************************************/

static semaphore_t      Atomic;
static stflash_Inst_t   *stflash_Sentinel = NULL; /* ptr. to first node */
static const ST_Revision_t stflash_DriverRev = "STFLASH-REL_2.0.2";


/**************************************函数***********************************************/
static void VppEnable( U32 *VppAddress );
static void VppDisable( U32 *VppAddress );
static ST_ErrorCode_t m29w800t_Write( stflash_Inst_t *ThisElem,
                                      U32 Offset[],
                                      U8  *Buffer[],
                                      U32 NumberToWrite[],
						U32 iBlockNumToWrite,
                                      U32 *NumberActuallyWritten );



/****************************************************************************
Name         : STFLASH_Init()

Description  : Generates a linked list element for each instance called,
               into which the caller's InitParams are copied.  Also
               attempts to Read the Electronic Signature to identify
               the device, which is returned in STFLASH_Params_t when
               GetParams() is called.

Parameters   : ST_DeviceName_t Name of the Flash bank, and a pointer to
               STFLASH_InitParams_t InitParams data structure.

Return Value : ST_ErrorCode_t specified as
               ST_NO_ERROR                     No errors occurred
               ST_ERROR_NO_MEMORY              Insufficient memory free
               ST_ERROR_ALREADY_INITIALISED    Bank already initialised
               ST_ERROR_BAD_PARAMETER          Error in parameters passed

See Also     : STFLASH_InitParams_t
               STFLASH_GetParams()
               STFLASH_Term()
 ****************************************************************************/

ST_ErrorCode_t STFLASH_Init( const ST_DeviceName_t      Name,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -