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