You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
9.5 KiB

4 years ago
/** @file
Header file for SD memory card support.
This header file contains some definitions defined in SD Physical Layer Simplified
Specification Version 4.10 spec.
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef __SD_H__
#define __SD_H__
//
// SD command index
//
#define SD_GO_IDLE_STATE 0
#define SD_ALL_SEND_CID 2
#define SD_SET_RELATIVE_ADDR 3
#define SD_SET_DSR 4
#define SDIO_SEND_OP_COND 5
#define SD_SWITCH_FUNC 6
#define SD_SELECT_DESELECT_CARD 7
#define SD_SEND_IF_COND 8
#define SD_SEND_CSD 9
#define SD_SEND_CID 10
#define SD_VOLTAGE_SWITCH 11
#define SD_STOP_TRANSMISSION 12
#define SD_SEND_STATUS 13
#define SD_GO_INACTIVE_STATE 15
#define SD_SET_BLOCKLEN 16
#define SD_READ_SINGLE_BLOCK 17
#define SD_READ_MULTIPLE_BLOCK 18
#define SD_SEND_TUNING_BLOCK 19
#define SD_SPEED_CLASS_CONTROL 20
#define SD_SET_BLOCK_COUNT 23
#define SD_WRITE_SINGLE_BLOCK 24
#define SD_WRITE_MULTIPLE_BLOCK 25
#define SD_PROGRAM_CSD 27
#define SD_SET_WRITE_PROT 28
#define SD_CLR_WRITE_PROT 29
#define SD_SEND_WRITE_PROT 30
#define SD_ERASE_WR_BLK_START 32
#define SD_ERASE_WR_BLK_END 33
#define SD_ERASE 38
#define SD_LOCK_UNLOCK 42
#define SD_READ_EXTR_SINGLE 48
#define SD_WRITE_EXTR_SINGLE 49
#define SDIO_RW_DIRECT 52
#define SDIO_RW_EXTENDED 53
#define SD_APP_CMD 55
#define SD_GEN_CMD 56
#define SD_READ_EXTR_MULTI 58
#define SD_WRITE_EXTR_MULTI 59
#define SD_SET_BUS_WIDTH 6 // ACMD6
#define SD_STATUS 13 // ACMD13
#define SD_SEND_NUM_WR_BLOCKS 22 // ACMD22
#define SD_SET_WR_BLK_ERASE_COUNT 23 // ACMD23
#define SD_SEND_OP_COND 41 // ACMD41
#define SD_SET_CLR_CARD_DETECT 42 // ACMD42
#define SD_SEND_SCR 51 // ACMD51
#pragma pack(1)
typedef struct {
UINT8 NotUsed:1; // Not used [0:0]
UINT8 Crc:7; // CRC [7:1]
UINT16 ManufacturingDate:12; // Manufacturing date [19:8]
UINT16 Reserved:4; // Reserved [23:20]
UINT8 ProductSerialNumber[4]; // Product serial number [55:24]
UINT8 ProductRevision; // Product revision [63:56]
UINT8 ProductName[5]; // Product name [103:64]
UINT8 OemId[2]; // OEM/Application ID [119:104]
UINT8 ManufacturerId; // Manufacturer ID [127:120]
} SD_CID;
typedef struct {
UINT32 NotUsed:1; // Not used [0:0]
UINT32 Crc:7; // CRC [7:1]
UINT32 Reserved:2; // Reserved [9:8]
UINT32 FileFormat:2; // File format [11:10]
UINT32 TmpWriteProtect:1; // Temporary write protection [12:12]
UINT32 PermWriteProtect:1; // Permanent write protection [13:13]
UINT32 Copy:1; // Copy flag (OTP) [14:14]
UINT32 FileFormatGrp:1; // File format group [15:15]
UINT32 Reserved1:5; // Reserved [20:16]
UINT32 WriteBlPartial:1; // Partial blocks for write allowed [21:21]
UINT32 WriteBlLen:4; // Max. write data block length [25:22]
UINT32 R2WFactor:3; // Write speed factor [28:26]
UINT32 Reserved2:2; // Manufacturer default ECC [30:29]
UINT32 WpGrpEnable:1; // Write protect group enable [31:31]
UINT32 WpGrpSize:7; // Write protect group size [38:32]
UINT32 SectorSize:7; // Erase sector size [45:39]
UINT32 EraseBlkEn:1; // Erase single block enable [46:46]
UINT32 CSizeMul:3; // device size multiplier [49:47]
UINT32 VddWCurrMax:3; // max. write current @VDD max [52:50]
UINT32 VddWCurrMin:3; // max. write current @VDD min [55:53]
UINT32 VddRCurrMax:3; // max. read current @VDD max [58:56]
UINT32 VddRCurrMin:3; // max. read current @VDD min [61:59]
UINT32 CSizeLow:2; // Device size low 2 bits [63:62]
UINT32 CSizeHigh:10; // Device size high 10 bits [73:64]
UINT32 Reserved4:2; // Reserved [75:74]
UINT32 DsrImp:1; // DSR implemented [76:76]
UINT32 ReadBlkMisalign:1; // Read block misalignment [77:77]
UINT32 WriteBlkMisalign:1; // Write block misalignment [78:78]
UINT32 ReadBlPartial:1; // Partial blocks for read allowed [79:79]
UINT32 ReadBlLen:4; // Max. read data block length [83:80]
UINT32 Ccc:12; // Card command classes [95:84]
UINT32 TranSpeed:8; // Max. data transfer rate [103:96]
UINT32 Nsac:8; // Data read access-time in CLK cycles (NSAC*100) [111:104]
UINT32 Taac:8; // Data read access-time [119:112]
UINT32 Reserved5:6; // Reserved [125:120]
UINT32 CsdStructure:2; // CSD structure [127:126]
} SD_CSD;
typedef struct {
UINT32 NotUsed:1; // Not used [0:0]
UINT32 Crc:7; // CRC [7:1]
UINT32 Reserved:2; // Reserved [9:8]
UINT32 FileFormat:2; // File format [11:10]
UINT32 TmpWriteProtect:1; // Temporary write protection [12:12]
UINT32 PermWriteProtect:1; // Permanent write protection [13:13]
UINT32 Copy:1; // Copy flag (OTP) [14:14]
UINT32 FileFormatGrp:1; // File format group [15:15]
UINT32 Reserved1:5; // Reserved [20:16]
UINT32 WriteBlPartial:1; // Partial blocks for write allowed [21:21]
UINT32 WriteBlLen:4; // Max. write data block length [25:22]
UINT32 R2WFactor:3; // Write speed factor [28:26]
UINT32 Reserved2:2; // Manufacturer default ECC [30:29]
UINT32 WpGrpEnable:1; // Write protect group enable [31:31]
UINT32 WpGrpSize:7; // Write protect group size [38:32]
UINT32 SectorSize:7; // Erase sector size [45:39]
UINT32 EraseBlkEn:1; // Erase single block enable [46:46]
UINT32 Reserved3:1; // Reserved [47:47]
UINT32 CSizeLow:16; // Device size low 16 bits [63:48]
UINT32 CSizeHigh:6; // Device size high 6 bits [69:64]
UINT32 Reserved4:6; // Reserved [75:70]
UINT32 DsrImp:1; // DSR implemented [76:76]
UINT32 ReadBlkMisalign:1; // Read block misalignment [77:77]
UINT32 WriteBlkMisalign:1; // Write block misalignment [78:78]
UINT32 ReadBlPartial:1; // Partial blocks for read allowed [79:79]
UINT32 ReadBlLen:4; // Max. read data block length [83:80]
UINT32 Ccc:12; // Card command classes [95:84]
UINT32 TranSpeed:8; // Max. data transfer rate [103:96]
UINT32 Nsac:8; // Data read access-time in CLK cycles (NSAC*100) [111:104]
UINT32 Taac:8; // Data read access-time [119:112]
UINT32 Reserved5:6; // Reserved [125:120]
UINT32 CsdStructure:2; // CSD structure [127:126]
} SD_CSD2;
typedef struct {
UINT32 Reserved; // Reserved [31:0]
UINT32 CmdSupport:4; // Command Support bits [35:32]
UINT32 Reserved1:6; // Reserved [41:36]
UINT32 SdSpec4:1; // Spec. Version 4.00 or higher [42:42]
UINT32 ExSecurity:4; // Extended Security Support [46:43]
UINT32 SdSpec3:1; // Spec. Version 3.00 or higher [47:47]
UINT32 SdBusWidths:4; // DAT Bus widths supported [51:48]
UINT32 SdSecurity:3; // CPRM security support [54:52]
UINT32 DataStatAfterErase:1; // Data status after erases [55]
UINT32 SdSpec:4; // SD Memory Card Spec. Version [59:56]
UINT32 ScrStructure:4; // SCR Structure [63:60]
} SD_SCR;
#pragma pack()
#endif