strata.h

来自「该BSP是基于PXA270+WINCE的BSP」· C头文件 代码 · 共 115 行

H
115
字号
#ifndef _STRATA_H_
#define _STRATA_H_

// Basic read/write macros.
#define WRITE_ULONG(ptr,ul)  *((volatile PULONG)(ptr))  = ul
#define READ_ULONG(ptr)      *((volatile PULONG)(ptr))
#define WRITE_USHORT(ptr,us) *((volatile PUSHORT)(ptr)) = us
#define READ_USHORT(ptr)     *((volatile PUSHORT)(ptr))

// Flash read/write macros.
// We assume the StrataFlash part is in 16-bit mode (as opposed to 8-bit mode).
#define WRITE_FLASH(ptr, val) (g_bPairedFlash ? WRITE_ULONG(ptr, (ULONG)val) : WRITE_USHORT(ptr, (USHORT)val))
#define READ_FLASH(ptr)       (g_bPairedFlash ? READ_ULONG(ptr) : READ_USHORT(ptr))
#define READ_FLASH_INDEXED(ptr, offset)       (g_bPairedFlash ? READ_ULONG((volatile PULONG)ptr + offset) : READ_USHORT((volatile PUSHORT)ptr + offset))
// Write a command to the flash part.
#define WRITE_COMMAND(ptr, cmd) (g_bPairedFlash ? WRITE_ULONG(ptr, (ULONG)((cmd << 16) | cmd)) : WRITE_USHORT(ptr, (USHORT)cmd))
// Check for expected status.
#define CHECK_STATUS(ptr, stat) (g_bPairedFlash ? ((READ_ULONG(ptr) & ((stat << 16) | stat)) == ((stat << 16) | stat)) : ((READ_USHORT(ptr) & stat) == stat))
#define CHECK_STATUS_INDEXED(ptr, offset, stat) (g_bPairedFlash ? ((READ_ULONG((volatile PULONG)ptr + offset) & ((stat << 16) | stat)) == ((stat << 16) | stat)) : ((READ_USHORT((volatile PUSHORT)ptr + offset) & stat) == stat))
// Is specified address block-aligned?
#define IS_BLOCK_ALIGNED(ptr)   (((ULONG)ptr % g_FMDInfo.BlockSize) ? FALSE : TRUE)

//
// Intel 28F320 flash commands and status definitions.
//
// Commands.
#define READ_QUERY_CMD			0x0098
#define READ_IDENT_CMD			0x0090
#define READ_ARRAY_CMD			0x00FF
#define BYTEWORD_PROGRAM_CMD    0x0040
#define CLEAR_STATUS_CMD        0x5050
#define READ_STATUS_CMD			0x7070
#define BLOCK_LOCK_CMD          0x0060
#define BLOCK_PROCEED_CMD		0x00D0
#define BLOCK_SETLOCK_CMD		0x0001
#define BLOCK_ERASE_CMD			0x0020
#define BUFFER_WRITE_CMD		0x00E8


#define COMMAND_RETRY_MAX       20																																									 
// Status.
#define STATUS_READY_MASK		0x0080
//wzw -
///#define STATUS_ERROR			0x0010

// Flash CFI query structure offsets.
#define QS_MFGCODE_OFFSET		0x0
#define QS_DEVCODE_OFFSET		0x1
#define QS_IDSTRING_OFFSET		0x10
#define QS_SYSINTF_OFFSET		0x1B
#define QS_DEVGEOM_OFFSET		0x27

#define REGION_SIZE_MULT		256
//wzw -
///#define SECTOR_SIZE             512     // Number of data bytes in a sector

#define MFGCODE_INTEL           0x0089	// Intel's flash manufacturing code.
#define MFGCODE_MICRON          0x002c // Micron's flash manufacturing code.


#define IDSTRING_Q				0x0051	// ASCII 'Q'.
#define IDSTRING_R				0x0052  // ASCII 'R'.
#define IDSTRING_Y				0x0059	// ASCII 'Y'.

#pragma pack(1)
// Flash-system interface characteristics.
typedef struct _FLASH_SYSINTERFACE_INFO
{
	UCHAR VccMinProgV;				// Vcc logic supply minimum program/erase voltage.
	UCHAR VccMaxProgV;				// Vcc logic supply maximum program/erase voltage.
	UCHAR VppMinProgV;				// Vpp logic supply minimum program/erase voltage.
	UCHAR VppMaxProgV;				// Vpp logic supply maximum program/erase voltage.
	struct
	{
	    UCHAR SnglWordProgTO_us;	// Typical single word program time-out (in us).
	    UCHAR WriteBuffTO_us;		// Typical buffer write time-out (in us).
	    UCHAR BlockEraseTO_ms;		// Typical block erase time-out (in ms).
	    UCHAR ChipEraseTO_ms;		// Typical full-chip erase time-out (in ms).
	} Typical;
	struct
	{
	    UCHAR SnglWordProgTO_us;	// Max single word program time-out (in us).
	    UCHAR WriteBuffTO_us;		// Max buffer write time-out (in us).
	    UCHAR BlockEraseTO_ms;		// Max block erase time-out (in ms).
	    UCHAR ChipEraseTO_ms;		// Max full-chip erase time-out (in ms).
	} Max;
} FLASH_SYSINTERFACE_INFO, *PFLASH_INTERFACE_INFO;

// Flash geometry characteristics.
typedef struct _FLASH_GEOMETRY_INFO
{
	UCHAR DevSize;					// Flash size (n = 2^n bytes).
	USHORT DevInterface;			// Interface type (8/16).
	USHORT WriteBuffSize;			// Write buffer size (n = 2^n bytes).
    UCHAR NumEraseBlocks;			// Number of flash blocks in an erase region.
	USHORT NumIdentEraseBlocks;		// Number of identical-sized erase blocks (number of blocks).
	USHORT EraseRegionSize;         // Size of an erase region.
} FLASH_GEOMETRY_INFO, *PFLASH_GEOMETRY_INFO;

// All flash information.
typedef struct _FMD_FLASH_INFO
{
	ULONG BaseAddress;				// Flash base address.
	ULONG FlashLength;				// Length of flash to be managed.
	ULONG BlockSize;				// Block size (computed from CFI data).
	ULONG TotalFlashBlocks;			// Number of flash blocks.
	USHORT UnusedBytesPerBlock;		// Remaining bytes in each block.
	USHORT SectorsPerBlock;			// Number of sectors per block.
    FLASH_SYSINTERFACE_INFO SysInt;	// Flash-system interface information.
    FLASH_GEOMETRY_INFO Geometry;	// Flash geometry information.
} FMD_FLASH_INFO, *PFMD_FLASH_INFO;
#pragma pack()

#endif	//_STRATA_H_.

⌨️ 快捷键说明

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