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

📄 cf.h

📁 详细介绍了关于CF卡的存储结构
💻 H
字号:
/*	Copyright (c) 2002  Supconyb Co.,Ltd.
	All rights reserved.
	
	File name:			
	Abstract:
		This File defined functions use for CF card

	Current version: 	1.0a
	Author: 			ZhaoXin	

*/ 


#include <absacc.h>
sbit reg=P1^4;
sbit reg_select=P1^5;
unsigned char *cf_start_addr=&XBYTE[0xe000];

#define ARCHIVE 0x20
#define DIR 0x10
#define VOL 0x08
#define SYS 0x04
#define HIDDEN 0x02
#define READONLY 0x01
#define NORMAL 0x00

#define CF_CIS (*cf_start_addr)

#define CF_CONFIG (*cf_start_addr)
#define CF_CONFIG_STATUS (*(cf_start_addr+2))
#define CF_REP (*(cf_start_addr+4))

#define CF_DATA (*cf_start_addr)
#define CF_ERROR (*(cf_start_addr+1))
#define CF_FEATURE (*(cf_start_addr+1))
#define CF_SECTOR_COUNT (*(cf_start_addr+2))
#define CF_SECTOR_NUM (*(cf_start_addr+3))
#define CF_CYLINDER_LOW (*(cf_start_addr+4))
#define CF_CYLINDER_HIGH (*(cf_start_addr+5))
#define CF_DRV_HEAD (*(cf_start_addr+6))
#define CF_STATUS (*(cf_start_addr+7))
#define CF_COMM (*(cf_start_addr+7))
#define CF_DATA_EVEN (*(cf_start_addr+8))
#define CF_DATA_ODD (*(cf_start_addr+9))
#define CF_CONTROL (*(cf_start_addr+0x0e))
#define CF_ID (*(cf_start_addr+0x0f))

//xdata unsigned char fat_map[4096];		//8k bytes for mapping Fat table
//for 32Mb CF first sector
code unsigned char BPB[512]={
	0xEB,0x3C,0x90,0x2A,0x61,0x28,0x3C,0x58,0x49,0x48,0x43,0x00,0x02,0x01,0x01,0x00,
	0x02,0x00,0x02,0x01,0xF6,0xF8,0xF4,0x00,0x3F,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x29,0xA2,0x5C,0xB0,0x5C,0x4E,0x4F,0x20,0x4E,0x41,
	0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x31,0x36,0x20,0x20,0x20,
	0x33,
	0xC9,
	0x8E,
	0xD1,
	0xBC,
	0xF0,
	0x7B,0x8E,
	0xD9,0xB8,
	0x00,0x20,
	0x8E,0xC0,
	0xFC,0xBD,
	0x00,0x7C,
	0x38,0x4E,0x24,0x7D,0x24,0x8B,0xC1,0x99,0xE8,0x3C,0x01,0x72,0x1C,0x83,0xEB,0x3A,
	0x66,0xA1,0x1C,0x7C,0x26,0x66,0x3B,0x07,0x26,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA,
	0x02,0x88,0x56,0x02,0x80,0xC3,0x10,0x73,0xEB,0x33,0xC9,0x8A,0x46,0x10,0x98,0xF7,
	0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E,0x13,0xD1,0x8B,0x76,0x11,
	0x60,0x89,0x46,0xFC,0x89,0x56,0xFE,0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03,
	0xC3,0x48,0xF7,0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x00,0xE8,0xE6,
	0x00,0x72,0x39,0x26,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE,0xA1,0x7D,0xF3,0xA6,
	0x61,0x74,0x32,0x4E,0x74,0x09,0x83,0xC7,0x20,0x3B,0xFB,0x72,0xE6,0xEB,0xDC,0xA0,
	0xFB,0x7D,0xB4,0x7D,0x8B,0xF0,0xAC,0x98,0x40,0x74,0x0C,0x48,0x74,0x13,0xB4,0x0E,
	0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEF,0xA0,0xFD,0x7D,0xEB,0xE6,0xA0,0xFC,0x7D,0xEB,
	0xE1,0xCD,0x16,0xCD,0x19,0x26,0x8B,0x55,0x1A,0x52,0xB0,0x01,0xBB,0x00,0x00,0xE8,
	0x3B,0x00,0x72,0xE8,0x5B,0x8A,0x56,0x24,0xBE,0x0B,0x7C,0x8B,0xFC,0xC7,0x46,0xF0,
	0x3D,0x7D,0xC7,0x46,0xF4,0x29,0x7D,0x8C,0xD9,0x89,0x4E,0xF2,0x89,0x4E,0xF6,0xC6,
	0x06,0x96,0x7D,0xCB,0xEA,0x03,0x00,0x00,0x20,0x0F,0xB6,0xC8,0x66,0x8B,0x46,0xF8,
	0x66,0x03,0x46,0x1C,0x66,0x8B,0xD0,0x66,0xC1,0xEA,0x10,0xEB,0x5E,0x0F,0xB6,0xC8,
	0x4A,0x4A,0x8A,0x46,0x0D,0x32,0xE4,0xF7,0xE2,0x03,0x46,0xFC,0x13,0x56,0xFE,0xEB,
	0x4A,0x52,0x50,0x06,0x53,0x6A,0x01,0x6A,0x10,0x91,0x8B,0x46,0x18,0x96,0x92,0x33,
	0xD2,0xF7,0xF6,0x91,0xF7,0xF6,0x42,0x87,0xCA,0xF7,0x76,0x1A,0x8A,0xF2,0x8A,0xE8,
	0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01,0x02,0x80,0x7E,0x02,0x0E,0x75,0x04,0xB4,0x42,
	0x8B,0xF4,0x8A,0x56,0x24,0xCD,0x13,0x61,0x61,0x72,0x0B,0x40,0x75,0x01,0x42,0x03,
	0x5E,0x0B,0x49,0x75,0x06,0xF8,0xC3,0x41,0xBB,0x00,0x00,0x60,0x66,0x6A,0x00,0xEB,
	0xB0,0x4E,0x54,0x4C,0x44,0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,0x4E,0x54,
	0x4C,0x44,0x52,0x20,0x69,0x73,0x20,0x6D,0x69,0x73,0x73,0x69,0x6E,0x67,0xFF,0x0D,
	0x0A,0x44,0x69,0x73,0x6B,0x20,0x65,0x72,0x72,0x6F,0x72,0xFF,0x0D,0x0A,0x50,0x72,
	0x65,0x73,0x73,0x20,0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x20,0x74,0x6F,0x20,0x72,
	0x65,0x73,0x74,0x61,0x72,0x74,0x0D,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xBF,0xCC,0x55,0xAA
	};

struct sCIS
{
	unsigned char card_sign[2];
	unsigned char def_cylinder_num[2];
	unsigned char reserved1[2];
	unsigned char def_head_num[2];
	unsigned char uf_bytes_per_track[2];
	unsigned char uf_bytes_per_sector[2];
	unsigned char def_sector_per_track[2];
	unsigned char sector_per_card[4];
	unsigned char vendor_unique[2];
	char serial_num[20];
	unsigned char buffer_type[2];
	unsigned char buffer_size[2];
	unsigned char ECC_bytes[2];
	char fireware[8];
	char model_num[40];
	unsigned char max_wr_sector[2];
	unsigned char double_word[2];
	unsigned char capabilities[2];
	unsigned char reserved2[2];
	unsigned char PIO_mode[2];
	unsigned char DMA_mode[2];
	unsigned char tr_par_valid[2];
	unsigned char cur_cylinder_num[2];
	unsigned char cur_head_num[2];
	unsigned char cur_sector_per_track[2];
	unsigned char cur_capacity[4];
	unsigned char multi_sector[2];
	unsigned char total_sector[4];
	unsigned char reserved3[138];
	unsigned char security_status[2];
	unsigned char vendor[64];
	unsigned char power[2];
	unsigned char reserved4[182];
};

struct sBoot		//512 bytes
{
	unsigned char bsJump[3];		//0x00
    char OemName[8];				//0x03
    unsigned char bsBytesPerSec[2];  	//0x0b	2
    unsigned char bsSecPerClust;	//0x0d	1
    unsigned char bsResSectors[2];		//0x0e	2
    unsigned char bsFATs;			//0x10	1		
    unsigned char bsRootDirEnts[2];		//0x11	2
    unsigned char bsSectors[2];			//0x13	2
    unsigned char bsMedia;			//0x15	1
	unsigned char bsFATsecs[2];			//0x16	2
    unsigned char bsSecPerTrack[2];		//0x18	2
    unsigned char bsHeads[2];			//0x1a	2
    unsigned char bsHiddenSecs[2];		//0x1c	2
	unsigned char bsBootCode[2];			//0x1e	2
    unsigned char bsHugeSectors[4];	//0x20	2   use if driver>32Mb
    unsigned char bsDriveNumber;	//0x24	1
	unsigned char bsReserved1;		//0x25	1
    unsigned char bsBootSignature;	//0x26	1
    unsigned char bsVolumeID[4];	//0x27	4
    char bsVolumeLabel[11];			//0x2b	11
    char bsFileSysType[8];			//0x36	8
    unsigned char unused[512-64];				
	unsigned char bsSign[2];
//    UWORD sysRootDirSecs;         // of sectors root dir uses 
//    ULONG sysFatStart;            // first FAT sector 
//    ULONG sysRootDirStart;        // first root directory sector 
//    ULONG sysDataStart;           // first data sector 
};

struct sBootInformation
{
	unsigned int byte_per_sec;
	unsigned char sec_per_clust;
	unsigned int reserved_sector;
    unsigned char fat_num;
	unsigned int root_dir_size;
	unsigned int total_sector;
	unsigned char media_flag;
	unsigned int fat_size;
	unsigned int sec_per_track;
	unsigned int heads;
	unsigned int hidden_sector;
	unsigned int boot_code;
	unsigned long huge_sec;
	unsigned char drive_num;
	unsigned char boot_signature;
	unsigned char volume_id[4];
	char volume_lab[11];
	char file_sys_type[8];
};

struct sTime
{
	unsigned int hour:5;
	unsigned int min:6;
	unsigned int sec:5;
};
							  
struct sDate
{
	unsigned int year:7;
	unsigned int mon:4;
	unsigned int day:5;
};

struct sRootDir		//32 bytes
{
	char file_name[8];
	char exten_name[3];
	unsigned char file_attribute;
	unsigned char reserved[10];
	struct sTime last_up_time;
	struct sDate last_up_date;
	unsigned char first_clust[2];
	unsigned char file_size[4];
};

struct sSubDir		//32 bytes
{
	char file_name[8];
	char exten_name[3];
	unsigned char file_attribute;
	unsigned char reserved[10];
	struct sTime last_up_time;
	struct sDate last_up_date;
	unsigned char first_clust[2];
	unsigned char file_size[4];
};

struct sFatNode
{
	unsigned int current_clustor;
	unsigned int next_clustor;
};

struct sFdtMirror
{
	unsigned char file_name[11];	//name:8bytes;extern:3bytes
	unsigned char start_clustor[2];
};

struct sFileInfo
{
	unsigned int start_clustor;
	unsigned long size;
	unsigned char pos_sector_in_clustor;
	unsigned int file_record_sector;
	unsigned int file_pos_in_sector;
	unsigned int current_sector;
	unsigned int current_in_sector_pos;
	unsigned long file_pt;
	unsigned int in_fat_sec;
};

bit SerchFreeFAT(unsigned int *clustor_chain,unsigned int data_len,unsigned int start_sector);
//bit DeletFile(unsigned int 
char EmptyDirFDT(unsigned int start_sec);

⌨️ 快捷键说明

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