Lese-/Schreib-Problem SST25 Flash-Speicher

Gast #4431747
Lesenswert?
• ▲
▼
Hallo,

ich habe hier einen SST25 von Microchip.

Die Lese-Funktion ist Ok,(bestätigt durch ReadChipId()). Die 
Löschfunktion für die Sektoren geht auch (nach jedem Aufruf stehen 0xFF 
im Speicher).

Die Schreib-Funktion geht bei folgendem Szenario (scheinbar):
1. Initialisierung des SPI
2. Löschen des Sektors
3. Schreiben von ein paar Bytes
4. Lesen der Bytes

Danach stehen immer die richtigen Bytes im Lese-Puffer (welcher zuvor 
mit Nullen initialisiert wurde).

Und jetzt wirds merkwürdig:
Wenn ich nun 2. und 3. entferne, das Ganze neu compiliere/linke und 
aufspiele (STM32F107), dann gibt mir die Lese-Funktion nur 0xFF zurück. 
Und das obwohl doch zuvor bereits die richtigen Werte aus dem Flash 
gelesen wurden.

Ich kapier das einfach nicht.

PS: Mit dem Logic-Analyzer sieht man übrigens, wie er zunächst die Bytes 
in den Flash reintaktet und auch wieder korrekt ausliest.
Nach dem Neuerstellen liest er dann nur noch 0xFF, was man dann 
ebenfalls sieht.

Ich könnte hier jetzt den ganzen Mist reinstellen, aber ich fürchte das 
ist dann soviel, dass sich das sowieso keiner ansieht.

Deshalb zunächst mal die Frage, ob jemand mit diesen Flash-Speichern 
schoneinmal ähnliche Probleme hatte und wie er das dann gelöst hat?

Danke und Gruß Pit
Gast #4501448
Lesenswert?
• ▲
▼
Es hat sich gezeigt, dass das Chip-Enable Signal bei einem bestimmten 
Kommando an den SST25 'ein paar Takte' zu früh wieder auf High geht.
Dadurch wird das Kommando vom STT25 nicht verarbeitet und die komplette, 
übertragene Kommando-Sequenz somit verfälscht.

Das Ganze ist etwas merkwürdig, da ich den SPI ohne Interrupts verwende 
und die Lese-/Schreibfunktion erst nach erfolgreichem Versand/Empfang 
der Daten wieder zurückkehrt. Und auch erst dann wird Chip-Enable in der 
Firmware wieder zurückgesetzt. Das Beobachtete kann also eigentlich bei 
diesem sequentiellen Verlauf garnicht vorkommen.

Woran das jetzt genau liegt ist mir nicht bekannt.

Als Workaround warte ich einfach 30 Takte bevor ich Chip-Enable auf High 
setzte. Nicht toll, aber es geht.

Gruß Pit

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.