@@ -23,7 +23,8 @@ arguments that might need to be set in order to use either a non-standard slot
2323or a non-standard pin assignment. The exact subset of arguments supported will
2424vary from platform to platform.
2525
26- .. class :: SDCard(slot=1, width=1, cd=None, wp=None, sck=None, miso=None, mosi=None, cs=None, freq=20000000)
26+ .. class :: SDCard(slot=1, width=1, cd=None, wp=None, sck=None, miso=None, mosi=None,
27+ cs=None, cmd=None, data=None, freq=20000000)
2728
2829 This class provides access to SD or MMC storage cards using either
2930 a dedicated SD/MMC interface hardware or through an SPI channel.
@@ -37,7 +38,8 @@ vary from platform to platform.
3738 - *slot * selects which of the available interfaces to use. Leaving this
3839 unset will select the default interface.
3940
40- - *width * selects the bus width for the SD/MMC interface.
41+ - *width * selects the bus width for the SD/MMC interface. This many data
42+ pins must be connected to the SD card.
4143
4244 - *cd * can be used to specify a card-detect pin.
4345
@@ -51,7 +53,14 @@ vary from platform to platform.
5153
5254 - *cs * can be used to specify an SPI chip select pin.
5355
54- - *freq * selects the SD/MMC interface frequency in Hz (only supported on the ESP32).
56+ The following additional parameters are only present on ESP32 port:
57+
58+ - *cmd * can be used to specify the SD CMD pin (ESP32-S3 only).
59+
60+ - *data * can be used to specify a list or tuple of SD data bus pins
61+ (ESP32-S3 only).
62+
63+ - *freq * selects the SD/MMC interface frequency in Hz.
5564
5665Implementation-specific details
5766-------------------------------
@@ -67,52 +76,106 @@ The standard PyBoard has just one slot. No arguments are necessary or supported.
6776ESP32
6877`````
6978
70- The ESP32 provides two channels of SD/MMC hardware and also supports
71- access to SD Cards through either of the two SPI ports that are
72- generally available to the user. As a result the *slot * argument can
73- take a value between 0 and 3, inclusive. Slots 0 and 1 use the
74- built-in SD/MMC hardware while slots 2 and 3 use the SPI ports. Slot 0
75- supports 1, 4 or 8-bit wide access while slot 1 supports 1 or 4-bit
76- access; the SPI slots only support 1-bit access.
77-
78- .. note :: Slot 0 is used to communicate with on-board flash memory
79- on most ESP32 modules and so will be unavailable to the
80- user.
81-
82- .. note :: Most ESP32 modules that provide an SD card slot using the
83- dedicated hardware only wire up 1 data pin, so the default
84- value for *width * is 1.
85-
86- The pins used by the dedicated SD/MMC hardware are fixed. The pins
87- used by the SPI hardware can be reassigned.
88-
89- .. note :: If any of the SPI signals are remapped then all of the SPI
90- signals will pass through a GPIO multiplexer unit which
91- can limit the performance of high frequency signals. Since
92- the normal operating speed for SD cards is 40MHz this can
93- cause problems on some cards.
94-
95- The default (and preferred) pin assignment are as follows:
96-
97- ====== ====== ====== ====== ======
98- Slot 0 1 2 3
99- ------ ------ ------ ------ ------
100- Signal Pin Pin Pin Pin
101- ====== ====== ====== ====== ======
102- sck 6 14 18 14
103- cmd 11 15
104- cs 5 15
105- miso 19 12
106- mosi 23 13
107- D0 7 2
108- D1 8 4
109- D2 9 12
110- D3 10 13
111- D4 16
112- D5 17
113- D6 5
114- D7 18
115- ====== ====== ====== ====== ======
79+ SD cards support access in both SD/MMC mode and the simpler (but slower) SPI
80+ mode. ESP32 and ESP32-S3 chips can access SD cards using either mode. SPI mode
81+ makes use of a `SPI ` host peripheral, which cannot concurrently be used for
82+ something else.
83+
84+ The ``slot `` argument determines which mode is used. Different values are
85+ available on different chips:
86+
87+ ====== ================= ============ ========================
88+ Slot Supported chips Mode Supported data width
89+ ====== ================= ============ ========================
90+ 0 ESP32-S3 SD/MMC 1, 4, or 8 bits.
91+ 1 ESP32, ESP32-S3 SD/MMC 1 or 4 bits.
92+ 2 ESP32, ESP32-S3 `SPI ` (id=1) 1 bit.
93+ 3 ESP32, ESP32-S3 `SPI ` (id=0) 1 bit.
94+ ====== ================= ============ ========================
95+
96+ .. note :: On the original ESP32, SDMMC slot 0 is unavailable as its pins are
97+ used to communicate with on-board flash memory.
98+
99+ .. note :: Most ESP32 modules that provide an SD card slot using the
100+ dedicated hardware only wire up 1 data pin, so the default
101+ value for ``width `` is 1.
102+
103+ Additional details depend on which ESP32 family chip is in use:
104+
105+ Original ESP32
106+ ~~~~~~~~~~~~~~
107+
108+ Pin assignments in SD/MMC mode are fixed on the original ESP32. When accessing a
109+ card in SPI mode, pins can be set to different values in the constructor.
110+
111+ The default pin assignments are as follows:
112+
113+ ====== ====== ====== ====== ============
114+ Slot 1 2 3 Can be set
115+ ------ ------ ------ ------ ------------
116+ Signal Pin Pin Pin
117+ ====== ====== ====== ====== ============
118+ CLK 14 No
119+ CMD 15 No
120+ D0 2 No
121+ D1 4 No
122+ D2 12 No
123+ D3 13 No
124+ sck 18 14 Yes
125+ cs 5 15 Yes
126+ miso 19 12 Yes
127+ mosi 23 13 Yes
128+ ====== ====== ====== ====== ============
129+
130+ The ``cd `` and ``wp `` pins are not fixed in either mode and default to disabled, unless set.
131+
132+ ESP32-S3
133+ ~~~~~~~~
134+
135+ The ESP32-S3 chip allows pins to be set to different values for both SD/MMC and
136+ SPI mode access.
137+
138+ If not set, default pin assignments are as follows:
139+
140+ ======== ====== ====== ====== ======
141+ Slot 0 1 2 3
142+ -------- ------ ------ ------ ------
143+ Signal Pin Pin Pin Pin
144+ ======== ====== ====== ====== ======
145+ CLK 14 14
146+ CMD 15 15
147+ D0 2 2
148+ D1 4 4
149+ D2 12 12
150+ D3 13 13
151+ D4 33*
152+ D5 34*
153+ D6 35*
154+ D7 36*
155+ sck 37* 14
156+ cs 34* 13
157+ miso 37* 2
158+ mosi 35* 15
159+ ======== ====== ====== ====== ======
160+
161+ .. note :: Slots 0 and 1 cannot both be in use at the same time.
162+
163+ .. note :: Pins marked with an asterisk * in the table must be changed from the
164+ default if the ESP32-S3 board is configured for Octal SPI Flash or
165+ PSRAM.
166+
167+ To access a card in SD/MMC mode, set ``slot `` parameter value 0 or 1 and
168+ parameters ``sck `` (for CLK), ``cmd `` and ``data `` as needed to assign pins. If
169+ the ``data `` argument is passed then it should be a list or tuple of data pins
170+ or pin numbers with length equal to the ``width `` argument. For example::
171+
172+ sd = SDCard(slot=0, width=4, sck=8, cmd=9, data=(10, 11, 12, 13))
173+
174+ To access a card in SPI mode, set ``slot `` parameter value 2 or 3 and pass
175+ parameters ``sck ``, ``cs ``, ``miso ``, ``mosi `` as needed to assign pins.
176+
177+ In either mode the ``cd `` and ``wp `` pins default to disabled, unless set in the
178+ constructor.
116179
117180cc3200
118181``````
0 commit comments