First Commit
This commit is contained in:
75
libraries/SdFat/examples/UserSPIDriver/UserSPIDriver.ino
Normal file
75
libraries/SdFat/examples/UserSPIDriver/UserSPIDriver.ino
Normal file
@@ -0,0 +1,75 @@
|
||||
// An example of an external SPI driver.
|
||||
//
|
||||
#include "SPI.h" // Only required if you use features in the SPI library.
|
||||
#include "SdFat.h"
|
||||
|
||||
#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.h
|
||||
class 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_SPI
|
||||
SdFat sd;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
if (!sd.begin(SD_CONFIG)) {
|
||||
sd.initErrorHalt(&Serial);
|
||||
}
|
||||
sd.ls(&Serial, LS_SIZE);
|
||||
Serial.println("Done");
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void loop() {}
|
||||
#else // SPI_DRIVER_SELECT
|
||||
#error SPI_DRIVER_SELECT must be three in SdFat/SdFatConfig.h
|
||||
#endif // SPI_DRIVER_SELECT
|
||||
|
||||
Reference in New Issue
Block a user