📄 cfi.h
字号:
/* * $Id: cfi.h,v 1.1.1.1 2005/03/18 15:03:20 klingler Exp $ * * Common Flash Memory Interface (CFI) Declarations * Copyright (C) 2002 ETC s.r.o. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the ETC s.r.o. nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Written by Marcel Telka <marcel@telka.sk>, 2002. * * Documentation: * [1] JEDEC Solid State Technology Association, "Common Flash Interface (CFI)", * September 1999, Order Number: JESD68 * [2] JEDEC Solid State Technology Association, "Common Flash Interface (CFI) ID Codes", * September 2001, Order Number: JEP137-A * */#ifndef FLASH_CFI_H#define FLASH_CFI_H#include <common.h>#if LANGUAGE == C#include <stdint.h>#endif/* CFI commands - see Table 1 in [1] */#define CFI_CMD_READ_ARRAY1 0xFF#define CFI_CMD_READ_ARRAY2 0xF0#define CFI_CMD_QUERY 0x98#define CFI_CMD_QUERY_OFFSET 0x55/* Query identification string - see 4.3.2 in [1] */#define CFI_QUERY_ID_OFFSET 0x10#define PRI_VENDOR_ID_OFFSET 0x13#define PRI_VENDOR_TABLE_ADR_OFFSET 0x15#define ALT_VENDOR_ID_OFFSET 0x17#define ALT_VENDOR_TABLE_ADR_OFFSET 0x19#if LANGUAGE == Ctypedef struct cfi_query_identification_string { uint16_t pri_id_code; void *pri_vendor_tbl; uint16_t alt_id_code; void *alt_vendor_tbl; uint16_t device_id_code;} cfi_query_identification_string_t;#endif /* LANGUAGE == C *//* Algorithm command set & control interface ID codes - see Table 1 in [2] */#define CFI_VENDOR_NULL 0x0000#define CFI_VENDOR_INTEL_ECS 0x0001#define CFI_VENDOR_AMD_SCS 0x0002#define CFI_VENDOR_INTEL_SCS 0x0003#define CFI_VENDOR_AMD_ECS 0x0004#define CFI_VENDOR_MITSUBISHI_SCS 0x0100#define CFI_VENDOR_MITSUBISHI_ECS 0x0101#define CFI_VENDOR_SGS_SCS 0x0020#define CFI_VENDOR_SST_SCS 0x00bf#define CFI_VENDOR_SST_PWCS 0x0102/* Query system interface information - see 4.3.3 in [1] */#define VCC_MIN_WEV_OFFSET 0x1B /* Vcc Logic Supply Minimum Write/Erase voltage */#define VCC_MAX_WEV_OFFSET 0x1C /* Vcc Logic Supply Maximum Write/Erase voltage */#define VPP_MIN_WEV_OFFSET 0x1D /* Vpp [Programming] Supply Minimum Write/Erase voltage */#define VPP_MAX_WEV_OFFSET 0x1E /* Vpp [Programming] Supply Maximum Write/Erase voltage */#define TYP_SINGLE_WRITE_TIMEOUT_OFFSET 0x1F /* Typical timeout per single byte/word write */#define TYP_BUFFER_WRITE_TIMEOUT_OFFSET 0x20 /* Typical timeout for minimum-size buffer write */#define TYP_BLOCK_ERASE_TIMEOUT_OFFSET 0x21 /* Typical timeout per individual block erase */#define TYP_CHIP_ERASE_TIMEOUT_OFFSET 0x22 /* Typical timeout for full chip erase */#define MAX_SINGLE_WRITE_TIMEOUT_OFFSET 0x23 /* Maximum timeout for byte/word write */#define MAX_BUFFER_WRITE_TIMEOUT_OFFSET 0x24 /* Maximum timeout for buffer write */#define MAX_BLOCK_ERASE_TIMEOUT_OFFSET 0x25 /* Maximum timeout per individual block erase */#define MAX_CHIP_ERASE_TIMEOUT_OFFSET 0x26 /* Maximum timeout for chip erase */#if LANGUAGE == Ctypedef struct cfi_query_system_interface_information { uint16_t vcc_min_wev; /* in mV */ uint16_t vcc_max_wev; /* in mV */ uint16_t vpp_min_wev; /* in mV, 0 - no Vpp pin is present */ uint16_t vpp_max_wev; /* in mV, 0 - no Vpp pin is present */ uint32_t typ_single_write_timeout; /* in us, 0 - not supported */ uint32_t typ_buffer_write_timeout; /* in us, 0 - not supported */ uint32_t typ_block_erase_timeout; /* in ms, 0 - not supported */ uint32_t typ_chip_erase_timeout; /* in ms, 0 - not supported */ uint32_t max_single_write_timeout; /* in us, 0 - not supported */ uint32_t max_buffer_write_timeout; /* in us, 0 - not supported */ uint32_t max_block_erase_timeout; /* in ms, 0 - not supported */ uint32_t max_chip_erase_timeout; /* in ms, 0 - not supported */} cfi_query_system_interface_information_t;#endif /* LANGUAGE == C *//* Device geometry definition - see 4.3.4 in [1] */#define DEVICE_SIZE_OFFSET 0x27 /* Device Size */#define FLASH_DEVICE_INTERFACE_OFFSET 0x28 /* Flash Device Interface description */#define MAX_BYTES_WRITE_OFFSET 0x2A /* Maximum number of bytes in multi-byte write */#define NUMBER_OF_ERASE_REGIONS_OFFSET 0x2C /* Number of Erase Block Regions */#define ERASE_BLOCK_REGION_OFFSET 0x2D /* Erase Block Region Information */#if LANGUAGE == Ctypedef struct cfi_erase_block_region cfi_erase_block_region_t;typedef struct cfi_device_geometry { uint32_t device_size; /* in B */ uint16_t device_interface; /* see Table 2 in [2] */ uint32_t max_bytes_write; /* in B */ uint8_t number_of_erase_regions; cfi_erase_block_region_t *erase_block_regions;} cfi_device_geometry_t;struct cfi_erase_block_region { uint32_t erase_block_size; /* in B */ uint32_t number_of_erase_blocks;};#endif /* LANGUAGE == C *//* Device interface code assignments (for cfi_device_geometry.device_interface) - see Table 2 in [2] */#define CFI_INTERFACE_X8 0#define CFI_INTERFACE_X16 1#define CFI_INTERFACE_X8_X16 2#define CFI_INTERFACE_X32 3#define CFI_INTERFACE_X16_X32 4/* CFI Query structure - see 4.3.1 in [1] */#if LANGUAGE == Ctypedef struct cfi_query_structure { cfi_query_identification_string_t identification_string; cfi_query_system_interface_information_t system_interface_info; cfi_device_geometry_t device_geometry;} cfi_query_structure_t;#endif /* LANGUAGE == C */#endif /* FLASH_CFI_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -