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

📄 mmcsd.h

📁 优龙YLP270开发板 光盘自带的BIOS和实验例程源码 强烈推荐
💻 H
字号:
/******************************************************************************
**
**  COPYRIGHT (C) 2000, 2001 Intel Corporation.
**
**  This software as well as the software described in it is furnished under
**  license and may only be used or copied in accordance with the terms of the
**  license. The information in this file is furnished for informational use
**  only, is subject to change without notice, and should not be construed as
**  a commitment by Intel Corporation. Intel Corporation assumes no
**  responsibility or liability for any errors or inaccuracies that may appear
**  in this document or any software that may be provided in association with
**  this document.
**  Except as permitted by such license, no part of this document may be
**  reproduced, stored in a retrieval system, or transmitted in any form or by
**  any means without the express written consent of Intel Corporation.
**
**  FILENAME:   XcMmc.h
**
**  PURPOSE:    This file defines the API for the MMC driver
**
**  $Modtime: 7/17/03 1:01p $
**
******************************************************************************/

#ifndef _MMCSD_H     // Only include this header file once!
#define _MMCSD_H

/*
*******************************************************************************
*                            GLOBAL VARIABLES
*******************************************************************************
*/

#undef EXTERN
#ifdef XSMMC_GLOBALS
#define EXTERN
#else
#define EXTERN extern
#endif // XSMMC_GLOBALS

typedef struct {
        UINT ECC : 2;               // Bits 0-31
        UINT RES1 : 2;
        UINT TMP_WRITE_PROTECT : 1;
        UINT PERM_WRITE_PROTECT : 1;
        UINT COPY : 1;
        UINT RES2 : 1;
        UINT RES3 : 5;
        UINT WRITE_BL_PARTIAL : 1;
        UINT WRITE_BL_LEN : 4;
        UINT R2W_FACTOR : 3;
        UINT DEFAULT_ECC : 2;
        UINT WP_GRP_ENABLE : 1;
        UINT WP_GRP_SIZE : 5;
        UINT ERASE_GRP_MULT : 3;

        UINT ERASE_GRP_MULTx : 2;   // Bits 32-63
        UINT ERASE_GRP_SIZE : 5;
        UINT C_SIZE_MULT : 3;
        UINT VDD_W_CURR_MAX : 3;
        UINT VDD_W_CURR_MIN : 3;
        UINT VDD_R_CURR_MAX : 3;
        UINT VDD_R_CURR_MIN : 3;
        UINT C_SIZE : 10;

        UINT C_SIZEx : 2;           // Bits 64-95
        UINT RES4 : 2;
        UINT DSR_IMP : 1;
        UINT READ_BLK_MISALIGN : 1;
        UINT WRITE_BLK_MISALIGN : 1;
        UINT READ_BL_PARTIAL : 1;
        UINT READ_BL_LEN : 4;
        UINT CCC : 12;
        UINT TRAN_SPEED : 8;

        UINT NSAC : 8;              // Bits 96-127
        UINT TAAC : 8;
        UINT RES5 : 2;
        UINT SPEC_VERS : 4;
        UINT CSD_STRUCTURE : 2;
        UINT RES6 : 8;
}MMCCSD;


EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
	UINT32 qb[4];

	MMCCSD mmc_csd;
}XsMMC_CSD;

typedef struct {
		UINT NU : 1;	// 0- 31
		UINT CRC : 7;
		UINT MDT : 8;
		UINT PSN : 16;

		UINT PSNx : 16;	 // 32- 63
		UINT PRV : 8;
		UINT PNM : 8;

		UINT PNMx :32;	  // 64- 96

		UINT PNMxx : 7;	  //96 - 127
		UINT OID : 16;
		UINT MID : 8;
}MMCCID;

EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
	UINT32 qb[4];
	MMCCID mmc_cid;
}XsMMC_CID;

typedef struct {


		UINT NU						: 1;
        UINT CRC 					: 7;
        UINT RES1 					: 2;  
		UINT FILE_FORMAT 			: 2;
        UINT TMP_WRITE_PROTECT 		: 1;
        UINT PERM_WRITE_PROTECT 	: 1;
        UINT COPY 					: 1;
		UINT FILE_FORMAT_GRP 		: 1;
        UINT RES2 					: 5;
        UINT WRITE_BL_PARTIAL 		: 1;
        UINT WRITE_BL_LEN 			: 4;
        UINT R2W_FACTOR 			: 3;
        UINT RES3 					: 2;
        UINT WP_GRP_ENABLE 			: 1;	   // Bits 31-0

        UINT WP_GRP_SIZE 			: 7;	 
        UINT SECTOR_SIZE 			: 7;
	    UINT ERASE_BLK_EN 			: 1;   
        UINT C_SIZE_MULT 			: 3;
        UINT VDD_W_CURR_MAX 		: 3;
        UINT VDD_W_CURR_MIN 		: 3;
        UINT VDD_R_CURR_MAX 		: 3;
        UINT VDD_R_CURR_MIN 		: 3;
		UINT C_SIZE 				: 2;      // Bits 63-32
 
        UINT C_SIZEx 				: 10;		   
        UINT RES4 					: 2;
        UINT DSR_IMP 				: 1;
        UINT READ_BLK_MISALIGN 		: 1;
        UINT WRITE_BLK_MISALIGN 	: 1;
        UINT READ_BL_PARTIAL 		: 1;
        UINT READ_BL_LEN 			: 4;
        UINT CCC 					: 12;
        UINT TRAN_SPEED 			: 8;	// Bits 64-95   

        UINT NSAC 					: 8;              
        UINT TAAC 					: 8;
        UINT RES5 					: 6;
        UINT CSD_STRUCTURE 			: 2;
    
   
 
}SDCSD;

EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
	UINT32 qb[4];
	SDCSD sd_csd;
} XsSD_CSD;

typedef struct {
		UINT NU : 1;	// 0- 31
		UINT CRC : 7;
		UINT MDT : 12;
		UINT RES1 : 4;
		UINT PSN : 8;

		UINT PSNx : 24;	 // 32- 63
		UINT PRV : 8;
		
		UINT PNM : 32;  // 64-96

		UINT PNMx : 8;	  //96 - 127
		UINT OID : 16;
		UINT MID : 8;
}SDCID;

EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
	UINT32 qb[4];
	SDCID sd_cid;
} XsSD_CID;

typedef struct {
	UINT STATUS : 16;
	UINT PRCA : 16;
}RCA;

EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
	UINT32 qb[4];
	RCA rca;
} XsSD_RCA;

typedef struct {
		UINT SCR_STRUCTURE : 4;
		UINT SD_SPEC : 4;
		UINT DATA_STAT_AFTER_ERASE : 1;
		UINT SD_SECURITY : 3;
		UINT SD_BUS_WIDTH : 4;
		UINT RES2 : 16;
		UINT RES1 : 32;	// RESERVED FOR MANUFACTURER
}SCR;//SCR scr;
 
EXTERN union {
    UINT32 qb[2];
	SCR scr;
}XsSD_SCR;

typedef struct {
		UINT SZ_PROC : 32;
		UINT SD_CARD_TYPE : 16;
		UINT RES2 : 13;
		UINT SECD_MODE : 1;
		UINT DAT_BUS_WIDTH : 2;
} STATUS;

EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
	STATUS status;
} XsSD_STATUS;

EXTERN union {
    UINT8 b[16];
    UINT16 db[8];
} XsMMCSD_OCR;

EXTERN union {
    UINT8 b[18];
    UINT16 db[9];
} XsMMC_RES;

typedef enum
{
  DNONE=0,
  WRITE,
  READ
}dataDirection;

typedef struct
{
	UINT CMD;
	UINT ADDR;
	UINT FSIZE;
	UINT BSIZE;
	UINT RATE;
	UINT NOB;
	UINT DATATRANS;
	BOOL BUSY;
	BOOL READSCR;

}mmcStack;

#define SO_SCR 			0x8;  // size of sd scr register
#define SO_BLOCK 		0x200;
#define RCA_MMC_CARD 	0x420000;
#define CMD1_ADDR 		0x200000;

typedef struct{
	UINT32 lresponse[4];
	UINT32 sresponse;
	UINT32 status;
}STATRES;

typedef	struct{
	UINT32 block;
	UINT32 *buffer;
	UINT size;
	BOOL mmc;
	UINT32 OCR;
	UINT32 rca;
	MMCCSD *mmc_csd;
	MMCCID *mmc_cid;
	SCR *sd_scr;
	STATUS sd_status;
}MMCSDAttribT;


#define MMCSD_CARD_STATUS_OOR		(1u<<31)		// out of range
#define MMCSD_CARD_STATUS_AE		(1u<<30)	// address error 
#define MMCSD_CARD_STATUS_EP		(1u<<27)	// erase param
#define MMCSD_CARD_STATUS_WPV		(1u<<26)	// write protected block
#define MMCSD_CARD_STATUS_CL		(1u<<25)	// card locked
#define MMCSD_CARD_STATUS_ERR		(1u<<19) 	// general error
#define MMCSD_CARD_STATUS_CS		(0xfu<<9)  	// current state
#define MMCSD_CARD_STATUS_RFD		(1u<<8)  	// ready for data
#define MMCSD_CARD_STATUS_AC		(1u<<5)	 	//  app command

#define MMCSD_CARD_OCR_nBUSY		(1u<<31)	 	//  app command

// this is the structure of the status response defined in the LLD
 
#define  MMCSD_STAT_TOR					XLLP_STAT_TORD		 	    
#define  MMCSD_STAT_TORSPN      		XLLP_STAT_TORSPNS	  		
#define  MMCSD_STAT_CRCWRER 			XLLP_STAT_CRCWRERR	 	    
#define  MMCSD_STAT_CRCRDERR			XLLP_STAT_CRCRDERR	     					
#define  MMCSD_STAT_DATAERRTKN			XLLP_STAT_DATAERRTKN  	   
#define  MMCSD_STAT_RESCRCERR			XLLP_STAT_RESCRCERR	 	
#define  MMCSD_STAT_FLASHERR			(1u<<6)	    	
#define  MMCSD_STAT_CARD_ERR			(1u<<8)
#define  MMCSD_STAT_CARD_LOCKED			(1u<<9)
#define  MMCSD_STAT_WP_VIOLATION		(1u<<10)
#define  MMCSD_STAT_ERASE_PARAM			(1u<<11)
#define  MMCSD_STAT_ADDRESS_ERR			(1u<<12)
#define  MMCSD_STAT_OUT_OF_RANGE		(1u<<13)
#define  MMCSD_STAT_CARD_BUSY			(1u<<14)	    	
#define  MMCSD_STAT_CURRENT_CARD_STATE 	(0xfu<<28)


#undef EXTERN

/*
*******************************************************************************
*                            FUNCTION PROTOTYPES
*******************************************************************************
*/
void mmcInterruptServiceRoutine(void);
// Init MMC internal variables.
void XsMMCSWInit(void);

// Setup the MMC controller
ErrorT XsMMCHWSetup(void);

// Shutdown the MMC controller
ErrorT XsMMCHWShutdown(void);
UINT MMCSDAttribGet(MMCSDAttribT *mmcsdAttribT);

ErrorT XsMMCWrite(MMCSDAttribT *mmcsdAttribT);
ErrorT XsMMCRead(MMCSDAttribT *mmcsdAttribT);
UINT32 MMCSDStatusGet(MMCSDAttribT *mmcsdAttribT);


#define versionNumber 0x1

#endif  // _XSMMC_H

⌨️ 快捷键说明

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