Hallo,
ich versuche gerade, das Filesystem FatFs auf einem PIC32 mit
SD-Kartenslot zum Laufen zu bringen. Leider hat der PIC kein natives
SD-Karten Interface, so bin ich auf SPI angewiesen. Um das Ganze etwas
schneller zu machen, lese ich die Daten in 32-bit Häppchen aus:
1 | DWORD *ptr;
|
2 | ...
|
3 | for (i=0;i<512/4;i++)
|
4 | {
|
5 | SPI2BUF = 0xFFFFFFFF;
|
6 | while(!SPI1STATbits.SPIRBF) {};
|
7 | *ptr++ = SPI2BUF
|
8 | }
|
Leider funktioniert es nicht, fatFS erkennt ein ungültiges Dateisystem.
Der Grund liegt darin, dass die Bytes im Speicher "verwürfelt" abgelegt
werden:
Wenn SPI2BUF zB. 0x12345678 enthält, gelangt beim Abspeichern 0x78 an
die erste, 0x12 an die 4te Stelle. Der PIC ist schliesslich eine
Little-Endian-Maschine. Alle Beispielroutinen verwenden SPI im 8bit
Modus, was aber zu einer schlechten Performance führt, da das
Abspeichern der Werte längert dauert als der Empfang eines Bytes. Im
Oszillogramm ist das als "Lücke" im SPI-Taktsignal sichtbar.
Gibt es eine einfache Möglichkeit, die Bytereihenfolge zu ändern? Im
Datenblatt habe ich nichts dazu gefunden. Manuelles
"Auseinanderpfriemeln"
würde wahrscheinlich wieder die Übertragungsgeschwindigkeit in den
Keller gehen lassen.
DMA habe ich auch schon versucht, aber keine Methode gefunden, die
SPI-Übertragung nach jedem empfangenen Datenwort automatisch wieder zu
starten.
Mike