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

📄 flash_drv_am29pdl128g.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_AM29PDL128G.c
 *
 * Project:
 * --------
 *    FlashTool Download Agent 
 *
 * Description:
 * ------------
 *    This Module defines the AMD AM29PDL128G flash driver. 
 *
 * Author:
 * -------
 *	  Amos Hsu
 *
 *==============================================================================
 * 				HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *------------------------------------------------------------------------------
 * $Revision:   1.1  $ 
 * $Modtime:   Nov 12 2004 22:11:14  $
 * $Log:   //mtkvs01/vmdata/flash_tool/archives/DA/SRC/flash_drv_AM29PDL128G.c-arc  $
 * 
 *    Rev 1.1   Nov 22 2004 12:25:36   mtk00539
 *  1. [DA][BUG FIX] Add data verification in status polling during erase or program operation.
 *  2. [DA][BUG FIX] Fix two dies flash detection fail in INTEL_CheckDevID(). 
 *  3. [DA][Change Behavior] When RX_BUFFER_FULL occurs, flush data queued in UART ring buffer til data is less than 512KB.
 *  4. [DA][New] Support Buffered-Program method for INTEL family flashes.
 *  5. [DA][New] Support new flashes [SHARP]LRS1828C and [RENESAS]M6MGB64BM34CDG.
 * Resolution for 99: [BROM_DLL v2.4.1008][New] Support INTEL family flash Buffered-Program method.
 * 
 *    Rev 1.0   Aug 03 2004 10:39:54   mtk00539
 * Initial revision.
 * 
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *==============================================================================
 *******************************************************************************/
#include "flash_drv_AM29PDL128G.h"

const NOR_CMD_Callback_S	AMD_AM29PDL128G_CMD_CB_UNLOCK_BYPASS_PGM = {
//	AMD_AM29PDL128G_CheckDevID,
	AMD_CheckDevID,
	AMD_CheckDevIdle,
	AMD_AM29PDL128G_Erase_CMD,
	AMD_Erase_CheckDone_By_Polling,
	DUMMY_Program_PreProcess,
	DUMMY_Program_PostProcess,
	AMD_AM29PDL128G_UnlockBypass_Enter_CMD,
	AMD_AM29PDL128G_UnlockBypass_Exit_CMD,
	AMD_AM29PDL128G_UnlockBypass_Program_CMD,
	AMD_Program_CheckDone_By_Toggle,
	NULL,
	NULL
};

//------------------------------------------------------------------------------
// Check Device ID Callback Function                                            
//------------------------------------------------------------------------------
/*bool AMD_AM29PDL128G_CheckDevID(const uint16 dev, volatile uint16 *die1_addr, volatile uint16 *die2_addr) {

	uint16	manufacture_code;
	uint16	dev_code;
	uint16	ext_dev_code1;
	uint16	ext_dev_code2;
	
	// reset die1 to read mode 
	die1_addr[AMD_AM29PDL128G_SA_ADDR] = AMD_RESET_TO_READ_MODE_DATA1;

	// enter auto-select mode on die1 
	die1_addr[AMD_AM29PDL128G_CMD_ADDR1] = AMD_ENTER_AUTOSELECT_MODE_DATA1;
	die1_addr[AMD_AM29PDL128G_CMD_ADDR2] = AMD_ENTER_AUTOSELECT_MODE_DATA2;
	die1_addr[AMD_AM29PDL128G_CMD_ADDR1] = AMD_ENTER_AUTOSELECT_MODE_DATA3;

	// read manufacture id and device code from die1 
	manufacture_code = die1_addr[AMD_AM29PDL128G_MANUFACTURE_ID_ADDR];	dev_code = die1_addr[AMD_AM29PDL128G_DEVICE_CODE_ADDR];
	ext_dev_code1 = die1_addr[AMD_AM29PDL128G_EXT_DEVICE_CODE1_ADDR];
	ext_dev_code2 = die1_addr[AMD_AM29PDL128G_EXT_DEVICE_CODE2_ADDR];

	// reset die1 to read mode 
	die1_addr[AMD_AM29PDL128G_SA_ADDR] = AMD_RESET_TO_READ_MODE_DATA1;

	// compare id 
	if( g_FlashDevTbl[dev].m_hw_info.m_manufacture_code != manufacture_code )		return FALSE;	if( g_FlashDevTbl[dev].m_hw_info.m_dev_code != dev_code )
		return FALSE;
	if( g_FlashDevTbl[dev].m_hw_info.m_ext_dev_code1 != ext_dev_code1 )
		return FALSE;
	if( g_FlashDevTbl[dev].m_hw_info.m_ext_dev_code2 != ext_dev_code2 )
		return FALSE;
	
	return TRUE;
}*/

//------------------------------------------------------------------------------
// Erase Relative Callback Function                                             
//------------------------------------------------------------------------------
void AMD_AM29PDL128G_Erase_CMD(const uint32 blockaddr)
{
	volatile uint16 *ba = (volatile uint16 *)blockaddr;
	
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_SECTOR_ERASE_DATA1;
	ba[AMD_AM29PDL128G_CMD_ADDR2] = AMD_SECTOR_ERASE_DATA2;
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_SECTOR_ERASE_DATA3;
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_SECTOR_ERASE_DATA4;
	ba[AMD_AM29PDL128G_CMD_ADDR2] = AMD_SECTOR_ERASE_DATA5;
	ba[AMD_AM29PDL128G_SA_ADDR] = AMD_SECTOR_ERASE_DATA6;
}

//------------------------------------------------------------------------------
// Program Relative Callback Function                                           
//------------------------------------------------------------------------------
void AMD_AM29PDL128G_UnlockBypass_Enter_CMD(const uint32 blockaddr)
{
	volatile uint16 *ba = (volatile uint16 *)blockaddr;
	
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_ENTER_UNLOCK_BYPASS_DATA1;
	ba[AMD_AM29PDL128G_CMD_ADDR2] = AMD_ENTER_UNLOCK_BYPASS_DATA2;
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_ENTER_UNLOCK_BYPASS_DATA3;
}

void AMD_AM29PDL128G_UnlockBypass_Exit_CMD(const uint32 blockaddr)
{
	volatile uint16 *ba = (volatile uint16 *)blockaddr;
	
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_EXIT_UNLOCK_BYPASS_DATA1;
	ba[AMD_AM29PDL128G_CMD_ADDR2] = AMD_EXIT_UNLOCK_BYPASS_DATA2;
}

void AMD_AM29PDL128G_UnlockBypass_Program_CMD(const uint32 blockaddr, const uint32 prog_addr, const uint16 data)
{
	volatile uint16 *ba = (volatile uint16 *)blockaddr;
	
	ba[AMD_AM29PDL128G_CMD_ADDR1] = AMD_UNLOCK_BYPASS_PGM_DATA1;
	*(volatile uint16*)prog_addr = data;
}

⌨️ 快捷键说明

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