Gast
#76537
Hallo,
ich versuche von einer MMCard einen 512 byte grossen Sektor auszulesen.
Hierfuer ist folgender Code vorgesehen:
u08 sectorBuffer[512];
u08 * pSecPtr;
[...]
u08 mmc_sectorRead( u32 lba ) {
union u32convert conv;
conv.value = lba;
cbi( MMC_PORT, MMC_CS );
u08 params[] = { conv.byte.b4, conv.byte.b3, conv.byte.b2,
conv.byte.b1 };
mmc_sendCmd( MMC_READ_SINGLE_BLOCK, params );
if ( mmc_dataToken( ) != 0xfe ) {
mmc_disable( );
return 1;
}
u16 i;
pSecPtr = sectorBuffer;
for ( i = 0; i < 512; i++ ) {
*pSecPtr++ = mmc_spi(0xFF);
}
mmc_spi( 0xFF );
mmc_spi( 0xFF );
mmc_disable( );
return 0;
}
Sobald ich z.B. folgendes ausfuehre
u32 i =0;
mmc_sectorRead( i );
startet sich der Prozessor neu. Selten kommt es auch zu anderen
unkontrollierten Verhaltensweisen, aber eigentlich startet er sich
einfach neu.
Meine bisherigen Debugging-Versuche haben ergeben, dass er bis zum
Beschreiben des Sektor-Buffers kommt.
Findet ihr einen Fehler dort?
Falls noch mehr vom Code noetig ist, gebt einfach bescheid.
Vielen Dank fuer Antworten,
~stefan