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

📄 storage.h

📁 FS7805 使用ATA硬盘的demo
💻 H
字号:
/*
*********************************************************************************************************
* File:     storage.h
* Contents:
*
* $Date:    04/06/06    Kimi    v0.1
*           01/05/07    kevin   v0.2
*           01/08/07    kevin   v0.3
*
* Copyright (c) 2007 Fameg, Inc. All rights reserved
*********************************************************************************************************
*/

#ifndef StorageH
#define StorageH

#define DMA_BUFFER0 0x4000
//#define DMA_BUFFER1 0x4200
#define DMA_BUFFER2 DMA_FIFOB0

#define MAX_DEVICE_NUM 4

#define DEVICE_SM         0
#define DEVICE_CF         1
#define DEVICE_SD         2
#define DEVICE_MS         3
#define DEVICE_FLASH_DISK 6
#define DEVICE_SM_TOTAL   0xff

#define MAX_SECTOR_COUNT             0x80
#define PARTITION_OFFSET             0x20
#define BYTES_PER_SECTOR             512
#define BYTES_PER_SECTOR_SHIFT       9
#define HEADER_SIZE                  16     // Redundant area
#define HEADER_SIZE_2K               64
#define BYTES_PER_PAGE               (BYTES_PER_SECTOR + HEADER_SIZE)
#define MAX_PAGES_PER_BLOCK          64
#define SM_BLOCK_SEGMENT_SHIFT       10     // SM_BLOCKS_PER_SEGMENT = 2 ^ 10
#define SM_BLOCK_SEGMENT_MASK        0x03ff
#define SM_MAX_CHIPS_PER_DEVICE      16
#define SM_MAX_SEGMENTS_PER_CHIP     8
#define SM_MAX_SEGMENTS_PER_DEVICE   (SM_MAX_CHIPS_PER_DEVICE * SM_MAX_SEGMENTS_PER_CHIP)
#define SM_BLOCKS_PER_SEGMENT        ((UINT16)1 << SM_BLOCK_SEGMENT_SHIFT)
#define SM_USER_BLOCKS_PER_SEGMENT   1000   // Logical blocks per segment
#define SM_BLOCK_TAB_SIZE            SM_BLOCKS_PER_SEGMENT
#define SM_FREE_TAB_SIZE             128    // SM_BLOCK_TAB_SIZE / 8

#define MS_BLOCK_SEGMENT_SHIFT       9      // MS_BLOCKS_PER_SEGMENT = 2 ^ 9
#define MS_BLOCK_SEGMEN_MASK         0x01ff
#define MS_MAX_SEGMENTS_PER_DEVICE   16
#define MS_BLOCKS_PER_SEGMENT        ((UINT16)1 << MS_BLOCK_SEGMENT_SHIFT)
#define MS_USER_BLOCKS_PER_SEGMENT   496    // Logical blocks per segment
#define MS_BLOCK_TAB_SIZE            MS_BLOCKS_PER_SEGMENT

// Special value
#define FREE_BLOCK                   0xffff
#define ERROR_BLOCK                  0xfff0
#define VALID_BLOCK                  0xff
#define INVALID_BLOCK                0xf0
#define VALID_DATA                   0xff
#define EMPTY_TAG                    0xff

#define MAX_FLASH_RETRY_TIMES        4
#define FLASH_CMD_TIMEOUT            5      // in 10 ms
#define FLASH_FLUSH_TIME             20     // in 10 ms
#define CF_CMD_TIMEOUT               100
#define GET_FLASH_INFO_DELAY         100     // in 10 ms
#define SD_CMD_TIMEOUT               100

#ifndef PMOS
  #define CardPowerOn() CARD_POWER_CTRL = 0
  #define CardPowerOff() CARD_POWER_CTRL = 1
#endif

//#define SdCardExist() (SDMI_ST&bmSD_EXIST)



typedef struct
{
  UINT32 TotalBlocks;
  UINT16 BlockSize;
  BYTE   WriteProtect;
} TDeviceInfo;

//----------------------------------------------------------------------------
// Storage function declare
//----------------------------------------------------------------------------
void StorageInit();
void StorageSuspend();
void StorageResume();
void StorageStart();
void StorageEject();
void IdentifyDrive(UINT16 Buffer);
STATUS QueryDevice();
STATUS ReadSector();
STATUS WriteSector();
STATUS ReadNextSector();
STATUS WriteNextSector();
STATUS ReadNextSectorData();
STATUS WriteNextSectorData();
UINT16 GetNextBuffer(UINT16 Buffer);

//----------------------------------------------------------------------------
// MMC function declare
//----------------------------------------------------------------------------
//#define SdCtrlReset()  (SW_RST|=bmSDMI_RST)

//void SdInit();
//void SdSuspend();
//void SdResume();
//void SdStart();
//void SdEject();
//void SdIntHandler(BYTE Event);
//void SdMediaChange();
//STATUS SdQueryDevice();
//STATUS SdReadSector();
//STATUS SdWriteSector();
//STATUS SdReadNextSector();
//STATUS SdReadNextSectorData();
//STATUS SdWriteNextSector();
//STATUS SdStopCmd();
//STATUS SdReadExtCSD();


void CfInit();
void CfSuspend();
void CfResume();
void CfStart();
void CfEject();
//void CfIntHandler(BYTE Event);
void CfMediaChange();
STATUS CfQueryDevice();
STATUS CfReadSector();
STATUS CfWriteSector();
STATUS CfReadNextSector();
STATUS CfWriteNextSector();
STATUS CfReadTwoSector();
void InitBulkPipe();
//----------------------------------------------------------------------------
extern xdata TDeviceInfo DeviceInfo;
extern BYTE LastDevice;
extern UINT32 SectorStart;
extern UINT16 SectorCount;
extern UINT16 InBuffer;
extern UINT16 CopyBuffer;
extern BYTE CmdTimer;
extern idata STATUS CfMediaStatus;
extern xdata BYTE CfGetFlashInfoTimer;


#endif

⌨️ 快捷键说明

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