📄 nand_dev_tbl.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 + -