summaryrefslogtreecommitdiff
path: root/decoders/common/sdcard/mod.py
blob: cc9d70d87dce49e20c47447ac71c9ef8ca8b87c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
##
## This file is part of the libsigrokdecode project.
##
## Copyright (C) 2012-2014 Uwe Hermann <uwe@hermann-uwe.de>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, see <http://www.gnu.org/licenses/>.
##

# Normal commands (CMD)
# Unlisted items are 'Reserved' as per SD spec. The 'Unknown' items don't
# seem to be mentioned in the spec, but aren't marked as reserved either.
cmd_names = {
    0:  'GO_IDLE_STATE',
    1:  'SEND_OP_COND', # Reserved in SD mode
    2:  'ALL_SEND_CID',
    3:  'SEND_RELATIVE_ADDR',
    4:  'SET_DSR',
    5:  'IO_SEND_OP_COND', # SDIO-only
    6:  'SWITCH_FUNC', # New since spec 1.10
    7:  'SELECT/DESELECT_CARD',
    8:  'SEND_IF_COND',
    9:  'SEND_CSD',
    10: 'SEND_CID',
    11: 'VOLTAGE_SWITCH',
    12: 'STOP_TRANSMISSION',
    13: 'SEND_STATUS',
    # 14: Reserved
    15: 'GO_INACTIVE_STATE',
    16: 'SET_BLOCKLEN',
    17: 'READ_SINGLE_BLOCK',
    18: 'READ_MULTIPLE_BLOCK',
    19: 'SEND_TUNING_BLOCK',
    20: 'SPEED_CLASS_CONTROL',
    # 21-22: Reserved
    23: 'SET_BLOCK_COUNT',
    24: 'WRITE_BLOCK',
    25: 'WRITE_MULTIPLE_BLOCK',
    26: 'Reserved for manufacturer',
    27: 'PROGRAM_CSD',
    28: 'SET_WRITE_PROT',
    29: 'CLR_WRITE_PROT',
    30: 'SEND_WRITE_PROT',
    # 31: Reserved
    32: 'ERASE_WR_BLK_START', # SPI mode: ERASE_WR_BLK_START_ADDR
    33: 'ERASE_WR_BLK_END', # SPI mode: ERASE_WR_BLK_END_ADDR
    34: 'Reserved for CMD6', # New since spec 1.10
    35: 'Reserved for CMD6', # New since spec 1.10
    36: 'Reserved for CMD6', # New since spec 1.10
    37: 'Reserved for CMD6', # New since spec 1.10
    38: 'ERASE',
    # 39: Reserved
    40: 'Reserved for security specification',
    # 41: Reserved
    42: 'LOCK_UNLOCK',
    # 43-49: Reserved
    50: 'Reserved for CMD6', # New since spec 1.10
    # 51: Reserved
    52: 'IO_RW_DIRECT', # SDIO-only
    53: 'IO_RW_EXTENDED', # SDIO-only
    54: 'Unknown',
    55: 'APP_CMD',
    56: 'GEN_CMD',
    57: 'Reserved for CMD6', # New since spec 1.10
    58: 'READ_OCR', # Reserved in SD mode
    59: 'CRC_ON_OFF', # Reserved in SD mode
    60: 'Reserved for manufacturer',
    61: 'Reserved for manufacturer',
    62: 'Reserved for manufacturer',
    63: 'Reserved for manufacturer',
}

# Application-specific commands (ACMD)
# Unlisted items are 'Reserved' as per SD spec. The 'Unknown' items don't
# seem to be mentioned in the spec, but aren't marked as reserved either.
acmd_names = {
    # 1-5: Reserved
    6:  'SET_BUS_WIDTH',
    # 7-12: Reserved
    13: 'SD_STATUS',
    14: 'Reserved for Security Application',
    15: 'Reserved for Security Application',
    16: 'Reserved for Security Application',
    # 17: Reserved
    18: 'Reserved for SD security applications',
    # 19-21: Reserved
    22: 'SEND_NUM_WR_BLOCKS',
    23: 'SET_WR_BLK_ERASE_COUNT',
    # 24: Reserved
    25: 'Reserved for SD security applications',
    26: 'Reserved for SD security applications',
    27: 'Reserved for security specification',
    28: 'Reserved for security specification',
    # 29: Reserved
    30: 'Reserved for security specification',
    31: 'Reserved for security specification',
    32: 'Reserved for security specification',
    33: 'Reserved for security specification',
    34: 'Reserved for security specification',
    35: 'Reserved for security specification',
    # 36-37: Reserved
    38: 'Reserved for SD security applications',
    # 39-40: Reserved
    41: 'SD_SEND_OP_COND',
    42: 'SET_CLR_CARD_DETECT',
    43: 'Reserved for SD security applications',
    44: 'Reserved for SD security applications',
    45: 'Reserved for SD security applications',
    46: 'Reserved for SD security applications',
    47: 'Reserved for SD security applications',
    48: 'Reserved for SD security applications',
    49: 'Reserved for SD security applications',
    50: 'Unknown',
    51: 'SEND_SCR',
    52: 'Reserved for security specification',
    53: 'Reserved for security specification',
    54: 'Reserved for security specification',
    55: 'Non-existant', # Doesn't exist (equivalent to CMD55)
    56: 'Reserved for security specification',
    57: 'Reserved for security specification',
    58: 'Reserved for security specification',
    59: 'Reserved for security specification',
    60: 'Unknown',
    61: 'Unknown',
    62: 'Unknown',
    63: 'Unknown',
}

accepted_voltages = {
    0b0001: '2.7-3.6V',
    0b0010: 'reserved for low voltage range',
    0b0100: 'reserved',
    0b1000: 'reserved',
    # All other values: "not defined".
}

card_status = {
    0:  'Reserved for manufacturer test mode',
    1:  'Reserved for manufacturer test mode',
    2:  'Reserved for application specific commands',
    3:  'AKE_SEQ_ERROR',
    4:  'Reserved for SDIO card',
    5:  'APP_CMD',
    6:  'Unknown',
    7:  'Unknown',
    8:  'READY_FOR_DATA',
    9:  'CURRENT_STATE', # CURRENT_STATE is a 4-bit value (decimal: 0..15).
    10: 'CURRENT_STATE',
    11: 'CURRENT_STATE',
    12: 'CURRENT_STATE',
    13: 'ERASE_RESET',
    14: 'CARD_ECC_DISABLED',
    15: 'WP_ERASE_SKIP',
    16: 'CSD_OVERWRITE',
    17: 'Reserved for DEFERRED_RESPONSE', # See eSD addendum
    18: 'Reserved',
    19: 'ERROR',
    20: 'CC_ERROR',
    21: 'CARD_ECC_FAILED',
    22: 'ILLEGAL_COMMAND',
    23: 'COM_CRC_ERROR',
    24: 'LOCK_UNLOCK_FAILED',
    25: 'CARD_IS_LOCKED',
    26: 'WP_VIOLATION',
    27: 'ERASE_PARAM',
    28: 'ERASE_SEQ_ERROR',
    29: 'BLOCK_LEN_ERROR',
    30: 'ADDRESS_ERROR',
    31: 'OUT_OF_RANGE',
}

sd_status = {
    # 311:0: Reserved for manufacturer
    # 391:312: Reserved
}