Ich schreibe hier grade an einer SPI SD Karten Lib, welche ich unter die
FatLib von elm Chan geschnallt habe.
Das Ganze läuft auf einem STM32F407.
Single Block lesen und schreiben funktioniert super, das Dateisystem ist
glücklich.
Jetzt wollte ich das auf Multiple Block lesen aufbohren.
Der erste Multiple Block kommt ganz normal von der SD Karte, aber alle
Blöcke danach sind genullt! Dabei kommt das Start Token (0xFE), aber
danach alles 0!
Code: Alles auswählen
uint8_t sd_r_multiblock(uint8_t *buf, uint32_t lba, uint32_t blocks_count, uint16_t block_size){
uint8_t cmd_res = 0;
uint32_t offset = 0;
deprintf("SD - blocks_count(read): %u\n", blocks_count);
deprintf("SD - lba: %x\n", lba);
cmd_res = sd_cmd(SD_CMD_READ_MULT_BLOCK, lba);
if (cmd_res){
return sd_errorhandling();
}
while (blocks_count--){
// auf das Data Start Token warten
if (sd_waitfor(SD_TOKEN_START_DATA_MULTIPLE_BLOCK_READ) != SD_OK){
deprintf("FAIL SD_TOKEN_START_DATA_MULTIPLE_BLOCK_READ\n");
goto error;
}
// Daten lesen nach dem Token
sd_read_data(buf + offset, block_size);
uint8_t blockanfang = *(buf + offset);
deprintf("SD - Blockanfang: %c (%x)\n", blockanfang, blockanfang);
// nächster RAM schreizugriff ist um block_size weiter
offset += block_size;
// CRC Bytes wegwerfen
sd_writebytes(0xFF);
sd_writebytes(0xFF);
}
cmd_res = sd_cmd(SD_CMD_STOP_TRANSMISSION, 0x00);
if (cmd_res){
deprintf("SD_CMD_STOP_TRANSMISSION - %x\n", cmd_res);
return sd_errorhandling();
}
return SD_OK;
}
Hier ist ein Lesezugriff mit 16 Blöcken zu lesen.
Der Block mit dem Pfeil ist der erste Block, der auch ordentliche Daten
enthält.
Bei den anderen 15 Blöcken sieht man schon die Leere.
Hier kommt der erste Block, schön zu sehen das 0xFE und danach mein
lorem ipsum Testtext.
Da ist das Ende vom ersten Block zu sehen mit seinem CRC am Ende.
Danach wird es HIGH, dann kommt 0xFE und dann Nullen als zweiten Block.
Ich krich hier echt gleichn FÖhn, hat wer ne Idee was da rumzikt?