SDcard Leseproblem

Hallo, ich habe mit einem c#-Programm byteweise auf eine SDcard eine Reihe von bytes geschrieben. Diese sind wirklich auf der Karte gespeichert, habe ich verifiziert. Jedoch
mit dataFile.read(my_buffer, 16); sind sie alle auf Null.
Woran kann es liegen?

[code]
// SD-Test
#include <SPI.h>
#include <SD.h>
File root;
const int chipSelect = 3;
byte SDstate = 0; //SD not init
/*struct stc_set{  
  // Header
  byte Format;    // bit 0: 0=32 oder 1=128
    // bit1/2:  00= freies Muster,01=Bild,10=Schrift,11= …
    // bit3:  0= keine Wiederholung, 1=Wiederholung
  byte Anzahl;// Musterlänge (bei Wiederholung=1 >> da Weben wird  beendet durch Pultbedienung)
  byte reserve[14];
  long Muster[1024]; // 1024x32bit (unten =0, oben=1)
  //oder je nach Format bit 0
  //long Muster[1024x4]; // 1024x128bit (unten =0, oben=1)
};
stc_set *pak;*/
File SendFile;
byte my_buffer[16];

//-------------------------------------------
void setup() {
  Serial.begin(9600,SERIAL_8N2);
  pinMode(chipSelect, OUTPUT); // change this to 53 on a mega  // don't follow this!!
  digitalWrite(chipSelect, HIGH); // Add this line
  Serial.println("Initializing SD card...");
  for(int n = 0;n<10;n++){
    delay(100);
    if (!SD.begin(chipSelect)) {
      Serial.println("initialization failed!");
    }
    else{
      SDstate = 1; //SD initialised
    }
  }
  if(SDstate == 1){
    Serial.println("initialization done.");
    root = SD.open("/");
  }

   File dataFile = SD.open("Test.txt");
   if (dataFile) {

     dataFile.seek(0);
    
     while (dataFile.available()>=16) {
       dataFile.read(my_buffer, 16);
     }
     dataFile.close();
   }
   for(int n = 0; n < 16; n++){
     Serial.print((byte) my_buffer[n]);
   }

}

//-------------------------------------------
void loop() {
  // put your main code here, to run repeatedly:

}
[/code]

Sind denn 16 oder mehr Zeichen in der Datei?
Lies doch einfach was da ist:

File dataFile = SD.open("Test.txt");
if (dataFile) {
   Serial.print(dataFile.available();
   Serial.println(" Zeichen in Test.txt");
  // read from the file until there's nothing else in it:
  while (dataFile.available()) {
    Serial.println(myFile.read(), HEX);
  }
  dataFile.close();
} else {
   Serial.println("SD.open failed");
}
1 Like

Moin @yannick16,

@michael_x hat mal wieder den Nagel auf den Kopf getroffen :wink:

Ich habe Deinen Sketch mal auf Wokwi eingespielt:

https://wokwi.com/projects/360748203839990785

image

Wenn Du ihn dort startest, siehst Du im Serial-Output die Ascii-Werte der Zeichen aus der (simulierten) Datei wokwi.txt:

image

Dann lösche mal das ! hinter Card und starte neu ---> Ergebnis: lauter Nullen

Solange weniger als 16 Zeichen zu lesen sind, wird

while (dataFile.available()>=16) {}

nicht durchlaufen. Günstiger wäre es wohl zeichenweise einzulesen ...

ec2021

Vielen Dank, damit hat sich das Problem gelöst.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.