| } | } | ||||
| /** SPI send multiple bytes */ | /** SPI send multiple bytes */ | ||||
| #elif defined(__IMXRT1052__) || defined(__IMXRT1062__) | |||||
| #define USE_TEENSY4_SPI | |||||
| #elif defined(__IMXRT1052__) || defined(__IMXRT1062__) || defined(__MKL26Z64__) | |||||
| #define USE_SPI_LIB | |||||
| static void spiInit(uint8_t spiRate) { | static void spiInit(uint8_t spiRate) { | ||||
| switch (spiRate) { | switch (spiRate) { | ||||
| #ifdef __MKL26Z64__ | |||||
| // the top 2 speeds are set to 24 MHz, for the SD library defaults | |||||
| case 0: settings = SPISettings(24000000, MSBFIRST, SPI_MODE0); break; | |||||
| #else | |||||
| // the top 2 speeds are set to 24 MHz, for the SD library defaults | // the top 2 speeds are set to 24 MHz, for the SD library defaults | ||||
| case 0: settings = SPISettings(25200000, MSBFIRST, SPI_MODE0); break; | case 0: settings = SPISettings(25200000, MSBFIRST, SPI_MODE0); break; | ||||
| #endif | |||||
| case 1: settings = SPISettings(24000000, MSBFIRST, SPI_MODE0); break; | case 1: settings = SPISettings(24000000, MSBFIRST, SPI_MODE0); break; | ||||
| case 2: settings = SPISettings(8000000, MSBFIRST, SPI_MODE0); break; | case 2: settings = SPISettings(8000000, MSBFIRST, SPI_MODE0); break; | ||||
| case 3: settings = SPISettings(4000000, MSBFIRST, SPI_MODE0); break; | case 3: settings = SPISettings(4000000, MSBFIRST, SPI_MODE0); break; | ||||
| #if defined(USE_TEENSY3_SPI) | #if defined(USE_TEENSY3_SPI) | ||||
| spiBegin(); | spiBegin(); | ||||
| spiInit(6); | spiInit(6); | ||||
| #elif defined(USE_TEENSY4_SPI) | |||||
| #elif defined(USE_SPI_LIB) | |||||
| spiInit(6); | spiInit(6); | ||||
| pinMode(SS_PIN, OUTPUT); | pinMode(SS_PIN, OUTPUT); | ||||
| digitalWrite(SS_PIN, HIGH); // disable any SPI device using hardware SS pin | digitalWrite(SS_PIN, HIGH); // disable any SPI device using hardware SS pin | ||||
| if (!waitStartBlock()) { | if (!waitStartBlock()) { | ||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| #if defined(USE_TEENSY3_SPI) | defined(USE_TEENSY4_SPI) | |||||
| #if defined(USE_TEENSY3_SPI) | defined(USE_SPI_LIB) | |||||
| spiRec(dst, 512); | spiRec(dst, 512); | ||||
| spiRecIgnore(2); | spiRecIgnore(2); | ||||
| #else // OPTIMIZE_HARDWARE_SPI | #else // OPTIMIZE_HARDWARE_SPI | ||||
| * false, is returned for an invalid value of \a sckRateID. | * false, is returned for an invalid value of \a sckRateID. | ||||
| */ | */ | ||||
| uint8_t Sd2Card::setSckRate(uint8_t sckRateID) { | uint8_t Sd2Card::setSckRate(uint8_t sckRateID) { | ||||
| #if defined(USE_TEENSY3_SPI) || defined(USE_TEENSY4_SPI) | |||||
| #if defined(USE_TEENSY3_SPI) || defined(USE_SPI_LIB) | |||||
| spiInit(sckRateID); | spiInit(sckRateID); | ||||
| return true; | return true; | ||||
| #else | #else | ||||
| //------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
| // send one block of data for write block or write multiple blocks | // send one block of data for write block or write multiple blocks | ||||
| uint8_t Sd2Card::writeData(uint8_t token, const uint8_t* src) { | uint8_t Sd2Card::writeData(uint8_t token, const uint8_t* src) { | ||||
| #if defined(OPTIMIZE_HARDWARE_SPI) && !defined(USE_TEENSY4_SPI) | |||||
| #if defined(OPTIMIZE_HARDWARE_SPI) && !defined(USE_SPI_LIB) | |||||
| // send data - optimized loop | // send data - optimized loop | ||||
| SPDR = token; | SPDR = token; |