issue with sd card
aster Tue Jul 25, 2017 8:12 pm
i have this SD module, sdfat version 1.0.3, external ttl-serial, low (4mhz) speed, stm32duino core last update (20 of this month)
if i use it on maple mini (from baite) it works ok
same code on the bluepill gives me initialization error
I am using this
#include <SPI.h>
#include "SdFat.h"
SdFat sd;
File file;
char fileName[] = "log_1.csv";
byte fileNumber = 1;
#define SD_CHIP_SELECT PA4 //53 mega, 10 uno, 7 (PA4) STM
#define SPI_SPEED SD_SCK_MHZ(4)
#define baudrate 115200
#define Serial Serial1
void setup() {
Serial.begin(baudrate);
Serial.println("type to start");
while (!Serial.available()) {
SysCall::yield();//avoid error on other boards?
}
Serial.println("Starting...");
if (!sd.begin(SD_CHIP_SELECT, SPI_SPEED)) {
Serial.println("initialize error");
}
Serial.print("file Name: ");
Serial.println(fileName);
while (sd.exists(fileName)) {
newfile();
Serial.print("file name: ");
Serial.println(fileName);
}
file = sd.open(fileName, FILE_WRITE); //create file
if (file) { //check if file is opened correctly
file.println("test 1");
for (int i = 0; i < 20; i++) {
file.print("data"); file.print(i); file.print(",");
}
file.println("");
file.println("test 2");
char randomData[100];
byte value1 = random(0, 254);
int value2 = random(254, 65536);
char value3 = 'p';
float value4 = random(1, 500) / 100.0;
sprintf(randomData, "value:%d,%d,%c,%f", value1, value2, value3, value4);
file.print(randomData);
file.println("");
file.println("test 3");
unsigned int start = micros();
file.print("writing speed: ");
unsigned int speedtest = micros() - start;
file.print(speedtest);
file.close();
delay(10);
Serial.println("wrote!");
Serial.println();
delay(1000);
Serial.println("stress test...");
delay(10);
for (byte a = 10; a >= 1; a--) {
char fileName[12];
sprintf(fileName, "file%d.csv", a);
file = sd.open(fileName, FILE_WRITE); //create file
delay(100);
if (file) {
file.println("stress test");
} else {
delay(100);
Serial.print("stress test failed n#"); Serial.println(a);
}
delay(100);
file.close();
delay(20 * a);
}
Serial.println("completed!");
} else {
Serial.println("error opening file");
}
}
void newfile() {
fileNumber++;
sprintf(fileName, "log_%d.csv", fileNumber);
}
void loop() {}
