Forum: Mikrocontroller und Digitale Elektronik Schreiben auf Compact-Flash


von Andreas M. (Gast)


Lesenswert?

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?

von tuppes (Gast)


Lesenswert?

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.

von Andreas M. (Gast)


Lesenswert?

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?

von Walz (Gast)


Lesenswert?

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..

von Andreas M. (Gast)


Lesenswert?

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.

von Walz (Gast)


Lesenswert?

Naja, ich meinte - vielleicht liegen alle Deine Datenbits auf 0, Du 
schreibst korrekt und meinst, es wäre "nichts" weil überall eine "0" 
steht..

von tuppes (Gast)


Lesenswert?

> 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?

von Bartholomäus S. (sam_vdp)


Lesenswert?

Kannst du die Karte mit dem PC noch beschreiben? Ich hatte das mal mit 
einer SD-Karte, die war einfach kaputt, wie auch immer.

von Andreas M. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.