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

📄 sd_defs.h

📁 基于S3C2440处理器的sd卡驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:

#ifndef _SD_DEFS_H_

#define _SD_DEFS_H_



//This segment should not be modified
#ifndef TRUE
#define TRUE  1
#endif

#ifndef FALSE
#define FALSE 0
#endif

#if 1
typedef unsigned char  INT8U;                   /* 无符号8位整型变量                        */
//typedef signed   char  INT8;                    /* 有符号8位整型变量                        */
typedef unsigned short INT16U;                  /* 无符号16位整型变量                       */
//typedef signed   short INT16;                   /* 有符号16位整型变量                       */
typedef unsigned int   INT32U;                  /* 无符号32位整型变量                       */
typedef signed   int   INT32;                   /* 有符号32位整型变量                       */
typedef float          FP32;                    /* 单精度浮点数(32位长度)                 */
typedef double         FP64;                    /* 双精度浮点数(64位长度)                 */
#endif
/* disable(1) or disable(0) reading or writing by interrupt */
#define SD_INTERRUPT_EN   		0				/* 是(1)否(0)使能中断读写SD/MMC卡 */

#define MMC_MMC_CLOCK_HIGH		20000000		/* SD/MMC卡最高读写速度20MHz */

/* define the block length of sd/mmc card */
#define SD_BLOCKSIZE 			512				/* SD卡/MMC卡块的长度 */

#define SD_BLOCKSIZE_NBITS		9				/* 2 ^ 9 = 512*/

/* define the interrupt of card inserting */
#define IRQ_nCD_SD              //IRQ_EINT18
#define SD_IRQ_CD				IRQ_nCD_SD

#define GPIO_nCD_SD  			//(GPIO_MODE_IN | GPIO_PULLUP_DIS | GPIO_G10)
#define SD_GPIO_CD				GPIO_nCD_SD

#define SD_CD_LEVEL_LOW							/* 定义卡插入低电平有效 */



/* SD卡信息结构体定义 */ /* the information structure variable of SD Card*/typedef struct SD_STRUCT{	
	/* From OCR Register... Operation Condition Register */
	INT32U vtg_win;					/* 电压范围*/
	/* From CID Register... Card IDentification Regiser */
	INT8U	MID;					/* Manufacturer ID*/
	INT16U  OID;					/* OEM/Application ID*/
	INT8U	PNM[6];					/* Product name */
	INT8U	PRV;					/* Product Revision BCD*/
	INT32U	PSN;					/* Product Serial Number */
	INT16U	MDT;					/* Manufacturing Date  12bit */
	/* From CSD Register... Card Specific Data **/
	INT8U	CSD_stuc;				/* CSD structure  2bit */
	INT8U   TAAC;					/* data read access-time-1*/
	INT8U   NSAC;					/* data read access-time-2 IN clk cycles */ 
	INT8U   TRAN_SPEED;				/* MAX. DATA transfer rate */
	INT16U	CCC;					/* card command classes 12bit */
	INT8U	read_bl_len;			/* max. read data block length 4bit*/
	INT8U	read_bl_partial;		/* partial block for read allowed 1bit */
	INT8U	write_blk_mis;			/* write block misalignment 1bit */
	INT8U	read_blk_mis;			/* read block misalignment */
	INT8U	dsr_imp	;				/* DSR implemented */
	INT16U	C_size;					/* device size bit12 */
	INT8U	vdd_r_curr_min;			/* max. read current @Vdd min 3bit*/
	INT8U	vdd_r_curr_max;			/* max. read current @Vdd max 3bit*/
	INT8U	vdd_w_curr_min;			/* max. write current@Vdd min 3bit*/
	INT8U	vdd_w_curr_max;			/* max. write current@Vdd max 3bit*/
	INT8U	C_Size_mult;			/* device size multiplier 3bit */
	INT8U	erase_blk_en;			/* erase single block enable */
	INT8U	erase_sector_size;		/* erase sector size 7bit */
	INT8U	wp_grp_size;			/* write protected group size 7bit*/
	INT8U	wp_grp_enable;			/* write protected group enable 1bit */
	INT8U	r2w_factor;				/* write speed factor  3bit*/
	INT8U	write_bl_len;			/* max. write data block length 4bit */
	INT8U	write_bl_partial;		/* partial block for write allowde 1bit */
	INT8U	file_format_grp;		/* file format group  1bit*/
	INT8U	copy;					/* copy flag 1bit*/
	INT8U	perm_write_pro;			/* permanent write protection 1bit*/
	INT8U	tmp_write_pro;			/* temporary write protection 1bit */
	INT8U	file_format;			/* file format 2bit */
	


	INT16U RCA;						/* 卡逻辑地址 */
	INT8U card_type;				/* 卡类型 */	INT32U block_num;				/* 卡中块的数量 */	INT32U block_len;				/* 卡的块长度(单位:字节) */	INT32U sector_size;				/* 一次可擦除的块个数 */		INT32U timeout_read;			/* 读块超时时间(单位: 8 SPI clock) */	INT32U timeout_write;			/* 写块超时时间(单位: 8 SPI clock) */	INT32U timeout_erase;			/* 擦块超时时间(单位: 8 SPI clock) */}sd_struct;extern sd_struct sds;				/* SD卡信息结构体变量 */ extern volatile int card_insert;extern int card_change; 	/* 卡改变,卡插入开拔出 *//*
*************************************************************

		用户API函数:	读, 写, 擦 SD卡  API函数及错误码
		
*************************************************************
*/
/* 错误码 error code */#define   SD_NO_ERR			     	0x00			// 函数执行成功#define   SD_ERR_NO_CARD		 	0x01			// 卡没有完全插入到卡座中#define   SD_ERR_USER_PARAM      	0x02			// 用户使用API函数时,入口参数有错误#define   SD_ERR_CARD_PARAM		 	0x03			// 卡中参数有错误(与本模块不兼容)#define	  SD_ERR_VOL_NOTSUSP        0x04			// 卡不支持3.3V供电#define   SD_ERR_OVER_CARDRANGE		0x05			// 操作超出卡容量范围#define   SD_ERR_UNKNOWN_CARD       0x06			// 无法识别卡型/* SD命令可能返回的错误码 */#define   SD_ERR_CMD_RESPTYPE	 	0x10			// 命令类型错误#define   SD_ERR_CMD_TIMEOUT     	0x11			// 卡命令响应超时#define   SD_ERR_CMD_RESP		 	0x12			// 卡命令响应错误			/* 数据流错误码 */#define   SD_ERR_DATA_CRC16      	0x20			// 数据流CRC16校验不通过#define   SD_ERR_DATA_START_TOK		0x21			// 读单块或多块时,数据开始令牌不正确#define	  SD_ERR_DATA_RESP		 	0x22			// 写单块或多块时,卡数据响应令牌不正确/* 等待错误码 */#define   SD_ERR_TIMEOUT_WAIT    	0x30			// 写或擦操作时,发生超时错误#define   SD_ERR_TIMEOUT_READ    	0x31			// 读操作超时错误#define	  SD_ERR_TIMEOUT_WRITE	 	0x32			// 写操作超时错误#define   SD_ERR_TIMEOUT_ERASE   	0x33			// 擦除操作超时错误#define	  SD_ERR_TIMEOUT_WAITIDLE 	0x34			// 初始化卡时,等待卡退出空闲状态超时错误/* 写操作可能返回的错误码 */#define	  SD_ERR_WRITE_BLK			0x40			// 写块数据错误#define	  SD_ERR_WRITE_BLKNUMS      0x41			// 写多块时,想要写入的块与正确写入的块数不一致#define   SD_ERR_WRITE_PROTECT		0x42			// 卡外壳的写保护开关打在写保护位置/**************************************************			其它宏定义***************************************************/#define	  CARDTYPE_SD			  	0x00			// 卡型为SD  卡#define   CARDTYPE_MMC			  	0x01			// 卡型为MMC 卡
/* Some Registers of  SD */

// SD Interface
#define SDICON     (*(volatile unsigned *)0x5a000000)	//SDI control
#define SDIPRE     (*(volatile unsigned *)0x5a000004)	//SDI baud rate prescaler
#define SDICARG    (*(volatile unsigned *)0x5a000008)	//SDI command argument
#define SDICCON    (*(volatile unsigned *)0x5a00000c)	//SDI command control
#define SDICSTA    (*(volatile unsigned *)0x5a000010)	//SDI command status
#define SDIRSP0    (*(volatile unsigned *)0x5a000014)	//SDI response 0
#define SDIRSP1    (*(volatile unsigned *)0x5a000018)	//SDI response 1
#define SDIRSP2    (*(volatile unsigned *)0x5a00001c)	//SDI response 2
#define SDIRSP3    (*(volatile unsigned *)0x5a000020)	//SDI response 3
#define SDIDTIMER  (*(volatile unsigned *)0x5a000024)	//SDI data/busy timer
#define SDIBSIZE   (*(volatile unsigned *)0x5a000028)	//SDI block size
#define SDIDCON    (*(volatile unsigned *)0x5a00002c)	//SDI data control
#define SDIDCNT    (*(volatile unsigned *)0x5a000030)	//SDI data remain counter
#define SDIDSTA    (*(volatile unsigned *)0x5a000034)	//SDI data status
#define SDIFSTA    (*(volatile unsigned *)0x5a000038)	//SDI FIFO status
#define SDIIMSK    (*(volatile unsigned *)0x5a00003c)	//SDI interrupt mask. edited for 2440A

#ifdef __BIG_ENDIAN  /* edited for 2440A */
#define SDIDAT    (*(volatile unsigned *)0x5a00004c)	//SDI data
//#define SDIDAT     0x5a00004c  
#else  // Little Endian
#define SDIDAT    (*(volatile unsigned *)0x5a000040)	//SDI data 
#define SDIDAT8	  (*(volatile char *)0x5a000040)

//#define SDIDAT     0x5a000040  
#endif   //SD Interface

/* GPIOE control the clk dat cmd and etc. */
//#define GPECON    (*(volatile unsigned *)0x56000040)	//Port E control
//#define GPEDAT    (*(volatile unsigned *)0x56000044)	//Port E data
//#define GPEUP     (*(volatile unsigned *)0x56000048)	//Pull-up control E



/*
*************************************************************

 			下面为软件包用到的与SD卡相关的宏定义
 	
*************************************************************
*/
	    #define MSK_READY		  0x80				/* 卡就绪掩码 */	    	    	    	    	    /* Mask off the bits in the OCR corresponding to voltage range 3.2V to * 3.4V, OCR bits 20 and 21 */#define MSK_OCR_33			 	0xC0/* 定义在初始化阶段,等待SD卡退出空闲状态的重试次数 *//* Number of tries to wait for the card to go idle during initialization */#define SD_IDLE_WAIT_MAX     	1000/* SD卡命令超时时间(单位 8clock)*//* timeout of command */#define SD_CMD_TIMEOUT   	 	100	/* 100ms 相当的SPI时钟数(单位 unit: 8 clocks) *//* 100ms correspond to SPI clock(unit: 8 clocks)*/#define READ_TIMEOUT_100MS      //100 * SPI_CLOCK / 1000 / 8/* 250ms 相当的SPI时钟数(单位 unit: 8 clocks) *//* 250ms correspond to SPI clock(unit: 8 clocks)*/#define WRITE_TIMEOUT_250MS		//250 * SPI_CLOCK / 1000 / 8    /* CSD中一些域的字节位置(高字节在前) */#define TAAC_POS 			14			//TACC#define NSAC_POS			13			//NSAC#define READ_BL_LEN_POS		10			//READ_BL_LEN#define C_SIZE_POS1			9			//C_SIZE upper  2-bit#define C_SIZE_POS2			8			//C_SIZE middle 8-bit#define C_SIZE_POS3			7			//C_SIZE lower	2-bit#define C_SIZE_MULT_POS1	6			//C_SIZE_MULT upper 2-bit#define C_SIZE_MULT_POS2	5			//C_SIZE_MULT lower 1-bit	

⌨️ 快捷键说明

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