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

📄 nand_dev_tbl.h

📁 MTK手机平台下载工具FLASHTOOL驱动源码
💻 H
字号:
/*******************************************************************************
*  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:
 * ---------
 *	  nand_dev_tbl.h 
 *
 * Project:
 * --------
 *    FlashTool Download Agent 
 *
 * Description:
 * ------------
 *    NAND flash device table 
 *
 * Author:
 * -------
 *	  Amos Hsu 
 *
 *==============================================================================
 * 				HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * $Revision:   1.1  $
 * $Modtime:   Dec 06 2005 12:20:06  $
 * $Log:   //mtkvs01/vmdata/new_flash_tool/archives/DA/INC/nand_dev_tbl.h-arc  $
 * 
 *    Rev 1.1   Dec 29 2005 10:55:36   mtk00539
 *  1. [DA] Add pre-process callback function to unlock all the blocks to meet ST NAND flash requirement. 
 * Resolution for 156: [FlashTool v2.7.1013][BUG FIX] Fix BootROM start command failure while manually selecting NMT6226 or MT6227 baseband chip.
 * 
 *    Rev 1.0   Oct 19 2005 14:40:20   mtk00539
 * Initial revision.
 * Resolution for 140: [BROM_DLL v2.7.1008][New] Support NFB download and many new features.
 * 
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *==============================================================================
 *******************************************************************************/
#ifndef _NAND_DEV_TBL_H_
#define _NAND_DEV_TBL_H_

#include "SW_TYPES.H"
#include "DOWNLOAD.H"

#ifdef __cplusplus
extern "C" {
#endif

#define NAND_MAX_SPARE_SIZE_BYTE	64

// DO NOT modify the IO BITS value, because it must be the same as BootROM definition 
#define NAND_IO_8BITS				0
#define NAND_IO_16BITS				1

typedef struct {
	uint16		m_maker_code;
	uint16		m_device_code;
} NAND_ID_S;

typedef struct {
	uint16		m_enable;
	uint16		m_cmd;
} NAND_Command_S;

typedef struct {
	NAND_Command_S		m_read_id;
	NAND_Command_S		m_status;
	NAND_Command_S		m_reset;
	NAND_Command_S		m_read;
	NAND_Command_S		m_read_spare;
	NAND_Command_S		m_read_cnf;
	NAND_Command_S		m_program_1st_half_page;
	NAND_Command_S		m_program;
	NAND_Command_S		m_program_cnf;
	NAND_Command_S		m_erase;
	NAND_Command_S		m_erase_cnf;
	NAND_Command_S		m_copyback_read;
	NAND_Command_S		m_copyback_read_cnf;
	NAND_Command_S		m_copyback_program;
	NAND_Command_S		m_copyback_program_cnf;
} NAND_CommandSet_S;

struct _NAND_DeviceInfo_S;
typedef struct _NAND_DeviceInfo_S  NAND_DeviceInfo_S;
typedef STATUS_E  (*FP_CB_NAND_READ_ID_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout, uint16  *p_maker_code, uint16  *p_device_code, uint16  *p_ext_code1, uint16  *p_ext_code2);
typedef STATUS_E  (*FP_CB_NAND_RESET_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout);
typedef STATUS_E  (*FP_CB_NAND_PRE_PROCESS_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout);
typedef STATUS_E  (*FP_CB_NAND_READ_STATUS_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout);
typedef STATUS_E  (*FP_CB_NAND_BLOCK_ERASE_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  row_addr);
typedef STATUS_E  (*FP_CB_NAND_BAD_BLOCK_SYMBOL_CHECK_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  *p_spare32);
typedef STATUS_E  (*FP_CB_NAND_BAD_BLOCK_SYMBOL_SET_T)(const NAND_DeviceInfo_S  *nand_info, uint32  *p_spare32);
typedef STATUS_E  (*FP_CB_NAND_PAGE_READ_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout, const uint32 row_addr, uint32 *p_data32, uint32  ecc_parity_from_reg[4]);
typedef STATUS_E  (*FP_CB_NAND_PAGE_PROGRAM_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout, const uint32 row_addr, const uint32 *p_data32, uint32  ecc_parity_from_reg[4]);
typedef STATUS_E  (*FP_CB_NAND_SPARE_READ_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout, const uint32 row_addr, uint32 *p_spare32);
typedef STATUS_E  (*FP_CB_NAND_SPARE_PROGRAM_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout, const uint32 row_addr, const uint32 *p_spare32);
typedef STATUS_E  (*FP_CB_NAND_COPYBACK_T)(const NAND_DeviceInfo_S  *nand_info, const uint32  c_timeout, const uint32 src_row_addr, const uint32 dest_row_addr);

typedef struct {
	FP_CB_NAND_READ_ID_T					m_cb_read_id;
	FP_CB_NAND_RESET_T						m_cb_reset;
	FP_CB_NAND_PRE_PROCESS_T				m_cb_pre_process;
	FP_CB_NAND_READ_STATUS_T				m_cb_read_status;
	FP_CB_NAND_BLOCK_ERASE_T				m_cb_block_erase;
	FP_CB_NAND_BAD_BLOCK_SYMBOL_CHECK_T		m_cb_bad_block_symbol_check;
	FP_CB_NAND_BAD_BLOCK_SYMBOL_SET_T		m_cb_bad_block_symbol_set;
	FP_CB_NAND_PAGE_READ_T					m_cb_page_read;
	FP_CB_NAND_PAGE_PROGRAM_T				m_cb_page_program;
	FP_CB_NAND_SPARE_READ_T					m_cb_spare_read;
	FP_CB_NAND_SPARE_PROGRAM_T				m_cb_spare_program;
	FP_CB_NAND_COPYBACK_T					m_cb_copyback;
} NAND_CMD_Callback_S;

typedef struct {

	// nand flash H/W manufacture id and device code 
	NAND_ID_S	m_id;

	// total size in MB 
	uint32		m_total_size_in_mb;
	// pages per block 
	uint32		m_pages_per_block;
	// page size in Byte 
	uint32		m_page_size;
	// I/O interface: 8bits or 16bits 
	uint32		m_io_interface;
	// address cycle 
	uint32		m_addr_cycle;

	// copyback src and dest addr mask 
	uint32		m_copyback_plane_rowaddr_mask;

} NAND_HW_Info_S;

typedef struct {

	// nand flash id 
	NAND_DeviceID_E			m_id;
	// NAND flash device H/W info 
	NAND_HW_Info_S				m_hw_info;
	// command set 
	const NAND_CommandSet_S		*m_cmd_set;
	// callback function set 
	const NAND_CMD_Callback_S	*m_cb_func_set;

} NAND_Device_S;

struct _NAND_DeviceInfo_S {

	// total page count 
	uint32				m_total_pages;
	// total block count 
	uint32				m_total_blocks;
	// block size in Byte 
	uint32				m_block_size;
	// spare size in Byte 
	uint32				m_spare_size;
	// page addr shift bits 
	uint32				m_page_addr_shift_bits;
	// block addr shift bits 
	uint32				m_block_addr_shift_bits;

	// NAND flash H/W info 
	const NAND_Device_S		*m_dev;
};

typedef struct {
	uint8	m_data[512];
	uint8	m_spare[16];
} NAND_Page512_8_S;

typedef struct {
	uint16	m_data[256];
	uint16	m_spare[8];
} NAND_Page512_16_S;

typedef struct {
	uint32	m_data[128];
	uint32	m_spare[4];
} NAND_Page512_32_S;

typedef struct {
	uint8	m_data[2048];
	uint8	m_spare[64];
} NAND_Page2048_8_S;

typedef struct {
	uint16	m_data[1024];
	uint16	m_spare[32];
} NAND_Page2048_16_S;

typedef struct {
	uint32	m_data[512];
	uint32	m_spare[16];
} NAND_Page2048_32_S;

typedef union {
	uint8				m_raw8[512+16];
	uint16				m_raw16[256+8];
	uint32				m_raw32[128+4];

	NAND_Page512_8_S	m_pagespare8;
	NAND_Page512_16_S	m_pagespare16;
	NAND_Page512_32_S	m_pagespare32;
} NAND_Page512_U;

typedef union {
	uint8				m_raw8[2048+64];
	uint16				m_raw16[1024+32];
	uint32				m_raw32[512+16];

	NAND_Page2048_8_S	m_pagespare8;
	NAND_Page2048_16_S	m_pagespare16;
	NAND_Page2048_32_S	m_pagespare32;
} NAND_Page2048_U;

typedef union {
	NAND_Page512_U		m_512;
	NAND_Page2048_U		m_2048;
} NAND_PageBuffer_U;

typedef struct {
	NAND_PageBuffer_U	m_page[64];
	bool				m_page_dirty[64];
} NAND_BlockBuffer_S;

typedef union {
	uint8	d8[4];
	uint16	d16[2];
	uint32	d32;
} UnionData_U;

extern const NAND_Device_S 	g_NandFlashDevTbl[];
extern NAND_DeviceInfo_S	g_NandFlashInfo;
extern NAND_DeviceInfo_S	*g_pNandInfo;

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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