Il core Arduino per il chip esp32 include due librerie per la gestione di SD card:
Questo perché – come indicato nel datasheet – il chip esp32 è dotato di un host controller dedicato per SD/SDIO/MMC, in aggiunta a quello “generico” SPI.
Se adottiamo la libreria SD_MMC utilizzeremo quindi tale host controller, mentre se adottiamo la libreria SD utilizzeremo il controller SPI.
Entrambe le librerie definiscono, per i vari segnali, dei pin standard.
Una delle potenzialità del chip esp32 è però quella di poter mappare le periferiche su diversi pin. In questo breve tutorial vi mostrerò come indicare alla libreria SD quali pin vogliamo utilizzare.
Il chip mette a disposizione due interfacce SPI:
- HSPI
- VSPI
Per prima cosa dobbiamo definire una istanza della classe SPIClass, indicando quale interfaccia vogliamo utilizzare:
vspi = new SPIClass(VSPI); hspi = new SPIClass(HSPI); |
Il metodo begin ci consente di indicare i pin da utilizzare per i diversi segnali:
vspi->begin(SCLK, MISO, MOSI, SS); |
Se ad esempio vogliamo usare l’interfaccia HSPI con i pin 2-13-14-15 scriviamo:
#define HSPI_MISO 2 #define HSPI_MOSI 15 #define HSPI_SCLK 14 #define HSPI_SS 13 SPIClass *spi = NULL; spi = new SPIClass(HSPI); spi->begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_SS); |
Infine indichiamo alla libreria SD quale istanza SPIClass utilizzare e quale pin di chip select:
SD.begin(HSPI_SS, *spi) |
Possiamo ora usare i diversi metodi della libreria come al solito, ad esempio:
uint8_t cardType = SD.cardType(); |
1 commento