| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | // 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
 |