#include <SD.h>
#if defined(ARDUINO_TEENSY41)
static const uint8_t _SD_DAT3 = 46;
#elif defined(ARDUINO_TEENSY40) || defined(ARDUINO_TEENSY_MICROMOD)
static const uint8_t _SD_DAT3 = 38;
#elif defined(ARDUINO_TEENSY35) || defined(ARDUINO_TEENSY36)
static const uint8_t _SD_DAT3 = 62;
#endif
bool media_present = false;
void setup() {
while (!Serial) ;
Serial.println("Test Media Present");
media_present = SD.begin(BUILTIN_SDCARD);
Serial.printf("\n$$$Media Present: %u\n", media_present);
print_sd_regs();
#if 0
if (!sd_inserted) {
SDHC_PROCTL |= SDHC_PROCTL_D3CD | SDHC_PROCTL_CDSS | SDHC_PROCTL_CDTL;
SDHC_IRQSTATEN |= SDHC_IRQSTATEN_CINTSEN;
//PORTE_PCR4
}
#endif
}
void print_sd_regs() {
Serial.printf("\tDSADDR:%x", SDHC_DSADDR);
Serial.printf("\tBLKATTR:%x", SDHC_BLKATTR);
Serial.printf("\tCMDARG:%x", SDHC_CMDARG);
Serial.printf("\tXFERTYP:%x\n", SDHC_XFERTYP);
Serial.printf("\tCMDRSP0:%x", SDHC_CMDRSP0);
Serial.printf("\tCMDRSP1:%x", SDHC_CMDRSP1);
Serial.printf("\tCMDRSP2:%x", SDHC_CMDRSP2);
Serial.printf("\tCMDRSP3:%x\n", SDHC_CMDRSP3);
Serial.printf("\tDATPORT:%x", SDHC_DATPORT);
Serial.printf("\tPRSSTAT:%x", SDHC_PRSSTAT);
Serial.printf("\tPROCTL:%x", SDHC_PROCTL);
Serial.printf("\tSYSCTL:%x\n", SDHC_SYSCTL);
Serial.printf("\tIRQSTAT:%x", SDHC_IRQSTAT);
Serial.printf("\tIRQSTATEN:%x", SDHC_IRQSTATEN);
Serial.printf("\tIRQSIGEN:%x", SDHC_IRQSIGEN);
Serial.printf("\tAC12ERR:%x\n", SDHC_AC12ERR);
Serial.printf("\tHTCAPBLT:%x\n", SDHC_HTCAPBLT);
Serial.printf("\tFEVT:%x", SDHC_FEVT);
Serial.printf("\tADMAES:%x", SDHC_ADMAES);
Serial.printf("\tADSADDR:%x", SDHC_ADSADDR);
Serial.printf("\tVENDOR:%x\n", SDHC_VENDOR);
Serial.printf("\tMMCBOOT:%x", SDHC_MMCBOOT);
Serial.printf("\tHOSTVER:%x\n", SDHC_HOSTVER);
Serial.printf("PORTE_PCR0-5: %x", PORTE_PCR0); // SDHC_D1
Serial.printf(" %x", PORTE_PCR1); // SDHC_D0
Serial.printf(" %x", PORTE_PCR2); // SDHC_CLK
Serial.printf(" %x", PORTE_PCR3); // SDHC_CMD
Serial.printf(" %x", PORTE_PCR4); // SDHC_D3
Serial.printf(" %x\n", PORTE_PCR5); // SDHC_D2
}
void loop() {
if (Serial.available()) {
while (Serial.read() != -1) ;
Serial.println("Paused");
while (Serial.read() == -1) ;
while (Serial.read() != -1) ;
}
//Serial.println(digitalReadFast(_SD_DAT3), DEC);
elapsedMicros em;
bool cur_media_present = SD.mediaPresent();
Serial.printf("New: %u Prev: %u em:%u\n", cur_media_present, media_present, (uint32_t)em);
if (cur_media_present != media_present) {
media_present = cur_media_present;
print_sd_regs();
}
delay(1000);
}