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

📄 fs7805.h

📁 Falsh 读写的demo
💻 H
字号:
/*
*********************************************************************************************************
* File     : Fs7805.H
* Contents :
*
* $Date    : 09/18/06    Kimi    v0.1
* $Date    : 10/18/06    Kimi    v0.2
* $Date    : 11/02/06    Kimi    v1.0
*
* Copyright (c) 2006 Fameg, Inc. All rights reserved
*********************************************************************************************************
*/

#ifndef __FS7805_H__
#define __FS7805_H__

#ifndef TRUE
#define TRUE                1
#endif

#ifndef true
#define true                1
#endif

#ifndef FALSE
#define FALSE               0
#endif

#ifndef false
#define false               0
#endif

/*
#define SM
#define SM_FAST
#define PREFETCH
#define ERASE_ALL
*/

/*
*********************************************************************************************************
*                                              DATA TYPES
*                                         (Compiler Specific)
*********************************************************************************************************
*/
typedef unsigned char       BOOLEAN;
//typedef bit                 BOOL;                      // Unsigned  1 bit quantity
typedef unsigned char       INT8U;                     // Unsigned  8 bit quantity
typedef signed   char       INT8S;                     // Signed    8 bit quantity
typedef unsigned int        INT16U;                    // Unsigned 16 bit quantity
typedef unsigned int        UINT16;                    // Unsigned 16 bit quantity
typedef signed   int        INT16S;                    // Signed   16 bit quantity
typedef unsigned long       INT32U;                    // Unsigned 32 bit quantity
typedef unsigned long       UINT32;                    // Unsigned 32 bit quantity
typedef signed   long       INT32S;                    // Signed   32 bit quantity
typedef float               FP32;                      // Single precision floating point

typedef unsigned char       STATUS;                    // Unsigned  8 bit quantity
typedef unsigned char       BYTE;                      // Unsigned  8 bit quantity
#define WORD                INT16U
#define DWORD               INT32U
//typedef bit                 bool;                      // Unsigned  1 bit quantity
typedef UINT16              *PUINT16;

#define bool           char
#define BOOL           char
typedef BYTE                *PBYTE;

typedef enum {COPY_ALL, COPY_DIRTY, COPY_CLEAN} TCOPY_MODE;

typedef union __TDATACAST__
{
  unsigned char  ucByte[sizeof(unsigned long)/sizeof(unsigned char) ];
  unsigned short usByte[sizeof(unsigned long)/sizeof(unsigned short)];
  unsigned long  ulByte[sizeof(unsigned long)/sizeof(unsigned long) ];
}
TDataCast;

#define bmBIT0              0x01
#define bmBIT1              0x02
#define bmBIT2              0x04
#define bmBIT3              0x08
#define bmBIT4              0x10
#define bmBIT5              0x20
#define bmBIT6              0x40
#define bmBIT7              0x80

/*
*********************************************************************************************************
*                                          DEFINE ENDPOINT MACRO
*********************************************************************************************************
*/
#define bmEP_TYPE_ISO       0x01
#define bmEP_TYPE_BULK      0x02
#define bmEP_TYPE_INT       0x03

#define bmEP_MAP_EP1        0x01                       // Endpoint Number 1
#define bmEP_MAP_EP2        0x02                       // Endpoint Number 2
#define bmEP_MAP_EP3        0x03                       // Endpoint Number 3
#define bmEP_MAP_EP4        0x04                       // Endpoint Number 4
#define bmEP_MAP_EP5        0x05                       // Endpoint Number 5
#define bmEP_MAP_EP6        0x06                       // Endpoint Number 6
#define bmEP_MAP_EP7        0x07                       // Endpoint Number 7
#define bmEP_MAP_EP8        0x08                       // Endpoint Number 8
#define bmEP_MAP_EP9        0x09                       // Endpoint Number 9
#define bmEP_MAP_EP10       0x0a                       // Endpoint Number 10
#define bmEP_MAP_EP11       0x0b                       // Endpoint Number 11
#define bmEP_MAP_EP12       0x0c                       // Endpoint Number 12
#define bmEP_MAP_EP13       0x0d                       // Endpoint Number 13
#define bmEP_MAP_EP14       0x0e                       // Endpoint Number 14
#define bmEP_MAP_EP15       0x0f                       // Endpoint Number 15

#define DMA_FIFOA0          0xEE00                     // 512 Byte Data FIFO A0
#define DMA_FIFOA1          0xF000                     // 512 Byte Data FIFO A1
#define DMA_FIFOB0          0xF200                     // 512 Byte Data FIFO B0
#define DMA_FIFOB1          0xF400                     // 512 Byte Data FIFO B1
#define DMA_FIFOC0          0xF600                     // 512 Byte Data FIFO C0
#define DMA_FIFOC1          0xF800                     // 512 Byte Data FIFO C1
#define DMA_FIFOD0          0xFA00                     // 512 Byte Data FIFO D0
#define DMA_FIFOD1          0xFC00                     // 512 Byte Data FIFO D1

#define DMA_BUFFER0         DMA_FIFOA0
#define DMA_BUFFER1         DMA_FIFOB0
#define DMA_BUFFER2         DMA_FIFOC0

#define MAX_DEVICE_NUM          4

#define DEVICE_FLASH_DISK       6                      // Not used
#define DEVICE_SM_TOTAL         0xff                   // Not used

#define MAX_SECTOR_COUNT        0x80                   // Not used
#define PARTITION_OFFSET        0x20                   // Not used

#define BYTES_PER_SECTOR        512                    // 512 bytes per sector traditionally
#define BYTES_PER_SECTOR_SHIFT  9                      // 2 ^ 9 = 512, 512 bytes per sector traditionally

#define HEADER_SIZE             64                     // Redundant area size in byte for 2048 bytes per page
/*
#define BYTES_PER_PAGE          (BYTES_PER_SECTOR + HEADER_SIZE)
                                                       // Page size in byte for 512 + 16 bytes per page
*/

#define MAX_PAGES_PER_BLOCK     64                     // Max pages per block

#define CopyBuffer              DMA_BUFFER2            // Address of temporary block copy buffer

// 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 GET_FLASH_INFO_DELAY    100                    // in 10 ms
// Smart Media
#define FLASH_CMD_TIMEOUT       5                      // in 10 ms
#define FLASH_FLUSH_TIME        10                     // in 10 ms
/*
// Secure Digital
#define SD_CMD_TIMEOUT          100
// Compact Flash
#define CF_CMD_TIMEOUT          100
*/

/*
*********************************************************************************************************
*                                          DEFINE ENDPOINT TYPE
*********************************************************************************************************
*/
#define bmEP1MAP            bmEP_MAP_EP1

#define bmEP2MAP            bmEP_MAP_EP2

/*
*********************************************************************************************************
*                                       GLOBAL MACRO PROTOTYPES
*********************************************************************************************************
*/
#define FLASH_DISK_CONFIG_OFFSET    0x0e0
#define PASSWORD_LENGTH             8
#define NUM_PARTITIONS              2
#define PIN_LENGTH                  8

#define SetBulkInFull()             while (EPBFIFOCS & bmFIFO0_FULL); \
                                    EPBFIFOCS   = (EPBFIFOCS | bmFIFO0_FULL_WE) | bmFIFO0_FULL
/*
*********************************************************************************************************
*                                              DATA TYPES
*********************************************************************************************************
*/
typedef struct
{
    UINT32  TotalBlocks;
    UINT16  BlockSize;
    BYTE    WriteProtect;
} TDeviceInfo;

typedef struct
{
    BYTE    Password[PASSWORD_LENGTH];
    bool    ReadOnly[MAX_DEVICE_NUM];
    UINT32  PartitionOffset[NUM_PARTITIONS];
    BYTE    PIN[PIN_LENGTH];
} TConfigData;

/*
*********************************************************************************************************
*                                       GLOBAL MACRO PROTOTYPES
*********************************************************************************************************
*/
#define STATUS_SUCCESS       0x00
#define STATUS_PARAM_ERROR   0x01
#define STATUS_FLASH_ERROR   0x02
#define STATUS_WRITE_PROTECT 0x03
#define STATUS_CIS_ERROR     0x04
#define STATUS_BLOCK_ERROR   0x05
#define STATUS_DATA_ERROR    0x06
#define STATUS_ECC_1ERROR    0x07
#define STATUS_ECC_2ERROR    0x08
#define STATUS_NO_BLOCK      0x09
#define STATUS_INVALID_BLOCK 0x0a
#define STATUS_NO_MEDIA      0x0b
#define STATUS_MEDIA_CHANGE  0x0c
#define STATUS_MEDIA_BUSY    0x0d
#define STATUS_AUTH_ERROR    0x0e
#define STATUS_CMD_ERROR     0x0f


// Command Block Status Values
#define COMMAND_PASSED          0x00
#define COMMAND_FAILED          0x01
#define PHASE_ERROR             0x02      // Internal Device Error, Bit direction error, 13 cases

// Bulk Completed State definitions
#define CBW_GET_COMPLETED               0x00
#define BULK_DMA_IN_COMPLETED           0x01
#define BULK_DMA_OUT_COMPLETED          0x02
#define SHORT_PACKET_STALL_COMPLETED    0x03
#define STALL_IN_COMPLETED              0x04
#define CSW_REPLY_COMPLETED             0x05

#define BulkInStall()                   (EPBCS  = EPBCS | bmEP_SESTALL)
#define UsbDmaBuffer                    DMA_FIFOA0
#define CBW_SIGNATURE                   0x55534243L // 0x43425355L
#define CSW_SIGNATURE                   0x55534253L // 0x53425355L
#define CBWCB_OFFSET                    0xf
#define CBW_LENGTH                      31
#define CBW_LENGTH_98                   32
#define CSW_LENGTH                      13
#define EP4_5_FIFO_LEN                  64

#define CBWCB_ADDR                      (DMA_FIFOA0 + CBWCB_OFFSET)
#define Delay(Time)\
{\
  DelayTimer    = (Time)/10;\
  while (DelayTimer);\
}

#define GetNextBuffer(CurrentBuffer)    (DMA_FIFOB0)
#define CurrentBuffer                   (DMA_BUFFER0)

/*
*********************************************************************************************************
*                                       EXTERN VARIABLE PROTOTYPES
*********************************************************************************************************
*/
extern  xdata   UINT16  DelayTimer;

#endif

⌨️ 快捷键说明

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