¿Cómo es que debemos configurar SdFat beta?Greiman recientemente actualizó la librería SdFat beta, para darle soporte al teensy 4. En esta placa podemos instalar un lector externo microSD en SPI1.

También podemos instalar un lector externo mediante conexionado de 4 bits; en este caso, usaremos los ajustes con el segundo conexionado.
Primero debemos descargar la
librería SdFat beta del repositorio oficial. Podemos instalarla en la carpeta de librerías del core teensy, en esta ruta:
C:\arduino-1.8.13\hardware\teensy\avr\libraries
De esta forma, cuando hagamos referencia a la librería SdFat beta con la placa teensy 4, la primer librería que va a consultar es la que tiene en la carpeta de librerías del core, aunque en el núcleo de librerías del IDE de arduino, exista otra versión.
Una vez instalada la memoria microSD en el adaptador, hay que verificar que funcione con SdFat beta.

Para ello podemos usar directamente los ejemplos: SdInfo o bech.
SdInfo

bench

Tomando como base cualquiera de los ejemplos, podemos extraer las lineas que nos permitirán usar el lector SDIO.
En el encabezado hacemos referencia a la librería SdFat. Debemos considerar dos aspectos: el constructor y el iniciador de la tarjeta.
Hay varios constructores para llamar a la tarjeta microSD:
#if SD_FAT_TYPE == 0
SdFat sd;
File file;
#elif SD_FAT_TYPE == 1
SdFat32 sd;
File32 file;
#elif SD_FAT_TYPE == 2
SdExFat sd;
ExFile file;
#elif SD_FAT_TYPE == 3
SdFs sd;
FsFile file;
Cada uno puede manejar diferentes características y clases dentro de la librería
1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT
En los documentos de referencia de la librería, se detallan estos aspectos con alcances y limitaciones para cada familia de placas y tipos de memorias SD.
En este caso podemos usar este constructor:
SdFat sd;
Respecto al iniciador, la librería SdFat beta considera 4 opciones, dos para lector en modo SDIO y dos para lector en modo SPI
sd.begin(SdioConfig(FIFO_SDIO))
sd.begin(SdioConfig(DMA_SDIO))
sd.begin(SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50)))
sd.begin(SdSpiConfig(SD_CS_PIN, SHARED_SPI, SD_SCK_MHZ(50)))
El ejemplo en el que podemos usar cada uno de estos iniciadores es: TeensySdioDemo. Estos son los resultados:
DMA_SDIO

totalMicros 43815939
yieldMicros 29389566
FIFO_SDIO

totalMicros 6623219
yieldMicros 335822
Entonces, el mejor iniciador que podemos usar es:
sd.begin(SdioConfig(FIFO_SDIO))
Combinando el constructor y el iniciador, podemos crear un ejemplo para verificar el funcionamiento de la tarjeta micro SD en el lector SDIO
#include "SdFat.h"
SdFat SD;
void setup() {
Serial.begin(9600);
while (!Serial){;}
Serial.print("Initializing SDIO card...");
if (!SD.begin(SdioConfig(FIFO_SDIO))) {
Serial.println("failed!");
return;
}
Serial.println("OK!");
}
void loop(){}

PD: toca el turno a la librería ILI9488_t3