Forum: Mikrocontroller und Digitale Elektronik Lese-/Schreib-Problem SST25 Flash-Speicher


von Pit (Gast)


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

von Pit (Gast)


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

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.