Schreiben auf Compact-Flash

Gast #981678
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?
Gast #981705
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.
Gast #981720
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?
Gast #982015
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.
Gast #982084
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren