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

📄 ct_flash.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
typedef struct _CT_FLASH_INFO
{
	u32	u32Manufacture;  /*!< The manufacturer ID of flash not support CFI. */
	u32	u32Device;   /*!< The device ID of flash. */
	u8	u8BlockSizeIndex;
} CT_FLASH_INFO;

typedef struct _CT_FLASH_BLOCK_SIZE
{
	unsigned int	num_erase_blocks;   /*!< Number of sector defs. */
	unsigned long	sector_size[5]; /*!< Byte size of sector */
	unsigned int	num_sectors[5];   /*!< Num sectors of this size */
} CT_FLASH_BLOCK_SIZE;

static CT_FLASH_BLOCK_SIZE const stBlockSizeTable[]=
{
  	{1, {0x1000,	0,	0,	0,	0}, { 128, 	0,	0,  0,	0}},//4M  	4Kx128
  	{1, {0x1000,	0,	0,	0,	0}, { 256, 	0,	0,  0,	0}},//8M	4Kx256
  	{1, {0x1000,	0,	0,	0,	0}, { 512, 	0,	0,  0,	0}},//16M	4Kx512
  	{1, {0x1000,	0,	0,	0,	0}, { 1024,	0,	0,  0,	0}},//32M	4Kx1024
  	  	
   	{5, {0x10000,	0x8000,	0x4000,	0x2000,	0x1000}, 	{ 7, 	1, 	1,  1,	2}},//4MTop
  	{5, {0x1000	,	0x2000,	0x4000,	0x8000,	0x10000}, 	{ 2, 	1, 	1,  1,	7}},//4MBottom
  		
  	{5, {0x10000,	0x8000,	0x4000,	0x2000,	0x1000}, 	{ 15, 	1, 	1,  1,	2}},//8MTop
  	{5, {0x1000	,	0x2000,	0x4000,	0x8000,	0x10000}, 	{ 2, 	1, 	1,  1,	15}},//8MBottom
  	   	
  	{5, {0x10000,	0x8000,	0x4000,	0x2000,	0x1000}, 	{ 31, 	1, 	1,  1,	2}},//16MTop
  	{5, {0x1000	,	0x2000,	0x4000,	0x8000,	0x10000}, 	{ 2, 	1, 	1,  1,	31}},//16MBottom  		

	{1, {0x10000,	0,	0,	0,	0}, { 8, 	0,	0,  0,	0}},//4M	64Kx8	
	{1, {0x10000,	0,	0,	0,	0}, { 16, 	0,	0,  0,	0}},//8M	64Kx16	
	{1, {0x10000,	0,	0,	0,	0}, { 32, 	0,	0,  0,	0}},//16M	64Kx32
	{1, {0x10000,	0,	0,	0,	0}, { 64, 	0,	0,  0,	0}},//32M	64Kx64
	{1, {0x10000,	0,	0,	0,	0}, { 128, 	0,	0,  0,	0}},//64M	64Kx128	
};

typedef enum _SPIFlashStruct
{
	en4Mx128 = 0,		//4M 	4k x 128 Sector
	en8Mx256,			//8M 	4k x 256 Sector
	en16Mx512,			//16M 	4k x 512 Sector
	en32Mx1024,			//32M 	4k x 1024 Sector	
	en4MTOP,			//4M 	TOP
	en4MBTM,			//4M 	BOTTOM
	en8MTOP,			//8M 	TOP
	en8MBTM,			//8M 	BOTTOM
	en16MTOP,			//8M 	TOP
	en16MBTM,			//8M 	BOTTOM
	en4Mx8,				//4M 	64k x 8 Sector
	en8Mx16,			//8M 	64k x 16 Sector
	en16Mx32,			//16M 	64k x 32 Sector
	en32Mx64,			//32M 	64k x 64 Sector
	en64Mx128,			//64M 	64k x 128 Sector	
} SPIFlashStruct;


static CT_FLASH_INFO const stFlashInfoTable[]=
{
	//==========================================================
	// Flash Area ID
	//==========================================================

	// 3V boot sector, byte/word mode both
	{MXICPART , ID_MX25L4005    , en4Mx128},	//4M	4k x 128
	{MXICPART , ID_MX25L8005    , en8Mx256},	//8M	4k x 256
	{MXICPART , ID_MX25L1605    , en16Mx32},	//16M	64k x 32
	{MXICPART , ID_MX25L3205    , en32Mx64},	//32M	64k x 64
		
	{SST 	  , ID_SST25LF040A  , en4Mx128},	//4M	4k x 128
	{SST 	  , ID_SST25LF080A  , en8Mx256},	//8M	4k x 256
	{SST 	  , ID_SST25VF016B	, en16Mx512},	//16M	4k x 512
	
	{EON 	  ,	ID_EN25B80    	, en8MBTM},
	{EON 	  ,	ID_EN25B80T   	, en8MTOP},
	{EON 	  ,	ID_EN25B40B    	, en4MBTM},
	{EON 	  ,	ID_EN25B40T   	, en4MTOP},
	{EON 	  ,	ID_EN25P40   	, en4Mx128},
	{EON 	  ,	ID_EN25B16B   	, en16MBTM},
    {EON 	  ,	ID_EN25B32B   	, en32Mx64},
	{EON 	  ,	ID_EN25F80    	, en8Mx256}, //Eon_F80
    {EON 	  ,	ID_EN25B64B   	, en64Mx128},
    {EON 	  ,	ID_EN25F16   	, en16Mx512},    

	{WINBOND  ,	ID_W25D40B  	, en4MBTM},
	{WINBOND  ,	ID_W25D40T  	, en4MTOP},
	{WINBOND  ,	ID_W25X40  		, en4Mx128},	//4M	4k x 8	
	{WINBOND  ,	ID_W25X80   	, en8Mx16},		//8M	64k x 16	
	{WINBOND  ,	ID_W25X16    	, en16Mx32},	//16M	64k x 32
	{WINBOND  ,	ID_W25X32    	, en32Mx64},	//32M	64k x 64
	{WINBOND  ,	ID_W25X64   	, en64Mx128},	//64M	64k x 128
	
	{PMC	  ,	ID_PM25LV040	, en4Mx128},	//4M 	4K x 8
	
	{ATMEL 	  ,	ID_AT26DF081A   , en8Mx256},	//8M	4k x 256
	{ATMEL 	  ,	ID_AT26F004   	, en4Mx128},	//4M 	4K x 128
	{ATMEL 	  ,	ID_AT26DF161   	, en16Mx32},	//16M	64k x 32	
	
	{AMIC 	  ,	ID_A25L16P   	, en16MBTM},	
	{AMIC 	  ,	ID_A25L80P   	, en8MBTM},
	{AMIC 	  ,	ID_A25L40P   	, en4MBTM},

	{ESI 	  ,	ID_ES25P16   	, en16Mx512},	//16M	4k x 512

	{SPANSION ,	ID_FL004A   	, en4Mx8},	//4M	64k x 8 
	{SPANSION ,	ID_FL008A   	, en8Mx16},	//8M	64k x 16
	{SPANSION ,	ID_FL016A   	, en16Mx32},	//16M	64k x 32
	{SPANSION ,	ID_FL032A   	, en32Mx64},	//16M	64k x 32
	{SPANSION ,	ID_FL064A   	, en64Mx128},	//16M	64k x 32	
	
	{ST		  ,	ID_M25P80   	, en8Mx16},		//8M	64k x 16	
	{ST		  ,	ID_M25P16   	, en16Mx32},	//16M	64k x 32
	{ST		  ,	ID_M25P32   	, en32Mx64},	//32M	64k x 64
	{ST		  ,	ID_M25P64   	, en64Mx128},	//64M	64k x 128	
	
	{ESMT		  ,	ID_EFL008A   	, en8Mx256},	//8M	256sector x 4k 
	{ESMT		  ,	ID_EFL016A   	, en16Mx512},	//16M	512sector x 4k 
};


/* ---------------------------------------------------------------------------------*/
/* 	Flash command start area.		*/
/* ---------------------------------------------------------------------------------*/
/*********************************************************************/
/* Flash_status utilizes the DQ6, DQ5, and DQ3 polling algorithms    */
/* described in the flash data book.  It can quickly ascertain the   */
/* operational status of the flash device, and return an             */
/* appropriate status code (defined in flash.h)                      */
/*********************************************************************/
EN_DRV_RESULT CT_Flash_Status( flash_ft * fp )
{
	int Result;
#ifdef CT_OS_CHECK_STACKSIZE
	CT_OS_RecordTaskStack();
#endif

	Result =  CT_STATUS_READY;/*DQ6 not Toggle => Pass*/

//	CT_Print(GROUP_FLASH | LEVEL_INFO," Counter %d  Result %d\n\r",Counter,Result);
	return Result;
}
/*!
	CTH_Flash_Reset
	Flash Reset Status.

	Remarks
		None.

	Parameters
		None.

	Return Values
		None.
 */
EN_DRV_RESULT CT_Flash_Reset( void )
{
#ifdef CT_OS_CHECK_STACKSIZE
	CT_OS_RecordTaskStack();
#endif

	return SUCCESS;			// FLASH_OK;
}
/*!
	CTH_Flash_GetManufactcode
	Get Flash Manufact code.

	Remarks
		None.

	Parameters
		None.

	Return Values
		Flash Manufact code.
 */
u32 CT_Flash_GetManufactcode( void )
{
	register unsigned int answer;
#ifdef CT_OS_CHECK_STACKSIZE
	CT_OS_RecordTaskStack();
#endif
	DEBUGF("\n    Get Flash Manufactuer CODE: ");

   //To Do:Read Manufactcode ID.

    answer = SPF_INFO1.wID >> 8;
    
	return (answer & DATAMASK);
}

/*!
	CTH_Flash_GetDeviceid
	Get Flash Device ID number.

	Remarks
		None.

	Parameters
		None.

	Return Values
		Flash Device ID number.
 */
u32 CT_Flash_GetDeviceid( unsigned int ManuFactureID )
{
	register unsigned int answer;

#ifdef CT_OS_CHECK_STACKSIZE
	CT_OS_RecordTaskStack();
#endif
	DEBUGF("\n    Get Flash deice ID: ");

   //To Do: Read ID.
   
    answer = SPF_INFO1.wID;

	return (answer & DATAMASK);

}

/*!
	CTH_Flash_SectorErase
	Flash Secotr Erase.

	Remarks
		None.

	Parameters
		addr  = flash sector erase for byte mode start address.

	Return Values
		None.
 */
EN_DRV_RESULT CT_Flash_SectorErase( u32 addr )
{

#ifdef CT_OS_CHECK_STACKSIZE
	CT_OS_RecordTaskStack();
#endif
	
	if(SPF_EraseSector(addr) == TRUE)
		return DRV_OK;		
	else
		return DRVERR_NOTOK;
}

/*!
	CTH_Flash_ChipErase
	Flash Chip Erase.

	Remarks
		None.

	Parameters
		None.

	Return Values
		None.
 */
EN_DRV_RESULT CT_Flash_ChipErase( void )
{

#ifdef CT_OS_CHECK_STACKSIZE
	CT_OS_RecordTaskStack();
#endif

	if(SPF_EraseChip() == TRUE)
		return DRV_OK;
	else
		return DRVERR_NOTOK;
}

/*!
	CTH_Flash_Burn
	Burn Flash Data.

	Remarks
		None.

	Parameters
		faddr = flash write start address.
		daddr = DRAM data start address.
		size  = Burn data size(Byte size).

	Return Values
		None.		

⌨️ 快捷键说明

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