| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | // An example of an external SPI driver.//#include "SdFat.h"#include "SPI.h"  // Only required if you use features in the SPI library.#if SPI_DRIVER_SELECT == 3  // Must be set in SdFat/SdFatConfig.h// SD chip select pin.#define SD_CS_PIN SS// This is a simple driver based on the the standard SPI.h library.// You can write a driver entirely independent of SPI.h.// It can be optimized for your board or a different SPI port can be used.// The driver must be derived from SdSpiBaseClass.// See: SdFat/src/SpiDriver/SdSpiBaseClass.hclass MySpiClass : public SdSpiBaseClass { public:  // Activate SPI hardware with correct speed and mode.  void activate() {    SPI.beginTransaction(m_spiSettings);  }  // Initialize the SPI bus.  void begin(SdSpiConfig config) {    (void)config;    SPI.begin();  }  // Deactivate SPI hardware.  void deactivate() {    SPI.endTransaction();  }  // Receive a byte.  uint8_t receive() {    return SPI.transfer(0XFF);  }  // Receive multiple bytes.  // Replace this function if your board has multiple byte receive.  uint8_t receive(uint8_t* buf, size_t count) {    for (size_t i = 0; i < count; i++) {      buf[i] = SPI.transfer(0XFF);    }    return 0;  }  // Send a byte.  void send(uint8_t data) {    SPI.transfer(data);  }  // Send multiple bytes.  // Replace this function if your board has multiple byte send.  void send(const uint8_t* buf, size_t count) {    for (size_t i = 0; i < count; i++) {      SPI.transfer(buf[i]);    }  }  // Save SPISettings for new max SCK frequency  void setSckSpeed(uint32_t maxSck) {    m_spiSettings = SPISettings(maxSck, MSBFIRST, SPI_MODE0);  } private:  SPISettings m_spiSettings;} mySpi;#if ENABLE_DEDICATED_SPI#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(50), &mySpi)#else  // ENABLE_DEDICATED_SPI#define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI, SD_SCK_MHZ(50), &mySpi)#endif  // ENABLE_DEDICATED_SPISdFat sd;//------------------------------------------------------------------------------void setup() {  Serial.begin(9600);  if (!sd.begin(SD_CONFIG)) {    sd.initErrorHalt(&Serial);  }  sd.ls(&Serial, LS_SIZE);}//------------------------------------------------------------------------------void loop() {}#else  // SPI_DRIVER_SELECT#error SPI_DRIVER_SELECT must be three in SdFat/SdFatConfig.h#endif  // SPI_DRIVER_SELECT
 |