Hallo, ich versuche vergeblich einen Sektor einer Compact-Flash-Kart zu beschreiben. Wenn ich das Kommando "Write Sector" ausführe setzt die Karte brav das Busy-bit und danach DRQ-bit. Nach 512 Schreibzugriffen auf das Daten-Register setzt die Karte das DRQ-Bit wieder zurück. Im Statusregister werden keine Errorbits gesetzt. Es sieht also so aus als ob der Befehl ausgeführt wurde. Wenn ich aber diesen Sektor wieder auslese stehen noch die Daten von vorher drin. Kann es sein, dass dies Karte in irgendeiner Form schreibgeschützt ist? Das Speichermedium hat keinen Schreibschutzschalter, aber kann man diesen Zustand vielleicht durch evtl. fehlerhafte Beschaltung der Compact-Flash erklären?
Moin, > Wenn ich das Kommando "Write Sector" ausführe > setzt die Karte brav das Busy-bit und danach DRQ-bit. Die Karte sollte BSY eigentlich auch wieder zurücksetzen, und erst danach darfst du aufs Datenregister schreiben. > Nach 512 Schreibzugriffen auf das Daten-Register > setzt die Karte das DRQ-Bit wieder zurück. Wenn du nur einen Sektor schreiben willst (SecCnt-Register auf 1 gesetzt), dann sollte danach nicht nur DRQ runter-, sondern auch BSY hochgehen (Karte programmiert ihr Flash). Und erst nach dem Abfallen von BSY ist die Aktion beendet. Das musst du alles abwarten. Schreibst du mehrere Sektoren (SecCnt > 1), dann gilt das für den letzten Sektor, bei den anderen geht zusammen mit BSY-Down DRQ wieder hoch, so dass der gleiche Zustand herrscht wie oben vor dem Datenzugriff und du kannst den nächsten Sektor einfüttern.
tuppes wrote: > Moin, > >> Wenn ich das Kommando "Write Sector" ausführe >> setzt die Karte brav das Busy-bit und danach DRQ-bit. > > Die Karte sollte BSY eigentlich auch wieder zurücksetzen, und erst > danach darfst du aufs Datenregister schreiben. > Das ist auch bei mir so, hab diese Tatsache nur unterschlagen :-) >> Nach 512 Schreibzugriffen auf das Daten-Register >> setzt die Karte das DRQ-Bit wieder zurück. > > Wenn du nur einen Sektor schreiben willst (SecCnt-Register auf 1 > gesetzt), dann sollte danach nicht nur DRQ runter-, sondern auch BSY > hochgehen (Karte programmiert ihr Flash). Und erst nach dem Abfallen von > BSY ist die Aktion beendet. Das musst du alles abwarten. Auch das mache ich > > Schreibst du mehrere Sektoren (SecCnt > 1), dann gilt das für den > letzten Sektor, bei den anderen geht zusammen mit BSY-Down DRQ wieder > hoch, so dass der gleiche Zustand herrscht wie oben vor dem Datenzugriff > und du kannst den nächsten Sektor einfüttern. Es sieht wirklich so aus, als ob das Kommando ausgeführt wird, nur eben die Daten landen nicht auf der Karte. Irgenwelche Ideen?
Vielleicht legst Du keine Daten an beim Schreiben? Schreib doch mal mit dem PC ein Muster drauf und schaue, ob es nach dem Schreiben mit dem uC verändert ist..
Die Daten landen wirklich nicht auf den Karte. Wenn ich die Karte am PC mit WinHex auslese steht dort nichts drin. Mittlerweile hab ich rausgefunden, dass nach dem Übertagen des Sektors zwar das DRQ-Bit auf 0 geht, das BUSY-Bit aber auf 0 bleibt. => Die Daten werden nicht ins Flash geschrieben.
Naja, ich meinte - vielleicht liegen alle Deine Datenbits auf 0, Du schreibst korrekt und meinst, es wäre "nichts" weil überall eine "0" steht..
> Wenn ich die Karte am PC > mit WinHex auslese steht dort nichts drin. "nichts" heißt, alle Bytes sind 0xFF, ja? > Mittlerweile hab ich rausgefunden, dass nach dem Übertagen > des Sektors zwar das DRQ-Bit auf 0 geht, das BUSY-Bit > aber auf 0 bleibt. => Die Daten werden nicht ins Flash geschrieben. Klingt mysteriös. Könnte es ein Busfehler sein? Schon mal überprüft, ob sich alle Leitungen bewegen können, oder ob eine klemmt?
Kannst du die Karte mit dem PC noch beschreiben? Ich hatte das mal mit einer SD-Karte, die war einfach kaputt, wie auch immer.
Ja, mit dem PC kann ich sie beschreiben. Ich kann auch Daten, die mit dem PC geschrieben wurden, mit dem uC auslesen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.