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

📄 strata.h

📁 CIRRUS 公司EP93XX系列CPU的WINCE下的BSP
💻 H
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name: strata.h

Date Created: 6/21/2002 

Abstract: Flash media driver (FMD) interface for Intel StrataFlash memory chips.

Functions: 

Notes: As noted, this media driver works on behalf of the FAL to directly
       access the underlying FLASH hardware.  Consquently, this module 
       needs to be linked with FAL.LIB to produce the device driver 
       named FLASHDRV.DLL.  It may also be used directly in a boot loader image.

--*/
#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
#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
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -