SDcard schnell beschreiben, Problem

Gast #518051
Hallo,
ich möchte mit einem Sam7 eine SDKarte beschreiben, das funktioniert 
auch ganz gut. Meine writebyte routine so aus:


inline char mmc_write_byte (char Byte)
//###################################################################### 
######
{
  while( !( AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TDRE ) ); // Wait until 
the character can be sent
  AT91C_BASE_SPI->SPI_TDR = Byte;

  while( !( AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF ) );  // Wait until 
the character can be received
  return (char)( AT91C_BASE_SPI->SPI_RDR ); // it's important to read 
RDR here!
}

Hierbei dauert das Auslesen des Empfangsregisters (RDR) sehr lange, so 
daß ich diesen Teil beim Übertragen der 512 Byte hintereinander 
weggelassen habe.
Leider schreibt die Karte dann nur sehr unzuverläßig die Daten in ihren 
Speicher.

Wieso dauert das Auslesen des Empfangsregisters solange und wieso ist es 
"important" dieses bei jeder Übertragung auszulesen?

Danke
Gast #518052
Auslesen des RDR beim schreiben (egal durch Pollen oder PDC) = alles IO 
aber "langsam"

Ohne Auslesen des "unwichtigen" Empfangsregisters läufts instabil dafür 
aber mit bis zu 1MB/sek.
Admin Persönliche Seite #518511
Ich bezweifle dass es das Auslesen des Empfangsregisters ist das so 
lange dauert. Zitat aus Datenblatt:

• RDRF: Receive Data Register Full
0 = No data has been received since the last read of SPI_RDR
1 = Data has been received and the received data has been transferred
from the serializer to SPI_RDR since the last read of SPI_RDR.
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Wenn du SPI_RDR nicht liest, dann wird deine While-Schleife also beim 
nächsten Mal sofort abgebrochen, weil RDRF noch von der letzten 
Übertragung high ist:

while( !( AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF ) );

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.