📄 flash.h
字号:
/*
*******************************************************
// Copyright (c)2004 Ark Pioneer Microelectronics Ltd.,
// All Rights Reserved
//
// Filename: flash.h
// Version: 1.0
// Created: 2004.02.21 By: Philip
*******************************************************
*/
#ifndef _FLASH_H_
#define _FLASH_H_
#include "config.h"
#include "ecc.h"
#include "flexio.h"
// 2004.08.30, philip add
// We test flash without ECC firstly, because there are some bugs in ECC module.
//#define RW_WITH_ECC
#define PAGE_SIZE_BYTE 512
#define PAGE_SIZE_WORD 128
typedef BOOLEAN USBS_STATUS;
typedef struct _FLASH_INFORMATION {
WORD wVid;
WORD wPid;
WORD wDriveCapacity;
} FLASH_INFORMATION, *PFLASH_INFORMATION;
typedef struct _FLASH_RW_CONTEXT {
WORD extendedCmd;
WORD wFlashIndex;
WORD wBlockIndex;
WORD wPageIndex;
PVOID pUdiskCtl;
} FLASH_RW_CONTEXT, *PFLASH_RW_CONTEXT;
// It contains our udisk characteristics.
typedef struct _FLASH_CONTROL_CONTEXT {
PVOID pCurrentCBW;
BOOLEAN bFirstInit; // Flag indicates whether the flash is initialized or not.
BOOLEAN bAddCycFlag[2];
BOOLEAN bFlashStatus;
BOOLEAN bWriteProtect;
BOOLEAN bMediaChange;
BOOLEAN bChangeDisk;
BOOLEAN bHugeData;
BOOLEAN bContinueWrite;
BOOLEAN bChangeBlockErased;
BOOLEAN bUpdataLocate;
BOOLEAN bFirstPartitionAttribute;
BOOLEAN bPartitionProtect;
WORD wVid;
WORD wPid;
WORD wFlashCount;
WORD wCurrentFlash;
WORD wUserBlockNumber;
WORD wSecondPartion;
WORD wLocateFlashIndex;
WORD wLocatePageIndex;
WORD wLastFlash;
WORD wLastBlock;
WORD wLastPage;
BOOLEAN bLastHugeData;
WORD wCurrentDriveCapacity;
WORD wDummyDriveCapacity; // Match to MBR.
WORD InfoBlock[2];
WORD MapBlock[2];
WORD ChangeBlock[2];
WORD DeviceCode[2];
WORD DriveCapacity[2];
} FLASH_CONTROL_CONTEXT, *PFLASH_CONTROL_CONTEXT;
typedef struct _CBW_CONTEXT {
WORD CbwTag;
WORD DataTransferLen;
USBS_STATUS Status;
PVOID pUdiskCtl;
} CBW_CONTEXT, *PCBW_CONTEXT;
// The connection between flash to flexio is different now.
#define selectNoneFlash() ((*(PWORD)IDLE_CTL_OUT) |= 0x28)
// 2004.08.30, philip commented
#if 0
// bit1: flash0 ce; bit5: flash1 ce
#define selectNoneFlash() ((*(PWORD)IDLE_CTL_OUT) |= 0x22)
#define selectFlash_0() ((*(PWORD)IDLE_CTL_OUT) |= 0x20)
#define selectFlash_1() ((*(PWORD)IDLE_CTL_OUT) |= 0x02)
#endif
// declaration
extern void TD_Init(PFLASH_CONTROL_CONTEXT pCtl);
extern __inline__ BOOLEAN
swap_endian_and_store(
PVOID dest,
PVOID src,
WORD len
);
extern BOOLEAN MyMemoryZero(PVOID mem_start, WORD len);
extern BOOLEAN MyMemoryCopy(PVOID destination, PVOID source, WORD len);
extern void dma(WORD dest, WORD src, WORD len);
extern __inline__ void waitForInBuffer(void);
extern __inline__ BOOLEAN SelectFlash(WORD FlashIndex);
extern BYTE SingleRead(void);
extern void SingleWrite(BYTE bData);
extern void WriteCommand(WORD wInData);
extern void WriteAddr(WORD wInData);
extern DWORD ecc_transfer(DWORD dwData);
extern void correct(WORD errAddr, WORD errMask);
extern void ReadID(PFLASH_CONTROL_CONTEXT pCtl);
//2004.02.27, philip add
#define ECC_AREA_START_ADDR 0x08
//flash command define
#define READ1_PAGE_NAND_CMD 0x00
#define READ2_PAGE_NAND_CMD 0x01
#define READ_SPARE_NAND_CMD 0x50
#define READ_ID_NAND_CMD 0x90
#define READ_STATUS_NAND_CMD 0x70
#define PROGRAM_PAGE_NAND_CMD 0x80
#define PROGRAM_CONFIRM_NAND_CMD 0x10
#define BLOCK_ERASE_NAND_CMD 0x60
#define BLOCK_ERASE_CONFIRM_NAND_CMD 0xd0
#define RESET_NAND_CMD 0xff
//judge condition define
//2002.8.9 warren added
#define GET_PASSWORD 0x80
#define SET_PASSWORD 0x81
#define CHANGE_DISK 0x82
#define BLOCK_ERASE 0x83
#define PROGRAM_PAGE 0x84
#define READ_PAGE 0x85
#define GET_FLASH_ID 0x86
#define GET_MAP_BLOCK_INDEX 0x87
#define READ_SPARE 0x88
#define PROGRAM_SPARE 0x89
extern void StartPageRead ( WORD BlockIndex,
WORD PageIndex,
PBYTE ram_start_addr,
eMode_t mode_sel);
extern void opEccArea ( BYTE bCommand,
WORD BlockIndex,
WORD PageIndex );
extern void WaitPageReadEnd( WORD BlockIndex,
WORD PageIndex,
PBYTE ram_start_addr );
extern void StartPageWrite ( WORD BlockIndex,
WORD PageIndex,
PBYTE ram_start_addr,
eMode_t mode_sel);
extern BYTE WaitPageWriteEnd(WORD BlockIndex, WORD PageIndex);
extern BOOLEAN WriteExtData(PBYTE destination, WORD length);
extern void WriteEccCode(PBYTE ptr_ecc);
extern BYTE BlockErase(WORD BlockIndex);
extern void quickBlockErase(WORD BlockIndex);
extern void SendCommandAddr(BYTE bCommand, WORD BlockIndex, WORD PageIndex);
#define ACTIVE_ECC 1
#define INACTIVE_ECC 0
#define SPARESIZE 0x10
#define MBR_START_BLOCK 1
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -