mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schreiben auf Compact-Flash


Autor: Andreas Martin (amartin755)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Martin (amartin755)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Walz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Andreas Martin (amartin755)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Walz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bartholomäus Steinmayr (sam_vdp)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Martin (amartin755)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, mit dem PC kann ich sie beschreiben. Ich kann auch Daten, die mit 
dem PC geschrieben wurden, mit dem uC auslesen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.