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

📄 cf.h

📁 使用PIC24 16位单片机 读写SD卡 支持FAT32
💻 H
字号:
/*
** interface library for the Compact Flash + MP3 doughter board
** 
** language:    MPLAB-C18  
** target:      PIC18F8720 
** 04/14/03 Lucio Di Jasio 
*/

//#define EXTERNAL_BUS_DIAGNOSTIC

#include "generic.h"
#include "_fat.def"
#include "_FATDefs.h"

#define MEDIA_SECTOR_SIZE	512

#define	cmdCHECK_POWER_MODE					0xE5
#define	cmdEXECUTE_DRIVE_DIAGNOSTIC			0x90
#define	cmdERASE_SECTORS					0xC0
#define	cmdFLUSH_CACHE						0xE7
#define	cmdFORMAT_TRACK						0x50
#define	cmdIDENTIFY_DEVICE					0xEC
#define	cmdIDLE								0xE3
#define	cmdIDLE_IMMEDIATELY					0xE1
#define	cmdINITIALIZE_DRIVE_PARAMETERS		0x91
#define	cmdKM_STRUCTURE_READ				0xB9
#define	cmdKM_READ_KEYING_MATERIAL			0xB9
#define	cmdKM_CHANGE_KM_VALUE				0xB9
#define	cmdNOP								0x00
#define	cmdREAD_BUFFER						0xE4
#define	cmdREAD_DMA							0xC8
#define	cmdREAD_LONG_SECTOR					0x22
#define	cmdREAD_MULTIPLE					0xC4
#define	cmdREAD_SECTORS						0x20
#define	cmdREAD_VERIFY_SECTORS				0x40
#define	cmdRECALIBRATE						0x10
#define	cmdREQUEST_SENSE					0x03
#define	cmdSEC_DISABLE_PASSWORD				0xF6
#define	cmdSEC_ERASE_PREPARE				0xF3
#define	cmdSEC_ERASE_UNIT					0xF4
#define	cmdSEC_FREEZE_LOCK					0xF5
#define	cmdSEC_SET_PASSWORD					0xF1
#define	cmdSEC_UNLOCK						0xF2
#define	cmdSEEK								0x70
#define	cmdSET_FEATURES						0xEF
#define	cmdSET_MULTIPLE_MODE				0xC6
#define	cmdSET_SLEEP_MODE					0xE6
#define	cmdSTANDBY							0xE2
#define	cmdSTANDBY_IMMEDIATE				0xE0
#define	cmdTRANSLATE_SECTOR					0x87
#define	cmdWEAR_LEVEL						0xF5
#define	cmdWRITE_BUFFER						0xE8
#define	cmdWRITE_DMA						0xCA
#define	cmdWRITE_LONG_SECTOR				0x32
#define	cmdWRITE_MULTIPLE					0xC6
#define	cmdWRITE_MULTIPLE_NOERASE			0xCD
#define	cmdWRITE_SECTOR						0x30
#define	cmdWRITE_SECTOR_NOERASE				0x38
#define	cmdWRITE_VERIFY						0x3C


//----------------------------------------------------------------------
//#define ADDBH	LATH	// address bus High A8-15 // not available
//#define ADDBL	LATE	// address bus Low  A0-3
//#define ADDDIR	TRISE
#define ADDR0	LATBbits.LATB15
#define	ADDR1	LATBbits.LATB14
#define ADDR2	LATGbits.LATG9
#define ADDR3	LATGbits.LATG8

#define ADRTRIS0	TRISBbits.TRISB15
#define ADRTRIS1	TRISBbits.TRISB14
#define ADRTRIS2	TRISGbits.TRISG9
#define ADRTRIS3	TRISGbits.TRISG8

#define DATABIN	PORTE	// data bus D0-7
#define DATABOUT	LATE
#define DATADIR	TRISE

// video signal lines
//#define SYNCH	LATG,0	// o video synch signal
//#define LSDO	LATG,2	// i/o DT2 video out

// control bus lines
//#define RAMCE	LATH,0	// o -RAM chip select
#define CFCE	LATFbits.LATF1	// o -CF card chip select
#define CFCEDIR	TRISFbits.TRISF1
#define OE		LATDbits.LATD5	// o -Output Enable
#define OEDIR	TRISDbits.TRISD5
#define WE		LATDbits.LATD4	// o -Write Enable
#define WEDIR	TRISDbits.TRISD4
#define CFRST	LATDbits.LATD0	// o CF Reset
#define RESETDIR	TRISDbits.TRISD0
#define CFRDY	PORTDbits.RD12 	// i CF rdy signal
#define READYDIR	TRISDbits.TRISD12
#define CFCD1	PORTCbits.RC4	// i -CF card detect (w. pull up)
#define CD1DIR	TRISCbits.TRISC4

#define DATABoutput	DATADIR = 0;		// make the data bus active output
#define DATABinput	DATADIR = 0xff;	// make the data bus input hi-z

//----------------------------------------------------------------------
// ATA-CF registers definition
#define R_DATA	0
#define R_ERROR 	1
#define R_COUNT	2
#define R_SECT	3
#define R_CYLO	4
#define R_CYHI	5
#define R_DRIVE	6
#define R_CMD		7
#define R_STATUS	7

//----------------------------------------------------------------------
// CF-ATA commands definition
#define C_SECTOR_READ     0x20
#define C_DRIVE_DIAG      0x90
#define C_DRIVE_IDENT     0xEC
#define C_SECTOR_WRITE    0x30

//----------------------------------------------------------------------
// CF_STATUS definitions
#define S_READY	0x58
#define S_ERROR	0x51

// return values

#define OUTPUT	0
#define INPUT	1

// booleans
#define FALSE   0
#define TRUE    !FALSE

// prototypes
void BUStest( void);
BYTE MediaInit( void);
BYTE MediaDetect( void);
BYTE WriteProtectState (void);
BYTE CFread( BYTE add);
void CFwrite( BYTE add, BYTE d);
void CFwait(void);
extern DISK glbDiskData;
extern BYTE gblCFBuf[];

BYTE SECTORread( DWORD lda, BYTE * buf);
BYTE SECTORwrite( DWORD lda, BYTE * buf);

⌨️ 快捷键说明

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