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

📄 sdcard.h

📁 S3C2450BSP开发包,里面有很多资料。可以提供大家参考下。有什么需要解决问题。可以联系我QQ:314661
💻 H
📖 第 1 页 / 共 2 页
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

// DO NOT REMOVE --- BEGIN EXTERNALLY DEVELOPED SOURCE CODE ID 40973--- DO NOT REMOVE

// Header file for data types and definitions from the SD Card specification

#ifndef _SD_CARD_H_
#define _SD_CARD_H_

// SD card bus commands
#define SD_CMD_GO_IDLE_STATE        0       // CMD0
#define SD_CMD_MMC_SEND_OPCOND      1       // CMD1
#define SD_CMD_ALL_SEND_CID         2       // CMD2
#define SD_CMD_MMC_SET_RCA          3       // CMD3
#define SD_CMD_SEND_RELATIVE_ADDR   3       // CMD3
#define SD_CMD_SET_DSR              4       // CMD4
#define SD_CMD_IO_OP_COND           5       // CMD5
#define SD_CMD_SWITCH_FUNCTION      6       // CMD6
#define SD_CMD_SELECT_DESELECT_CARD 7       // CMD7
#define SD_CMD_SEND_IF_COND         8       // CMD8

#ifdef _MMC_SPEC_42_
// Date : 07.05.14
// Developer : HS.JANG
// Description : It is needed to get EXT_CSD register Info
#define MMC_CMD_SEND_EXT_CSD        8		// CMD8
#endif

#define SD_CMD_SEND_CSD             9       // CMD9
#define SD_CMD_SEND_CID             10      // CMD10
#define SD_CMD_STOP_TRANSMISSION    12      // CMD12
#define SD_CMD_SEND_STATUS          13      // CMD13
#define SD_CMD_GO_INACTIVE_STATE    15      // CMD15
#define SD_CMD_SET_BLOCKLEN         16      // CMD16
#define SD_CMD_READ_SINGLE_BLOCK    17      // CMD17
#define SD_CMD_READ_MULTIPLE_BLOCK  18      // CMD18

#ifdef _FOR_MOVI_NAND_
// Date : 07.05.14
// Developer : HS.JANG
// Description : It is needed to use Pre-Define
#define MMC_CMD_SET_BLOCK_LENGTH    23		// CMD23 
#endif

#define SD_CMD_WRITE_BLOCK          24       // CMD24
#define SD_CMD_WRITE_MULTIPLE_BLOCK 25       // CMD25
#define SD_CMD_PROGRAM_CSD          27       // CMD27
#define SD_CMD_SET_WRITE_PROT       28       // CMD28
#define SD_CMD_CLR_WRITE_PROT       29       // CMD29
#define SD_CMD_SEND_WRITE_PROT      30       // CMD30
#define SD_CMD_ERASE_WR_BLK_START   32       // CMD32
#define SD_CMD_ERASE_WR_BLK_END     33       // CMD33
#define SD_CMD_ERASE                38       // CMD38
#define SD_CMD_LOCK_UNLOCK          42       // CMD42
#define SD_CMD_IO_RW_DIRECT         52       // CMD52
#define SD_CMD_IO_RW_EXTENDED       53       // CMD53
#define SD_CMD_APP_CMD              55       // CMD55
#define SD_CMD_GEN_CMD              56       // CMD56

// command packet byte indexes
#define SD_COMMAND_BYTE_INDEX           5   // command is byte 5
#define SD_COMMAND_ARG_BYTE0_INDEX      1   // argument byte 0 is in byte 1
#define SD_COMMAND_ARG_BYTE1_INDEX      2   // argument byte 1 is in byte 2
#define SD_COMMAND_ARG_BYTE2_INDEX      3   // argument byte 2 is in byte 3
#define SD_COMMAND_ARG_BYTE3_INDEX      4   // argument byte 3 is in byte 4

// application Specific commands
#define SD_ACMD_SET_BUS_WIDTH               6
#define SD_ACMD_SD_STATUS                   13
#define SD_ACMD_SEND_NUM_WR_BLOCKS          22
#define SD_ACMD_SET_WR_BLOCK_ERASE_COUNT    23
#define SD_ACMD_SD_SEND_OP_COND             41
#define SD_ACMD_SET_CLR_CARD_DETECT         42
#define SD_ACMD_SEND_SCR                    51

// arg definition for ACMD SET_BUS_WIDTH
#define SD_ACMD_ARG_SET_BUS_4BIT            0x00000002

// SDIO commands
#define SD_IO_RW_DIRECT                 SD_CMD_IO_RW_DIRECT
#define SD_IO_RW_EXTENDED               SD_CMD_IO_RW_EXTENDED

    // CMD53 Bits
#define SD_CMD53_RW_MASK                0x80000000
#define SD_CMD53_READ_OP                0
#define SD_CMD53_WRITE_OP               SD_CMD53_RW_MASK
#define SD_CMD53_FUNCTION_NUMBER        0x70000000
#define SD_CMD53_BLOCK_MODE             0x08000000
#define SD_CMD53_OPCODE                 0x04000000
#define SD_CMD53_REGISTER_ADDRESS       0x03fffe00
#define SD_CMD53_REGISTER_ADDRESS_POS   9
#define SD_CMD53_BLOCK_COUNT            (( 1 << SD_CMD53_REGISTER_ADDRESS_POS ) - 1 )

// card status bits
#define SD_STATUS_OUT_OF_RANGE          0x80000000
#define SD_STATUS_ADDRESS_ERROR         0x40000000
#define SD_STATUS_BLOCK_LEN_ERROR       0x20000000
#define SD_STATUS_ERASE_SEQ_ERROR       0x10000000
#define SD_STATUS_ERASE_PARAM           0x08000000
#define SD_STATUS_WP_VIOLATION          0x04000000
#define SD_STATUS_CARD_IS_LOCKED        0x02000000
#define SD_STATUS_LOCK_UNLOCK_FAILED    0x01000000
#define SD_STATUS_COM_CRC_ERROR         0x00800000
#define SD_STATUS_ILLEGAL_COMMAND       0x00400000
#define SD_STATUS_CARD_ECC_FAILED       0x00200000
#define SD_STATUS_CC_ERROR              0x00100000
#define SD_STATUS_ERROR                 0x00080000
#define SD_STATUS_CID_CSD_OVERWRITE     0x00010000
#define SD_STATUS_WP_ERASE_SKIP         0x00008000
#define SD_STATUS_CARD_ECC_DISABLED     0x00004000
#define SD_STATUS_ERASE_RESET           0x00002000

#define SD_STATUS_CURRENT_STATE_MASK    0x00001E00
#define SD_STATUS_CURRENT_STATE_SHIFT   9
#define SD_STATUS_CURRENT_STATE(sd_status) \
    (((sd_status)&SD_STATUS_CURRENT_STATE_MASK)>>SD_STATUS_CURRENT_STATE_SHIFT)

// states pulled out from the status word
#define SD_STATUS_CURRENT_STATE_IDLE    0
#define SD_STATUS_CURRENT_STATE_READY   1
#define SD_STATUS_CURRENT_STATE_IDENT   2
#define SD_STATUS_CURRENT_STATE_STDBY   3
#define SD_STATUS_CURRENT_STATE_TRAN    4
#define SD_STATUS_CURRENT_STATE_DATA    5
#define SD_STATUS_CURRENT_STATE_RCV     6
#define SD_STATUS_CURRENT_STATE_PRG     7
#define SD_STATUS_CURRENT_STATE_DIS     8

#define SD_STATUS_READY_FOR_DATA    0x00000100
#define SD_STATUS_APP_CMD           0x00000020
#define SD_STATUS_AKE_SEQ_ERROR     0x00000008

#define SD_STATUS_ERROR_MASK        0xFFF90008
#define SD_CARD_STATUS_SUCCESS(s)   (0 == ((s) & SD_STATUS_ERROR_MASK))



// defines for the SCR register
#define SCR_VERSION_1_0             0
#define SD_SCR_REGISTER_SIZE        8  // 64 bits
#define SD_SPEC_VERSION_1_0         0
#define SD_SECURITY_NONE            0
#define SD_SECURITY_PROTOCOL_1      1
#define SD_SECURITY_PROTOCOL_2      2
#define SD_BUS_WIDTH_1_BIT          0x1
#define SD_BUS_WIDTH_4_BIT          0x4

// defines for CSD register
#define SD_CSD_VERSION_1_0              0
#define SD_FILE_FORMAT_HARD_DISK_LIKE   0
#define SD_FILE_FORMAT_FLOPPY_LIKE      1
#define SD_FILE_FORMAT_UNIVERSAL        2
#define SD_FILE_FORMAT_OTHER            3

// define for the OCR register
#define SD_OCR_REGISTER_SIZE            4 // 32 bits
#define SD_IO_OCR_REGISTER_SIZE         3 // 24 bits
#define SD_VDD_WINDOW_1_6_TO_1_7        0x00000010      // 1.6 V to 1.7 Volts
#define SD_VDD_WINDOW_1_7_TO_1_8        0x00000020      // 1.7 V to 1.8 Volts
#define SD_VDD_WINDOW_1_8_TO_1_9        0x00000040      // 1.8 V to 1.9 Volts
#define SD_VDD_WINDOW_1_9_TO_2_0        0x00000080      // 1.9 V to 2.0 Volts
#define SD_VDD_WINDOW_2_0_TO_2_1        0x00000100      // 2.0 V to 2.1 Volts
#define SD_VDD_WINDOW_2_1_TO_2_2        0x00000200      // 2.1 V to 2.2 Volts
#define SD_VDD_WINDOW_2_2_TO_2_3        0x00000400      // 2.2 V to 2.3 Volts
#define SD_VDD_WINDOW_2_3_TO_2_4        0x00000800      // 2.3 V to 2.4 Volts
#define SD_VDD_WINDOW_2_4_TO_2_5        0x00001000      // 2.4 V to 2.5 Volts
#define SD_VDD_WINDOW_2_5_TO_2_6        0x00002000      // 2.5 V to 2.6 Volts
#define SD_VDD_WINDOW_2_6_TO_2_7        0x00004000      // 2.6 V to 2.7 Volts
#define SD_VDD_WINDOW_2_7_TO_2_8        0x00008000      // 2.7 V to 2.8 Volts
#define SD_VDD_WINDOW_2_8_TO_2_9        0x00010000      // 2.8 V to 2.9 Volts
#define SD_VDD_WINDOW_2_9_TO_3_0        0x00020000      // 2.9 V to 3.0 Volts
#define SD_VDD_WINDOW_3_0_TO_3_1        0x00040000      // 3.0 V to 3.1 Volts
#define SD_VDD_WINDOW_3_1_TO_3_2        0x00080000      // 3.1 V to 3.2 Volts
#define SD_VDD_WINDOW_3_2_TO_3_3        0x00100000      // 3.2 V to 3.3 Volts
#define SD_VDD_WINDOW_3_3_TO_3_4        0x00200000      // 3.3 V to 3.4 Volts
#define SD_VDD_WINDOW_3_4_TO_3_5        0x00400000      // 3.4 V to 3.5 Volts
#define SD_VDD_WINDOW_3_5_TO_3_6        0x00800000      // 3.5 V to 3.6 Volts
#define SD_CARD_POWER_UP_STATUS         0x80000000      // powerup finished indicator

// define for SWITCH_FUNCTION CMD6.
#define SD_SWITCH_FUNCTION_DATA_SIZE    (512/8)

// defines for SD IO Function Basic Information registers
#define SD_IO_NON_STANDARD_DEVICE_CODE  0

// defines for CIS tuples       
#define SD_CISTPL_NULL                  0x00
#define SD_CISTPL_CHECKSUM              0x10
#define SD_CISTPL_VERS_1                0x15
#define SD_CISTPL_ALTSTR                0x16
#define SD_CISTPL_MANFID                0x20
#define SD_CISTPL_FUNCID                0x21
#define SD_CISTPL_FUNCE                 0x22
#define SD_CISTPL_SDIO_STD              0x91
#define SD_CISTPL_SDIO_EXT              0x92
#define SD_CISTPL_END                   0xFF
#define SD_TUPLE_LINK_END               0xFF

#define SD_CISTPLE_MAX_BODY_SIZE        256
#define SD_CISTPL_FUNCID_BODY_SIZE      2
#define SD_CISTPL_MANFID_BODY_SIZE      4


#define SD_CISTPL_FUNCE_COMMON_TYPE     0x00
#define SD_CISTPL_FUNCE_FUNCTION_TYPE   0x01

#include <pshpack1.h>
typedef struct _SD_CISTPL_FUNCE_FUNCTION {
    BYTE  bType;
    union {
        struct {
            BYTE FN_WUS : 1;
        };
        BYTE  bFunctionInfo;
    };
    BYTE  bStdIORev;
    DWORD dwCardPSN;
    DWORD dwCSASize;
    BYTE  bCSAProperty;
    WORD  wMaxBlkSize;
    DWORD dwOCR;
    BYTE  bOpMinPwr;
    BYTE  bOpAvgPwr;
    BYTE  bOpMaxPwr;
    BYTE  bSbMinPwr;
    BYTE  bSbAvgPwr;
    BYTE  bSbMaxPwr;
    WORD  wMinBw;
    WORD  wOptBw;
}SD_CISTPL_FUNCE_FUNCTION, *PSD_CISTPL_FUNCE_FUNCTION;
#include <poppack.h>


// SD card status
typedef DWORD SD_CARD_STATUS;

// defines for Card IDentification (CID) register.
#define SD_CID_REGISTER_SIZE    16  // 128 bits
#define SD_CID_PSN_OFFSET       3
#define SD_CID_PRV_OFFSET       7
#define SD_CID_PNM_OFFSET       8
#define SD_CID_OID_OFFSET       13
#define SD_CID_MID_OFFSET       15
#define SD_CID_MDT_OFFSET       1
#define SD_CID_MONTH_MASK       0x0F
#define SD_CID_YEAR0_MASK       0xF0
#define SD_CID_YEAR_SHIFT       4
// some of the CID definitions are different for MMC cards...
#define MMC_CID_MDT_OFFSET      1
#define MMC_CID_PSN_OFFSET      2
#define MMC_CID_PRV_OFFSET      6
#define MMC_CID_PNM_OFFSET      7
#define MMC_CID_MONTH_MASK      0xF0
#define MMC_CID_YEAR_MASK       0x0F
#define MMC_CID_MONTH_SHIFT     4

// macros for Card Specific Data (CSD) register.
#define SD_CSD_REGISTER_SIZE                16      // 128 bits

// bit slice definitions
#define SD_CSD_VERSION_BIT_SLICE            126
#define SD_CSD_VERSION_SLICE_SIZE           2

#ifdef _MMC_SPEC_42_
// Date : 07.05.14
// Developer : HS.JANG
// Description : It is needed to get CSD Spec register Info
#define SD_CSD_SPEC_VERSION_BIT_SLICE       122  // 122 ~ 125 bits of CSD register 
#define SD_CSD_SPEC_VERSION_SLICE_SIZE      4  // contain spec. version information 

⌨️ 快捷键说明

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