Gelegentlich ist das erste Datenbyte von einem SD-Karten-SPI-Lesevorgang fehlerhaft

7

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?

Andy Key
quelle
7
Ja, es ist leicht vorstellbar, dass die aktuellen Bedürfnisse steigen könnten. Sie können versuchen, lokale Kondensatoren direkt an der Steckdose hinzuzufügen. Es ist jedoch auch möglich, dass Ihr SPI-Timing im Allgemeinen fast kurz vor dem Ausfall der Einrichtungszeit steht, und dieser eine Fall macht das Problem deutlich.
Chris Stratton
Können Sie versuchen, was bei einer niedrigeren Geschwindigkeit passiert? Und wie lang sind deine Kabel? Kann es so etwas wie unerwünschte Kapazität oder Induktivität geben?

Antworten:

5

Die Analyse mit einem billigen USB-Logikanalysator bei 16 MHz ergab, dass gelegentlich nur 7 Taktzyklen zusammengefasst waren. Von der Hardware-VHDL weiß ich, dass dies unmöglich ist - sobald eine Byte-Übertragung gestartet wird, werden Bits auf den folgenden 8 Takten ausgetauscht.

Ich vermutete, dass das SCLK-Signal Rauschen aufwies, was dazu führte, dass eine Uhr zu schnell war, um vom Analysator gesehen zu werden, und zu schnell, als dass der Computer sie erkennen konnte, aber dass die SD-Karte tatsächlich ein wenig ausgetauscht wurde.

Also habe ich der Quelle des SCLK-Signals eine Entflechtungslogik hinzugefügt, und das Problem ist verschwunden.

Randnotiz: Der Host-Computer ist ein Retro-Computer mit 4 MHz. Ein gewisses Rauschen auf der Uhr ist für die meisten Komponenten dieses Computers wahrscheinlich nicht sichtbar, aber für mein modernes FPGA-basiertes Add-On (mit dem Designs mit fMax> 50 MHz problemlos ausgeführt werden können) werden solche Dinge plötzlich zu einem Problem.

Vielen Dank an diejenigen, die geantwortet haben.

Andy Key
quelle
2
Zu Ihrer Information: Sie können (und sollten) Ihre eigene Antwort akzeptieren.
Exscape