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

📄 flash_drv_sharp.c

📁 MTK手机平台下载工具FLASHTOOL驱动源码
💻 C
字号:
/*******************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2004
*
*******************************************************************************/

/*******************************************************************************
 *
 * Filename:
 * ---------
 *	  flash_drv_SHARP.c
 *
 * Project:
 * --------
 *    FlashTool Download Agent 
 *
 * Description:
 * ------------
 *    This Module defines the SHARP flash driver. 
 *
 * Author:
 * -------
 *	  Amos Hsu
 *
 *==============================================================================
 * 				HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *------------------------------------------------------------------------------
 * $Revision:   1.1  $ 
 * $Modtime:   Jan 12 2006 14:22:14  $
 * $Log:   //mtkvs01/vmdata/flash_tool/archives/DA/SRC/flash_drv_SHARP.c-arc  $
 * 
 *    Rev 1.1   Jan 14 2006 00:20:40   mtk00539
 * Bug fixes:
 *  1. [DA] Fix SHARP LH28F16 flash download fail problem. 
 * Resolution for 159: [FlashTool v2.7.1015]
 * 
 *    Rev 1.0   Nov 22 2004 12:30:28   mtk00539
 * Initial revision.
 * 
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *==============================================================================
 *******************************************************************************/
#include "flash_drv_SHARP.h"

//------------------------------------------------------------------------------
// Callback Function Set                                                        
//------------------------------------------------------------------------------
const NOR_CMD_Callback_S	SHARP_CMD_CB_WORD_PGM = {
	INTEL_CheckDevID,
	DUMMY_CheckDevIdle,
	INTEL_Erase_Block_CMD,
	SHARP_CheckDone,
	DUMMY_Program_PreProcess,
	DUMMY_Program_PostProcess,
	INTEL_Block_Unlock,
	DUMMY_Program_Exit,
	INTEL_Word_Program,
	SHARP_CheckDone,
	NULL,
	NULL
};

const NOR_CMD_Callback_S	SHARP_CMD_CB_16WORD_BUF_PGM = {
	INTEL_CheckDevID,
	DUMMY_CheckDevIdle,
	INTEL_Erase_Block_CMD,
	SHARP_CheckDone,
	SHARP_PreProcess_16WORD_BUFPGM,
	DUMMY_Program_PostProcess,
	INTEL_Block_Unlock,
	DUMMY_Program_Exit,
	INTEL_Word_Program,
	SHARP_CheckDone,
	INTEL_Buf_Program,
	SHARP_CheckDone
};

const NOR_CMD_Callback_S	SHARP_CMD_CB_WORD_PGM_NO_UNLOCK = {
	INTEL_CheckDevID,
	DUMMY_CheckDevIdle,
	SHARP_Erase_Block_CMD,
	SHARP_CheckDone,
	DUMMY_Program_PreProcess,
	DUMMY_Program_PostProcess,
	DUMMY_Program_Enter,
	DUMMY_Program_Exit,
	INTEL_Word_Program,
	SHARP_CheckDone,
	NULL,
	NULL
};

//------------------------------------------------------------------------------
// Memory Sector Layout Set                                                     
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Check Device ID Callback Function                                            
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Check If Device Is Idle Callback Function                                    
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Erase Related Callback Function                                              
//------------------------------------------------------------------------------
void SHARP_Erase_Block_CMD(const uint32 blockaddr)
{
	volatile uint16 *ba = (volatile uint16 *)blockaddr;

	// clear status register first 
	ba[0x0] = INTEL_CMD_CLR_SR;

	// erase 
	ba[0x0] = INTEL_CMD_ERASE_STEP1;
	ba[0x0] = INTEL_CMD_ERASE_STEP2;
}

STATUS_E SHARP_CheckDone(const uint32 blockaddr)
{
	volatile uint16 *ba = (volatile uint16 *)blockaddr;
	volatile uint16 sr;

	// read SR 
	ba[0x0] = INTEL_CMD_READ_SR;
	sr = *ba;

	if( !(sr&SHARP_SR7_WSMS_BIT) ) {
		return S_IN_PROGRESS;
	}
	else if(sr&SHARP_SR3_VPPS_BIT) {
		return S_VPP_RANGE_ERR;
	}
	else if(sr&SHARP_SR1_DPS_BIT) {
		return S_BLOCK_LOCKED_ERR;
	}
	else if( (sr&SHARP_SR4_PS_BIT) && (sr&SHARP_SR5_ES_BIT) ) {
		return S_CMD_ERR;
	}
	else if(sr&SHARP_SR4_PS_BIT) {
		return S_PGM_FAILED;
	}
	else if(sr&SHARP_SR5_ES_BIT) {
		return S_ERASE_FAILED;
	}

	// reset to read mode 
	ba[0x0] = INTEL_CMD_READ_ARRAY;
	return S_DONE;
}

//------------------------------------------------------------------------------
// Program Related Callback Function                                            
//------------------------------------------------------------------------------
void SHARP_PreProcess_16WORD_BUFPGM(const uint16 dev) {
	// set max buffered program size 
	g_FLASH_MAX_BUFPGM_SIZE_IN_BYTE = 32; // 16 WORDs 
}

//------------------------------------------------------------------------------
// Protection Related Callback Function                                         
//------------------------------------------------------------------------------

⌨️ 快捷键说明

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