📄 mmcsd.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 + -