products:flipper:using_sd_card_arduino

SD Card arduino support for flipper boards


tags: arduino, flipper, SD card

For the flipper board we are using two SPI instances : SPI and SPI1. SPI1 is hardware attached to the SPI card.

However the basic SD Arduino Library is fixed with instance SPI.

So for the sd card we need to use SdFat Library (SdFat by Bill Greiman, tested version: 1.1.4). This Library can be easily found in the library manager.

Once the library is installed we need to configure it, so we need to change : Arduino_Folder/libraries/SdFat/src/SdFatConfig.h file :

#define USE_STANDARD_SPI_LIBRARY 2

We set USE_STANDARD_SPI_LIBRARY constant to 2 so that the Spi port can be selected with the constructors SdFat(SPIClass* spiPort)

We have two custom spis so we set :

#define SD_HAS_CUSTOM_SPI 2

Once the SdFat is configured we can implement our code using the library.

test_sd.ino
#include <SPI.h>
#include <SdFat.h>
 
SdFat SD(&SPI1);
 
#define SD_CS_PIN SS1
File myFile;
 
void setup() {
  // Open serial communications and wait for port to open:
 
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  pinMode(SDCARD_EN_PIN,OUTPUT);
  digitalWrite(SDCARD_EN_PIN, HIGH); 
 
  Serial.print("Initializing SD card...");
 
  if (!SD.begin(SD_CS_PIN)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
 
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);
 
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
 
  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
 
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}
 
void loop() {
  // nothing happens after setup
}
  • products/flipper/using_sd_card_arduino.txt
  • Last modified: 2021/04/04 12:31
  • by manu