// An example of an external chip select functions. // Useful for port expanders or replacement of the standard GPIO functions. // #include "SdFat.h" // SD_CHIP_SELECT_MODE must be set to one or two in SdFat/SdFatConfig.h. // A value of one allows optional replacement and two requires replacement. #if SD_CHIP_SELECT_MODE == 1 || SD_CHIP_SELECT_MODE == 2 // SD chip select pin. #define SD_CS_PIN SS #define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI, SD_SCK_MHZ(50)) SdFat sd; // Stats to verify function calls. uint32_t initCalls = 0; uint32_t writeCalls = 0; //------------------------------------------------------------------------------ // Modify these functions for your port expander or custom GPIO library. void sdCsInit(SdCsPin_t pin) { initCalls++; pinMode(pin, OUTPUT); } void sdCsWrite(SdCsPin_t pin, bool level) { writeCalls++; digitalWrite(pin, level); } //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); if (!sd.begin(SD_CONFIG)) { sd.initErrorHalt(&Serial); } sd.ls(&Serial, LS_SIZE); Serial.print(F("sdCsInit calls: ")); Serial.println(initCalls); Serial.print(F("sdCsWrite calls: ")); Serial.println(writeCalls); } //------------------------------------------------------------------------------ void loop() {} #else // SD_CHIP_SELECT_MODE == 1 || SD_CHIP_SELECT_MODE == 2 #error SD_CHIP_SELECT_MODE must be one or two in SdFat/SdFatConfig.h #endif // SD_CHIP_SELECT_MODE == 1 || SD_CHIP_SELECT_MODE == 2