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
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.
Ist das beim SAM7 wirklich so mies ? Beim LPC2136 sieht das so aus: S0SPCR=(a); while(!(S0SPSR & (SPIF))); Ohne Probleme. Lohnt sich nicht mal ne Subroutine daraus zu machen ;)
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 ) );
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.