📄 am29xxxx.h
字号:
/*
* File: common/firmware/AM29XXXX.h
* Purpose: AMD29XXXX Flash memory device driver
*
* Supports: AM29F010
* AM29F040
* AM29F080
* AM29F016
* AM29F800
* AM29LV004
* AM29PL160
* AM29LV160
* AM29LV160D
*/
#ifndef _COMMON_FIRMWARE_AM29XXXX_H
#define _COMMON_FIRMWARE_AM29XXXX_H
typedef struct FLASH
{
void **blockptr;
int sect;
uint32 blocksz;
uint32 numblocks;
}FLASH;
/********************************************************************/
/*
* AM29F010
*/
#if (defined(AM29XXXX_AM29F010))
#define AM29XXXX_SECTOR_SIZE (16 * 1024)
#define AM29XXXX_SECTORS (8)
#define AM29XXXX_device_code (0x20)
/********************************************************************/
/*
* AM29F040
*/
#elif (defined(AM29XXXX_AM29F040))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (8)
#define AM29XXXX_device_code (0xA4)
/********************************************************************/
/*
* AM29F080
*/
#elif (defined(AM29XXXX_AM29F080))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (16)
#define AM29XXXX_device_code (0xD5)
/********************************************************************/
/*
* AM29F016
*/
#elif (defined(AM29XXXX_AM29F016))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (32)
#define AM29XXXX_device_code (0xAD)
/********************************************************************/
/*
* AM29F800B8 - Bottom boot block in 8-bit mode
*/
#elif (defined(AM29XXXX_AM29F800B8))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0x58)
#define AM29XXXX_VARIABLE_SECTOR
/#define AM29XXXX_sector_size(S,SZ) \
if (S == 0) SZ = 0x00004000; \
else if (S == 1) SZ = 0x00002000; \
else if (S == 2) SZ = 0x00002000; \
else if (S == 3) SZ = 0x00008000; \
else SZ = AM29XXXX_SECTOR_SIZE
/*
* AM29F800B16 - Bottom boot block in 16-bit mode
*/
#elif (defined(AM29XXXX_AM29F800B16))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0x58)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S == 0) I = 0x00000000; \
else if (S == 1) I = 0x00002000; \
else if (S == 2) I = 0x00003000; \
else if (S == 3) I = 0x00004000; \
else I = ((S - 3) * (AM29XXXX_SECTOR_SIZE >> 1))
#define AM29XXXX_sector_size(S,SZ) \
if (S == 0) SZ = 0x00002000; \
else if (S == 1) SZ = 0x00001000; \
else if (S == 2) SZ = 0x00001000; \
else if (S == 3) SZ = 0x00004000; \
else SZ = (AM29XXXX_SECTOR_SIZE>>1)
/*
* AM29F800T8 - Top boot block in 8-bit mode
*/
#elif (defined(AM29XXXX_AM29F800T8))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0xD6)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S <= 15) I = (S * AM29XXXX_SECTOR_SIZE); \
else if (S == 16) I = 0x000F8000; \
else if (S == 17) I = 0x000FA000; \
else if (S == 18) I = 0x000FC000
#define AM29XXXX_sector_size(S,SZ) \
if (S == 18) SZ = 0x00004000; \
else if (S == 17) SZ = 0x00002000; \
else if (S == 16) SZ = 0x00002000; \
else if (S == 15) SZ = 0x00008000; \
else SZ = AM29XXXX_SECTOR_SIZE
/*
* AM29F800T16 - Top boot block in 16-bit mode
*/
#elif (defined(AM29XXXX_AM29F800T16))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0xD6)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S <= 15) I = (S * (AM29XXXX_SECTOR_SIZE >> 1)); \
else if (S == 16) I = 0x0007C000; \
else if (S == 17) I = 0x0007D000; \
else if (S == 18) I = 0x0007E000
#define AM29XXXX_sector_size(S,SZ) \
if (S == 18) SZ = 0x00002000; \
else if (S == 17) SZ = 0x00001000; \
else if (S == 16) SZ = 0x00001000; \
else if (S == 15) SZ = 0x00004000; \
else SZ = (AM29XXXX_SECTOR_SIZE>>1)
/********************************************************************/
/*
* AM29LV800B8 - Bottom boot block in 8-bit mode
*/
#elif (defined(AM29XXXX_AM29LV800B8))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0x5B)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S == 0) I = 0x00000000; \
else if (S == 1) I = 0x00004000; \
else if (S == 2) I = 0x00006000; \
else if (S == 3) I = 0x00008000; \
else I = ((S - 3) * AM29XXXX_SECTOR_SIZE)
#define AM29XXXX_sector_size(S,SZ) \
if (S == 0) SZ = 0x00004000; \
else if (S == 1) SZ = 0x00002000; \
else if (S == 2) SZ = 0x00002000; \
else if (S == 3) SZ = 0x00008000; \
else SZ = AM29XXXX_SECTOR_SIZE
/*
* AM29LV800B16 - Bottom boot block in 16-bit mode
*/
#elif (defined(AM29XXXX_AM29LV800B16))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0x5B)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S == 0) I = 0x00000000; \
else if (S == 1) I = 0x00002000; \
else if (S == 2) I = 0x00003000; \
else if (S == 3) I = 0x00004000; \
else I = ((S - 3) * (AM29XXXX_SECTOR_SIZE >> 1))
#define AM29XXXX_sector_size(S,SZ) \
if (S == 0) SZ = 0x00002000; \
else if (S == 1) SZ = 0x00001000; \
else if (S == 2) SZ = 0x00001000; \
else if (S == 3) SZ = 0x00004000; \
else SZ = (AM29XXXX_SECTOR_SIZE>>1)
/*
* AM29LV800T8 - Top boot block in 8-bit mode
*/
#elif (defined(AM29XXXX_AM29LV800T8))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0xDA)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S <= 15) I = (S * AM29XXXX_SECTOR_SIZE); \
else if (S == 16) I = 0x000F8000; \
else if (S == 17) I = 0x000FA000; \
else if (S == 18) I = 0x000FC000
#define AM29XXXX_sector_size(S,SZ) \
if (S == 18) SZ = 0x00004000; \
else if (S == 17) SZ = 0x00002000; \
else if (S == 16) SZ = 0x00002000; \
else if (S == 15) SZ = 0x00008000; \
else SZ = AM29XXXX_SECTOR_SIZE
/*
* AM29LV800T16 - Top boot block in 16-bit mode
*/
#elif (defined(AM29XXXX_AM29LV800T16))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (19)
#define AM29XXXX_sectors (16)
#define AM29XXXX_device_code (0xDA)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S <= 15) I = (S * (AM29XXXX_SECTOR_SIZE >> 1)); \
else if (S == 16) I = 0x0007C000; \
else if (S == 17) I = 0x0007D000; \
else if (S == 18) I = 0x0007E000
#define AM29XXXX_sector_size(S,SZ) \
if (S == 18) SZ = 0x00002000; \
else if (S == 17) SZ = 0x00001000; \
else if (S == 16) SZ = 0x00001000; \
else if (S == 15) SZ = 0x00004000; \
else SZ = (AM29XXXX_SECTOR_SIZE>>1)
/********************************************************************/
/*
* AM29LV004BB
*/
#elif (defined(AM29XXXX_AM29LV004BB))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (11)
#define AM29XXXX_sectors (8)
#define AM29XXXX_device_code (0xB6)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S == 0) I = 0x00000000; \
else if (S == 1) I = (0x00004000); \
else if (S == 2) I = (0x00006000); \
else if (S == 3) I = (0x00008000); \
else I = ((S - 3) * AM29XXXX_SECTOR_SIZE)
#define AM29XXXX_sector_size(S,SZ) \
if (S == 0) SZ = (0x00004000); \
else if (S == 1) SZ = (0x00002000); \
else if (S == 2) SZ = (0x00002000); \
else if (S == 3) SZ = (0x00008000); \
else SZ = AM29XXXX_SECTOR_SIZE
/*
* AM29LV004BT
*/
#elif (defined(AM29XXXX_AM29LV004BT))
#define AM29XXXX_SECTOR_SIZE (64 * 1024)
#define AM29XXXX_SECTORS (11)
#define AM29XXXX_sectors (8)
#define AM29XXXX_device_code (0xB5)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S <= 7) I = (S * AM29XXXX_SECTOR_SIZE); \
else if (S == 8) I = (0x00078000); \
else if (S == 9) I = (0x0007A000); \
else if (S == 10) I = (0x0007C000)
#define AM29XXXX_sector_size(S,SZ) \
if (S == 10) SZ = (0x00004000); \
else if (S == 9) SZ = (0x00002000); \
else if (S == 8) SZ = (0x00002000); \
else if (S == 7) SZ = (0x00008000); \
else SZ = AM29XXXX_SECTOR_SIZE
/********************************************************************/
/*
* AM29PL160CB8 - Bottom boot block in 8-bit mode
*/
#elif (defined(AM29XXXX_AM29PL160CB8))
#define AM29XXXX_SECTOR_SIZE (256 * 1024)
#define AM29XXXX_SECTORS (11)
#define AM29XXXX_sectors (8)
#define AM29XXXX_device_code (0x45)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
if (S == 0) I = 0x00000000; \
else if (S == 1) I = 0x00004000; \
else if (S == 2) I = 0x00006000; \
else if (S == 3) I = 0x00008000; \
else I = ((S - 3) * AM29XXXX_SECTOR_SIZE)
#define AM29XXXX_sector_size(S,SZ) \
if (S == 0) SZ = 0x00004000; \
else if (S == 1) SZ = 0x00002000; \
else if (S == 2) SZ = 0x00002000; \
else if (S == 3) SZ = 0x00040000; \
else SZ = AM29XXXX_SECTOR_SIZE
/*
* AM29PL160CB16 - Bottom boot block in 16-bit mode
*/
#elif (defined(AM29XXXX_AM29PL160CB16))
#define AM29XXXX_SECTOR_SIZE (256 * 1024)
#define AM29XXXX_SECTORS (11)
#define AM29XXXX_sectors (8)
#define AM29XXXX_device_code (0x45)
#define AM29XXXX_VARIABLE_SECTOR
#define AM29XXXX_sector_index(S,I) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -