So konnte ich erfolgreich eine Sandisk-SD-Karte mit Spartan 3 FPGA (mit Verilog) verbinden. Die Karte wird nach dem Einschalten korrekt initialisiert und kann Daten sektorweise korrekt lesen und schreiben. Das einzige Problem, das bleibt, ist, dass die Karte nach dem Einschalten hängt und nicht mehr funktioniert, wenn ich die Reset-Taste drücke. Ich konnte auch nicht herausfinden, was ein Hard Reset für die SD-Karte bedeutet. Sollte es irgendwie neu initialisiert werden? Welchen Befehl muss ich dafür an die Karte senden? Jede Hilfe ist willkommen.
Sie müssen Ihren Verilog-Code simulieren oder den Analysator verwenden, um zu sehen, was im Live-System vor sich geht.
Meiner Meinung nach gibt es nur zwei Umstände, wenn die SD-Karte "hängen" erscheint:
schlechte Spezifikationsimplementierung, wenn die Karte nicht versteht, was vor sich geht, oder nicht verstehen kann, dass der vorherige Befehl abgebrochen werden muss. Die Karte muss Ihnen jedoch während der Ausführung dieser Befehle sowieso etwas anderes als alle 1 mitteilen - zum Beispiel wird beim Multiple Block Read CRC übertragen, der Nullen enthält, beim Multiple Block Write muss der Host CRC übertragen, da sonst die Kartenantworten mit Fehlern enthalten sind 0s. Ihre Aufgabe hier ist es, den Satz von SD-Kartenbefehlen zu überprüfen, die Ihr Controller verwendet, und die Initialisierungssequenz (Anzahl der Ersatztaktzyklen, bevor Sie mit CMD0 fortfahren) entsprechend anzupassen.
Ihre FPGA-Zustandsmaschine schlägt fehl, nachdem Sie Reset gedrückt haben. Zum Beispiel funktioniert die Uhr am Takteingangsstift der SD-Karte nicht mehr, MOSI bleibt hängen usw. Dies ist am verdächtigsten für hängende Karten, da die SD-Karte nichts ausgibt, wenn die Uhr nicht umschaltet oder CS nicht aktiviert und nicht nützlich ist Informationen zur MOSI-Linie.
Sobald eine SD-Karte mit Strom versorgt und initialisiert wird, Sie dann aber Ihr FPGA zurücksetzen, startet der Code wahrscheinlich eine neue Initialisierung einer bereits initialisierten Karte. Die SD-Schnittstelle hat keine spezielle Reset-Leitung. Der einzige Hard- Reset in SD ist ein Power-On-Reset, daher ist der beste Weg, eine SD-Karte in den vorinitialisierten Zustand zu bringen, das Aus- und Wiedereinschalten.
if(!reset)
Teil meines Codes einfügen? Und wenn die Reset-Taste gedrückt wird, in welchen Zustand sollte mein entworfenes FSM gehen? Leerlauf oder CMD0?
TEMLIB
Süssigkeit