nand.h
来自「ebd9307开发板wince bsp源码,包括cs8900,lcd,nand,」· C头文件 代码 · 共 143 行
H
143 行
#ifndef _FMD_H_
#define _FMD_H_
#include <windows.h>
#include <diskio.h>
#include <bldver.h>
#include <pcireg.h>
// FMD IOCTL definitions.
//
#define IOCTL_FMD_SET_XIPMODE IOCTL_DISK_USER(0)
#define IOCTL_FMD_LOCK_BLOCKS IOCTL_DISK_USER(1)
#define IOCTL_FMD_UNLOCK_BLOCKS IOCTL_DISK_USER(2)
#define IOCTL_FMD_GET_INTERFACE IOCTL_DISK_USER(3)
#define IOCTL_FMD_GET_XIPMODE IOCTL_DISK_USER(4)
#define NUM_BLOCKS 0x800
#define SECTOR_SIZE 512
#define SPARE_SIZE 16
#define SECTORS_PER_BLOCK 32
#define BYTES_PER_BLOCK (SECTOR_SIZE * SECTORS_PER_BLOCK)
#define BLOCK_STATUS_UNKNOWN 0x01
#define BLOCK_STATUS_BAD 0x02
#define BLOCK_STATUS_READONLY 0x04
#define BLOCK_STATUS_RESERVED 0x08
#define BLOCK_STATUS_XIP 0x10
// FMD OEM reserved area bitfield.
#define OEM_BLOCK_RESERVED 0x01
#define OEM_BLOCK_READONLY 0x02
#define CMD_READ 0x00
#define CMD_READ1 0x01
#define CMD_READ2 0x50
#define CMD_READID 0x90
#define CMD_WRITE 0x80
#define CMD_WRITE2 0x10
#define CMD_ERASE 0x60
#define CMD_ERASE2 0xD0
#define CMD_STATUS 0x70
#define CMD_RESET 0xFF
#define NF_CE_H() (*GPIO_PFDR |= 0x80)
#define NF_CE_L() (*GPIO_PFDR &= 0x7F)
#define NF_ALE_H() (*GPIO_PFDR |= 0x01)
#define NF_ALE_L() (*GPIO_PFDR &= 0xFE)
#define NF_CLE_H() (*GPIO_PFDR |= 0x20)
#define NF_CLE_L() (*GPIO_PFDR &= 0xDF)
#define NF_RB (*GPIO_PBDR & 0x80)
#define ReadByte() ((*NandFlashVIO))
#define WriteByte(b) (*NandFlashVIO = b)
#define NandWaitBusy() {while(!NF_RB);}
//#define NandWaitBusy() {while(!(*NandFlashVIO&0x40));}
#define VALIDADDR 0x05
#define BADBLOCKMARK 0x00
#define STATUS_ERROR 0x01
#define IMAGE_BLOCK 0x00
typedef enum _FLASH_TYPE {NAND,NOR}FLASH_TYPE;
typedef DWORD SECTOR_ADDR;
typedef PDWORD PSECTOR_ADDR;
typedef DWORD BLOCK_ID;
typedef PDWORD PBLOCK_ID;
typedef struct _FlashInfo
{
FLASH_TYPE flashType;
DWORD dwNumBlocks;
DWORD dwBytesPerBlock;
WORD wSectorsPerBlock;
WORD wDataBytesPerSector;
}FlashInfo,*PFlashInfo;
typedef struct _SectorInfo
{
DWORD dwReserved1;
BYTE bOEMReserved;
BYTE bBadBlock;
WORD wReserved2;
}SectorInfo,*PSectorInfo;
typedef struct _BlockLockInfo
{
BLOCK_ID StartBlock;
ULONG NumBlocks;
}BlockLockInfo,*PBlockLockInfo;
typedef PVOID (*PFN_INIT)(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut);
typedef BOOL (*PFN_DEINIT)(PVOID);
typedef BOOL (*PFN_GETINFO)(PFlashInfo pFlashInfo);
typedef DWORD (*PFN_GETBLOCKSTATUS)(BLOCK_ID blockID);
typedef BOOL (*PFN_SETBLOCKSTATUS)(BLOCK_ID blockID, DWORD dwStatus);
typedef BOOL (*PFN_READSECTOR)(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors);
typedef BOOL (*PFN_WRITESECTOR)(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors);
typedef BOOL (*PFN_ERASEBLOCK)(BLOCK_ID blockID);
typedef VOID (*PFN_POWERUP)(VOID);
typedef VOID (*PFN_POWERDOWN)(VOID);
typedef VOID (*PFN_GETPHYSSECTORADDR)(DWORD dwSector, PSECTOR_ADDR pStartSectorAddr);
typedef struct _FMDInterface
{
DWORD cbSize;
PFN_INIT pInit;
PFN_DEINIT pDeInit;
PFN_GETINFO pGetInfo;
PFN_GETBLOCKSTATUS pGetBlockStatus;
PFN_SETBLOCKSTATUS pSetBlockStatus;
PFN_READSECTOR pReadSector;
PFN_WRITESECTOR pWriteSector;
PFN_ERASEBLOCK pEraseBlock;
PFN_POWERUP pPowerUp;
PFN_POWERDOWN pPowerDown;
PFN_GETPHYSSECTORADDR pGetPhysSectorAddr;
} FMDInterface, *PFMDInterface;
PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut);
BOOL FMD_Deinit(PVOID);
BOOL FMD_GetInfo(PFlashInfo pFlashInfo);
DWORD FMD_GetBlockStatus(BLOCK_ID blockID);
BOOL FMD_SetBlockStatus(BLOCK_ID blockID, DWORD dwStatus);
BOOL FMD_ReadSector (SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors);
BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors);
BOOL FMD_EraseBlock(BLOCK_ID blockID);
VOID FMD_PowerUp(VOID);
VOID FMD_PowerDown(VOID);
BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize,
PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned);
void GetPhysSectorAddr(DWORD dwSector, PSECTOR_ADDR pStartSectorAddr);
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?