www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte Lesen und Schreiben klappt NICHT nacheinander


Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich bin nun recht verzweifelt, da ich schon seit soooooooooooo vieeelen 
stunden versuche die SD Karte am STM32F103 Hardware SPI zum laufen zu 
kriegen

Nun habe ich ersten "erfolg"

Ich verwende diese "Librarys" 
http://www.mikrocontroller.net/articles/AVR_FAT32

Ich habe dort alles an meinen Controller abgeändert...

Ich habe es nun endlich geschafft hinter ein grundlegendes problem zu 
kommen.

Ich kann problemlos 512 Byte Schreiben und auch alle Sektoren von 0 - 
1000 nacheinander auslesen und per UART ausgeben solange ich dies NICHT 
im programm vereine (also zb zuerst schreiben und dann lesen)

Doch sobald ich versuche etwas zu schreiben und danach irgend ein sektor 
auszulesen, klappts nicht mehr...

Dan hängt er mir bei folgender Zeile ewig fest
//Wartet auf Start Byte von der MMC/SD-Karte (0xFE/Start Byte)
   while (mmc_read_byte() != 0xFE){};

In meinem Versuch ist dies in mmc_read_sector

Ich habe versucht einen x beliebigen Sektor zu beschreiben und danach 
sektor xyz auszulesen. Dabei ist es egal welchen sektor ich auslesen 
möchte... Es gibt immer den gleichen fehler...

Merkwürdigerweise meldet die Karte einen Schreibfehler bzw der Code 
meldet dies
//Fehler beim schreiben? (Data Response XXX00101 = OK)
  if((mmc_read_byte()&0x1F) != 0x05) return 2;

Ich bekomme ein return 2
Die Daten sind jedoch auf der Karte Vorhanden und können auch mittels 
mmc_read_sector ausgelesen werden, sofern zuvor mmc_write_sector 
nirgends aufgerufen wurde!


ich hoffe irgend jemand hat eine idee woran das liegen könnte...


Danke schonmal

Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hat ja jemand heute morgen eine idee :)

Autor: Claudio H. (Firma: BLS-Electronics) (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab das problem nun selbst gefunden und gelöst...

In der AVR Library hier aus dem Forum hat es Fehler drinn...

Es sollte nicht heissen
//CRC-Byte schreiben
  mmc_write_byte(0xFF); //Schreibt Dummy CRC
  mmc_write_byte(0xFF); //CRC Code wird nicht benutzt

  //Fehler beim schreiben? (Data Response XXX00101 = OK)
  if((mmc_read_byte()&0x1F) != 0x05) return FALSE;


Sondern man muss Abwarten bis der Respond kommt! Nicht jede karte hat 
gleich lange...

Obige zeilen sind also komplett durch diese hier zu ersetzen...
Da mmc_read_byte() auch dummy clocks sendet entfällt das separate sender 
dieser für die CRC abfrage...
while((mmc_read_byte()&0x1F) != 0x05);

Hoffe es hilft jemandem

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sondern man muss Abwarten bis der Respond kommt! Nicht jede karte hat
> gleich lange...

Aber das weiss man doch. Das unterschiedliche Verhalten dieser
@#$@$#-Karten hat mich auch schon Nerven gekostet.

> while((mmc_read_byte()&0x1F) != 0x05);

Ich wuerde darauf achten keine Endlosschleifen zu produzieren. Daher 
decrementiere ich normalerweise bei solchen Schleifen einen Zaehler und 
breche auf jedenfall ab wenn der auf Null ist. Dann bleibt dein Programm 
nicht einfach wortlos stehen wenn du mal wieder eine neue Karten mit 
abartigen Verhalten reinsteckst.

Olaf

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.