Das Gerät, das ich entwickle, ist ein SD-Kartenspeicher-Add-On für einen Retro-Computer, eine SanDisk Ultra II 1,0 GB SD-Karte in einem SD-Kartensockel (ich habe keine Ahnung, ob die Marke von Bedeutung ist, es ist einfach das, was ich habe). .
Die SD-Karte ist das einzige Gerät am SPI-Bus. Ein Pegelumsetzer stellt sicher, dass der Karte Signale mit 3,3 V zugeführt werden. MISO speist über einen Busschalter ein 3,3-V-FPGA. Das FPGA implementiert einen getakteten Schieberegistermechanismus, der achtmal taktet, Ausgangsdaten an MOSI verschiebt und Eingangsdaten von MISO erfasst.
Viele an viele Computer angeschlossene Geräte funktionieren einwandfrei.
Ich benutze den SPI-Modus. Ich initialisiere die Karte, beschleunige sie auf 4 MHz und sende den Befehl zum Lesen eines einzelnen Blocks.
Ich beobachte, dass das erste Datenbyte, das gelegentlich zurückgegeben wird, eine Ein-Bit-Beschädigung aufweist. Normalerweise wird Bit 0 gesetzt, wenn es nicht sein sollte, aber ich habe auch gesehen, dass Bit 1 gesetzt ist, wenn es nicht sein sollte. Alle anderen Bytes sind immer vollkommen korrekt.
Es wurden mehrere Geräte getestet, die an mehrere Host-Computer angeschlossen wurden. Das Problem wurde nur bei einem Gerät festgestellt, das an einen Computer angeschlossen war. Das Gerät oder der Computer funktioniert einwandfrei mit anderen Computern oder Geräten.
Ich habe Zeitfehler in meinem Treibercode vermutet, bin mir aber sicher, dass ich die acht Taktzyklen (Senden 0xFF
, Lesen des ersten Datenbytes) durchgeführt habe, bevor ich ihn gelesen habe.
Ich frage mich, ob dies mit Spannungs- oder Strompegeln zusammenhängt, die je nach Gerät oder Computer geringfügig voneinander abweichen können.
Ich frage mich, muss eine SD-Karte plötzlich zusätzlichen Strom ziehen, gerade als sie anfängt, Daten auszugeben?