@@ -12,7 +12,7 @@ http://www.arduino.cc/en/Reference/SD
1212
1313## Dependency
1414
15- This library is based on FatFs, a generic FAT file system module for small embedded systems.
15+ This library is based on FatFs, a generic FAT file system module for small embedded systems.
1616[ http://elm-chan.org/fsw/ff ] ( http://elm-chan.org/fsw/ff/00index_e.html )
1717
1818The FatFs has been ported as Arduino library [ here] ( https://github.com/stm32duino/FatFs ) .
@@ -31,11 +31,105 @@ User can provide his own defined options by adding his configuration in a file n
3131### SD
3232
3333Some default definitions can be overridden using:
34- * board ` variant.h `
35- * ` build_opt.h ` : see [ Customize build options] ( https://github.com/stm32duino/wiki/wiki/Customize-build-options-using-build_opt.h )
36-
37- * ` hal_conf_extra.h ` : see [ HAL configuration] ( https://github.com/stm32duino/wiki/wiki/HAL-configuration )
38-
34+ * board ` variant*.h `
35+ * ` build_opt.h ` : see [ Customize build options] ( https://github.com/stm32duino/Arduino_Core_STM32/wiki/Customize-build-options-using-build_opt.h )
36+
37+ * ` hal_conf_extra.h ` : see [ HAL configuration] ( https://github.com/stm32duino/Arduino_Core_STM32/wiki/HAL-configuration )
38+
39+ #### SDIO/SDMMC pins definition
40+
41+ Since STM32 core v2.6.0, the ` PinMap_SD[] ` array defined in the ` PeripheralPins*.c ` has been split per signals:
42+ ``` C
43+ PinMap_SD_CK[]
44+ PinMap_SD_DATA0[]
45+ PinMap_SD_DATA1[]
46+ PinMap_SD_DATA2[]
47+ PinMap_SD_DATA3[]
48+ PinMap_SD_DATA4[]
49+ PinMap_SD_DATA5[]
50+ PinMap_SD_DATA6[]
51+ PinMap_SD_DATA7[]
52+ /* Only for SDMMC */
53+ PinMap_SD_CKIN[]
54+ PinMap_SD_CDIR[]
55+ PinMap_SD_D0DIR[]
56+ PinMap_SD_D123DIR[]
57+ ```
58+
59+ This allows to define the SDIO/SDMMC pins to use instead of using all the pins defined in the old array.
60+ By default, if no pins are explicitly defined, the first one from each array is used.
61+
62+ * To redefine the default one, use the following macros:
63+
64+ * ` SDX_D0 `
65+ * ` SDX_D1 `
66+ * ` SDX_D2 `
67+ * ` SDX_D3 `
68+ * ` SDX_CMD `
69+ * ` SDX_CK `
70+
71+ * Only for ` SDMMC ` :
72+ * ` SDX_CKIN `
73+ * ` SDX_CDIR `
74+ * ` SDX_D0DIR `
75+ * ` SDX_D123DIR `
76+
77+ * or redefine the default one before call of ` begin() ` of ` SDClass ` or ` init() ` of ` Sd2Card ` , use the following methods:
78+
79+ * ` setDx(uint32_t data0, uint32_t data1, uint32_t data2, uint32_t data3) `
80+ * ` setCK(uint32_t ck) `
81+ * ` setCK(PinName ck) `
82+ * ` setCMD(uint32_t cmd) `
83+ * ` setCMD(PinName cmd) `
84+
85+ * Only for ` SDMMC ` :
86+ * ` setCKIN(uint32_t ckin) `
87+ * ` setCKIN(PinName ckin) `
88+ * ` setCDIR(uint32_t cdir) `
89+ * ` setCDIR(PinName cdir) `
90+ * ` setDxDIR(uint32_t d0dir, uint32_t d123dir) `
91+ * ` setDxDIR(PinName d0dir, PinName d123dir) `
92+
93+ * Code snippet:*
94+ ``` C++
95+ Sd2Card card;
96+ card.setDx(PE12, PE13, PE14, PE15);
97+ card.setCMD(PB_14); // using PinName
98+ card.setCK(PB15);
99+ card.init();
100+ ```
101+ or
102+ ``` C++
103+ SD.setDx(PE12, PE13, PE14, PE15);
104+ SD.setCMD(PB14);
105+ SD.setCK(PB_15); // using PinName
106+ SD.begin();
107+ ```
108+
109+ * or using the ` begin() ` of ` SDClass ` or ` init() ` of ` Sd2Card ` methods:
110+
111+ * For ` SDIO ` :
112+ * ` SDClass ` :
113+ * ` begin(uint32_t data0, uint32_t data1, uint32_t data2, uint32_t data3, uint32_t ck, uint32_t cmd) `
114+ * ` begin(uint32_t detect = SD_DETECT_NONE, uint32_t data0 = SDX_D0, uint32_t data1 = SDX_D1, uint32_t data2 = SDX_D2, uint32_t data3 = SDX_D3, uint32_t ck = SDX_CK, uint32_t cmd = SDX_CMD, uint32_t ckin = SDX_CKIN, uint32_t cdir = SDX_CDIR, uint32_t d0dir = SDX_D0DIR, uint32_t d123dir = SDX_D123DIR); `
115+ * ` Sd2Card ` :
116+ * ` init(uint32_t data0, uint32_t data1, uint32_t data2, uint32_t data3, uint32_t ck, uint32_t cmd) `
117+ * ` init(uint32_t detect = SD_DETECT_NONE, uint32_t data0 = SDX_D0, uint32_t data1 = SDX_D1, uint32_t data2 = SDX_D2, uint32_t data3 = SDX_D3, uint32_t ck = SDX_CK, uint32_t cmd = SDX_CMD); `
118+
119+ * For ` SDMMC ` :
120+ * ` SDClass ` :
121+ * ` begin(uint32_t data0, uint32_t data1, uint32_t data2, uint32_t data3, uint32_t ck, uint32_t cmd, uint32_t ckin, uint32_t cdir, uint32_t d0dir, uint32_t d123dir); `
122+ * ` begin(uint32_t detect = SD_DETECT_NONE, uint32_t data0 = SDX_D0, uint32_t data1 = SDX_D1, uint32_t data2 = SDX_D2, uint32_t data3 = SDX_D3, uint32_t ck = SDX_CK, uint32_t cmd = SDX_CMD, uint32_t ckin = SDX_CKIN, uint32_t cdir = SDX_CDIR, uint32_t d0dir = SDX_D0DIR, uint32_t d123dir = SDX_D123DIR); `
123+ *
124+ * * ` Sd2Card ` :
125+ * ` init(uint32_t data0 = SDX_D0, uint32_t data1 = SDX_D1, uint32_t data2 = SDX_D2, uint32_t data3 = SDX_D3, uint32_t ck = SDX_CK, uint32_t cmd = SDX_CMD, uint32_t ckin = SDX_CKIN, uint32_t cdir = SDX_CDIR, uint32_t d0dir = SDX_D0DIR, uint32_t d123dir = SDX_D123DIR) `
126+ * ` init(uint32_t detect = SD_DETECT_NONE, uint32_t data0 = SDX_D0, uint32_t data1 = SDX_D1, uint32_t data2 = SDX_D2, uint32_t data3 = SDX_D3, uint32_t ck = SDX_CK, uint32_t cmd = SDX_CMD, uint32_t ckin = SDX_CKIN, uint32_t cdir = SDX_CDIR, uint32_t d0dir = SDX_D0DIR, uint32_t d123dir = SDX_D123DIR); `
127+
128+ * Code snippet:*
129+ ``` C++
130+ card.init(PE12, PE13, PE14, PE15, PB14, PB15);
131+ SD.begin(SD_DETECT_PIN, PE12, PE13, PE14, PE15, PB14, PB15);
132+ ```
39133
40134#### SD configurations
41135
@@ -68,4 +162,4 @@ Some default definitions can be overridden using:
68162#### SD detect and timeout
69163* ` SD_DETECT_PIN ` pin number
70164
71- * ` SD_DATATIMEOUT ` constant for Read/Write block
165+ * ` SD_DATATIMEOUT ` constant for Read/Write block
0 commit comments