📄 fs7805.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 + -