?? sdcard.h
字號(hào):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
// Copyright (c) 2002-2004 BSQUARE Corporation. All rights reserved.
// 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 it is for SPEC 2.0
#ifdef _MMC_SPEC_42_
#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
#ifdef _MMC_SPEC_42_
#define MMC_CMD_READ_BUSTEST 14 // CMD14
#endif
#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 _MMC_SPEC_42_
#define MMC_CMD_WRITE_BUSTEST 19 // CMD19
#define MMC_CMD_SET_BLOCK_LENGTH 23 // CMD23
#endif
#define SD_CMD_SET_BLOCK_COUNT 23 // CMD23
#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
#ifdef _MMC_SPEC_42_
#define MMC_ACMD_ARG_SET_HIGHSPEED 0x03b90100 // (3<<24)|(185<<16)|(1<<8)
#define MMC_ACMD_ARG_SET_BUS_8BIT 0x03b70200 // (3<<24)|(183<<16)|(2<<8)
#define MMC_ACMD_ARG_SET_BUS_4BIT 0x03b70100 // (3<<24)|(183<<16)|(1<<8)
#define MMC_ACMD_ARG_SET_BUS_1BIT 0x03b70000 // (3<<24)|(183<<16)|(0<<8)
#define SD_ACMD_ARG_GET_TRANS_SPEED ((0x1<<31)|(0xFFFF<<8)|(1<<0))
#endif
// 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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -