Beim Versuch, eine DSP/BIOS freie Anwendung unter Verwendung des Beispielcodes zu schreiben, kommt es zu unerwarteten Problemen. Durch zeitraubende Debug-Arbeit finde ich ein Verhalten der SPI-Sende-/Empfangsregister heraus, das dazu führt, dass Bytes verloren gehen, wenn man die Register nicht richtig ausliest.

Dies machte sich im Beispielcode nicht bemerkbar, da dieser lediglich eine Sequenz von Bytes auf die Karte schreibt, wieder liest und dann vergleicht. Weil der Fehler sowohl beim Schreiben wie auch beim Lesen auftritt, wird der Beispielcode-Test fälschlicherweise als “korrekt” erkannt.

Als es konkret darum ging, gezielt Daten von der SD-Karte zu lesen, machte sich dieser Fehler bemerkbar, weil plötzlich Bytes nicht ausgelesen wurden, die jedoch in einem Dump der SD-Karte im Linux-Betriebssystem eindeutig vorhanden waren.

Ich habe beim Lieferanten des Beispielcodes folgendes Ticket eröffnet, das ich dann selbst beantwortet habe:

The answer:

changing:

*data = MMCSD_MMCDRR2;
*data++ = MMCSD_MMCDRR1;

to:

*data++ = MMCSD_MMCDRR1;
*data++ = MMCSD_MMCDRR1;

Now I have the expextet bytes in the output buffer… :-)

The question was:

Hello out there,

I try to use the sd-card example (usbstk5515_v1/tests/sd) to read such a card with an ezdsp5515 board. The issue I experience is, that only every 2nd word got read out of the card. I can confirm this with a hexdump from the card content.

eg.
On the card i have the following sequence according to a hexdump in Linux:
66 77 88 99 AA BB CC DD EE FF

When i read it out with “MMCSD_singleBlkRead”, i get in the output buffer “data”:
66 77 AA BB EE FF

The following code sequence in “MMCSD_readNWords” seemed me a little strange anyway:

*data = MMCSD_MMCDRR2;
*data++ = MMCSD_MMCDRR1;

But when i changed it to:
*data++ = MMCSD_MMCDRR2;
*data++ = MMCSD_MMCDRR1;

I got in the buffer “data”:
66 77 66 77 AA BB AA BB EE FF EE FF

That tells me, that somehow one of the 2 receive register is not working properly, probably due to a configuration.

I am not sure, if you can help, but i hope that out there is some expert who can give me a hint.

Thanks in advance