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

📄 sdi.h

📁 三星2413芯片的测试代码,对进行驱动开发很有帮助.
💻 H
字号:
#ifndef __SD_H__
#define __SD_H__

#ifdef __cplusplus
extern "C" {
#endif

#define 	Idle_State					 0
#define	Ready_State					 1
#define	Identification_State		 2
#define	StandBy_State				 3
#define	Transmit_State				4
#define	Data_State					5
#define	Receive_State				6
#define	Progress_State				7
#define	Dis_State					8
#define	PowerUp_State				9

#define  SDIO_SD_TYPE	0
#define  SDIO_MMC_TYPE	1

#define  SDIO_TYPE_A	0
#define  SDIO_TYPE_B	1

#define SDIO_NO_RESP			0
#define SDIO_WAIT_RESP			1
#define SDIO_SHORT_RESP			0
#define SDIO_LONG_RESP			1
#define SDIO_WITHOUT_DATA		0
#define SDIO_WITH_DATA			1

//rSDICON
#define CLOCK_TYPE		(1<<5)
#define BYTE_ORDER		(1<<4)
#define ENCLK			(1<<0)

//rSDICSTA		
#define RESP_INDEX			(0xFF<<0)
#define DATA_TIMEOUT		(1<<5)
#define CMD_ON				(1<<8)
#define RESP_END			(1<<9)
#define CMD_TOUT			(1<<10)
#define CMD_END				(1<<11)
#define RESP_CRC_FAIL		(1<<12)

//rSDIDSTA		
#define CRC_STAT_FAIL		(0x1<<7)
#define RECEIVE_CRC_FAIL		(1<<6)
#define DATA_TOUT			(1<<5)
#define DATA_FINISH			(1<<4)
#define BUSY_FINISH			(1<<3)

//SDIDCON
#define BLOCK_NUM				(0xFFF<<0)
#define DATA_TRANSMIT_MODE		(3<<12)
#define ONLYBUSY_CHECK		(1<<12)
#define DATA_RECEIVE_MODE		(1<<13)
#define DATA_TRANSMIT_START		(1<<14)
#define DMA_EN					(1<<15)
#define WIDE_BUS_EN			(1<<16)
#define WIDE_BUS_DIS			(0<<16)
#define STREAM_TRANSFER		(0<<17)
#define BLOCK_TRANSFER			(1<<17)
#define BUSY_AFTER_CMD			(1<<18)
#define RCV_AFTER_CMD			(1<<19)
#define TRANS_AFTER_RESP		(1<<20)
#define INT_PERIOD_TYPE			(1<<21)
#define BYTE_TRANSFER			(0<<22)
#define HALFWORD_TRANSFER		(1<<22)
#define WORD_TRANSFER			(1<<23)
#define BURST4_EN				(1<<24)

//SDIFSTA
#define TX_FIFO_HALF_FULL				(1<<11)
#define TX_FIFO_AVAILABLE_DETECT		(1<<13)
#define RX_FIFO_AVAILABLE_DETECT		(1<<12)

typedef enum _CardType {
	SD_CARD=0,				// 4 bit Data bus SD
	MMC_CARD=1,			// 1 bit Data bus MMC
	MOVI_NAND_CARD=2,		// 4 bit Data bus MMC
	ERROR_CARD=3
} CardType;;

typedef enum _Command_type {
	GO_TO_IDLE_CMD=0,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	SEND_OP_CMD=1,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	ALL_SEND_SID_CMD=2,				// Basic Commands and Read Stream Commands (Class0 and Class1)
	SET_RELATIVE_ADDR=3,				// Basic Commands and Read Stream Commands (Class0 and Class1)
	SET_DSR_CMD=4,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	SWITCH_CMD=6,						// Basic Commands and Read Stream Commands (Class0 and Class1)
	SELECT_CMD=7,						// Basic Commands and Read Stream Commands (Class0 and Class1)
	SEND_EXT_CSD_CMD=8,				// Basic Commands and Read Stream Commands (Class0 and Class1)
	SEND_CSD_CMD=9,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	SEND_CID_CMD=10,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	READ_DAT_CMD=11,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	STOP_TRANSMISSION_CMD=12,		// Basic Commands and Read Stream Commands (Class0 and Class1)
	SEND_STATUS_CMD=13,				// Basic Commands and Read Stream Commands (Class0 and Class1)
	BUSTEST_R_CMD=14,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	GO_INACTIVE_STATE_CMD=15,		// Basic Commands and Read Stream Commands (Class0 and Class1)
	SET_BLOCKLEN_CMD=16,				// Block Oriented Read Commands(Class2)
	READ_SINGLE_BLOCK_CMD=17, 		// Block Oriented Read Commands(Class2)
	READ_MULTIPLE_BLOCK_CMD=18,		// Block Oriented Read Commands(Class2)
	BUSTEST_W_CMD=19,					// Basic Commands and Read Stream Commands (Class0 and Class1)
	WRITE_DAT_UNTIL_STOP_CMD=20,	// Stream write Command (Class3)
	SET_BLOCK_COUNT_CMD=23,			// Block Oriented Write Commands( Class4 )
	WRITE_BLOCK_CMD=24,				// Block Oriented Write Commands( Class4 )
	WRITE_MULTIPLE_BLOCK=25,			// Block Oriented Write Commands( Class4 )
	PROGRAM_CID_CMD=26,				// Block Oriented Write Commands( Class4 )
	PROGRAM_CSD_CMD=27,				// Block Oriented Write Commands( Class4 )
	SET_WRITE_PROT_CMD=28,			// Block Oriented Write Protection Commands( Class6 )
	CLR_WRITE_PROT_CMD=29,			// Block Oriented Write Protection Commands( Class6 )
	SEND_WRITE_PROT_CMD=30,			// Block Oriented Write Protection Commands( Class6 )
	ERASE_GROUP_START_CMD=35,		// Erase Commands (Class5)
	ERASE_GROUP_END_CMD=36,			// Erase Commands (Class5)
	ERASE_CMD=38,						// Erase Commands (Class5)
	FAST_IO_CMD=39,					// I/O Mode Commands (Class9)
	GO_IRQ_STATE_CMD=40,				// I/O Mode Commands (Class9)
	LOCK_UNLOCK_CMD=42,				// Lock Card (Class7)
	APP_CMD=55,						// Application Specific Commands (Class8)
	GEN_CMD=56,						// Application Specific Commands (Class8)
} CommandType;

/*
typedef struct _ACommandType {
	
} ACommandType;
*/

#if 0
// response0 0x5A000014
// response1 0x5A000018
// response2 0x5A00001C
// response3 0x5A000020
__packed typedef struct _CID_register {
	unsigned char manufactureID:8;			// 8=>136
	unsigned char applicationID:16;			// 16=>128
	unsigned char productNamd:40;			// 40=>112
	unsigned char productRevision:8;			// 8=>72
	unsigned char productRevision2:8;			// 8=>64
	unsigned char productSerialNuber:32;		// 32=>56
	unsigned char reserved1:4;				// 4=>24
	unsigned char manufacturingDate:12;		// 12=>20
	unsigned char crc_check:7;				// 7=>8
	unsigned char reserved2:1;				// 1 =>1
} CID_register;

typedef struct _CSD_register {
	unsigned char SCD_structure:2;				// [127:126] R
	unsigned char reserved1:6;				// [125:120] R
	unsigned char dataReadAccTime:8;			// [119:112] R
	unsigned char dataReadAccTime2:8;		// [111:104] R		//4
	unsigned char maxDataTransferTime:8;		// [103:96] R
	unsigned char cardCommandClasses:12;		// [95:84] R
	unsigned char maxReadDataBlockLen:4;		// [83:80] R		// 6
#if MISALIGN
	unsigned char readBlockPartial:1;			// [79:79] R
	unsigned char writeBlockMisalign:1;			// [78:78] R
	unsigned char readBlockMisalign:1;			// [77:77] R
	unsigned char DRSimplemented:1;			// [76:76] R
	unsigned char reserved2:2;				// [75:74] R
	unsigned char deviceSize:12;				// [73:62] R		// 9
	unsigned char currentRMin:3;				// [61:59] R
	unsigned char currentRMax:3;				// [58:56] R
	unsigned char currentWMin:3;				// [55:53] R
	unsigned char currentWMax:3;				// [52:50] R
	unsigned char deviceSizeMultiflier:3;		// [49:47] R
	unsigned char eraseBlockEn:1;				// [46:46] R
	unsigned char eraseSectorSize:7;			// [45:39] R
	unsigned char wp_grp_size:7;				// [38:32] R
	unsigned char wp_grp_enable:1;			// [31:31] R
	unsigned char reservedforMMC:2;			// [30:29] R
	unsigned char writeSpeedFactor:3;			// [28:26] R
	unsigned char writeBLlen:4;				// [25:22] R
	unsigned char writeBLpartial:1;				// [21:21] R
	unsigned char reserved3:5;				// [20:15] R
#else
	
#endif
	unsigned char fileFormatGroup:1;			// [15:15]RW
	unsigned char copyFlag:1;					// [14:14]RW
	unsigned char PermanentWriteProtection:1;	// [13:13]RW
	unsigned char tempWriteProtection:1;		// [12:12]RW
	unsigned char fileFormat:2;				// [11:10]RW
	unsigned char reserved4:2;				// [9:8]RW

	unsigned char crc_check:7;					// [7:1]RW
	unsigned char alwaysOne:1;				// [0:0]
} CSD_register;
#endif

// Function prototypes
void Ch18_Sdmmc(void);
void set_system_clock(void);
int SD_card_init(void);

void Rd_cid_csd(char reg);

int Check_status(char type);

void writeBigSizeIOTest(void);
void writeBigSizeIOTest2(void);
void readBigSizeIOTest(void);
void readBigSizeIOTest2(void);

void TR_Buf_new(void);

void Card_sel_desel(char sel_desel);

void CMD0(void);
int CMD55(void);

void Rd_CSD(void);
void Rd_CID(void);

void Rd_Block(void);
void Rd_Stream(void);
void Wt_Block(void);
void Wt_Stream(void);

void Set_Prt(void);
void Clr_Prt(void);

void Flush_Rx_buf(void);
void Set_Bus(CardType type);
void View_Rx_buf(void);
void View_Tx_buf(void);
//////////////////////////////////////////////////////////////////////////////////


void SDIO_TypeSetting(U32 ClkType, U32 ByteType);
void SDIO_BlockSizeSetting(U32 Size);
void SDIO_Command(U32 CmdArg, U32 Command, U32 WaitResp, U32 LongResp, U32 WithData);
int Check_CMDend(CommandType cmd, int be_resp);
void SDIO_PrescalerSetting(U32 BaudRate);
void CARD_SEL_DESEL(U8 sel_desel);
void SET_BUSWIDTH(CardType);
void SDIO_WriteTest(void);
void SDIO_ReadTest(void);
void SDIO_EraseBlock(void);
void SD_MMC_SETGPIO(void);
void CalculationBPS_NORMALSD_MMC(int Time);
CardType Check_OCR(void);
int Check_DATend(void);
int Check_BUSYend(void);
void __irq Rd_Int(void);
void __irq Wt_Int(void);

void Set_4bit_bus_MoviNand(void);
void writeBigSizeIOTestRnd(void);
void readBigSizeIOTestRnd(void);
void rwBigSigeIOTestRnd(void);
int Check_DATend2(void);
void eraseBlock_beforewrite(unsigned int StartAddr, unsigned EndAddr);
void stream_write_test(void);
void stream_read_test(void);
#ifdef __cplusplus
}
#endif
#endif /*__SD_H___*/

⌨️ 快捷键说明

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