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

📄 flash.h

📁 COG-VP12864液晶屏驱动代码及对应RTC实例
💻 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 + -