Ich habe einen STM32, der zwei sehr ähnliche SPI-Blitze antreibt, einen N25Q und einen M25P .
Während mein Treiber mit dem N25Q tadellos zurecht kommt, funktioniert der M25P seltsamerweise nur "halb". Was passiert ist, dass, wenn ich eine Seite mit Bytes schreibe und diese Seite zurücklese, die vier MSB-Bits jedes Bytes 0 sind und die vier LSB-Bits jedes Bytes korrekt sind.
Was könnte dazu führen, dass die Hälfte der Bits 0 sind?
Haben Sie die betroffenen Speicherseiten vorher gelöscht? Für Flash-Speicher können Sie nur 1 in 0 ändern (das M25P-Datenblatt von oben gibt dies ausdrücklich auf Seite 22 an, beim N25Q auf Seite 12). Wenn also der M25P vorher mit 0x0f's gefüllt wurde, würden Sie genau dieses Ergebnis erhalten. Wenn Sie für beide denselben Schreibbefehl (0x02) verwenden, sollte alles in Ordnung sein. Die Verwendung des Dual- oder Quad-Modus würde dazu führen, dass 2 (oder 4) Bits falsch sind, aber kein halbes Byte. Da Sie vermutlich eine ganze Seite programmieren, denke ich, dass dies keine steckengebliebenen Adressbits sein können. Andere Ursachen für das Problem könnten sein: fehlender Blockkondensator für den Flash-IC oder falscher SPI-Modus (was zu seltsamen Ergebnissen führen kann, da Sie normalerweise Daten genau in dem Moment lesen, in dem sie sich ändern). Letzteres kann mit einem Logikanalysator oder einem Oszilloskop überprüft werden.
Ein offensichtlicher Grund ist, wenn Sie versuchten, Dual- und Quadraturdaten-Schnellschreibfunktionen zu verwenden, die für den N25Q entwickelt wurden und vom M25P nicht unterstützt werden. Aber ich vermute, das wissen Sie bereits.
Haben Sie für die M25P eine andere Anzahl von Dummy-Bits eingestellt? Dies würde möglicherweise erklären, was Sie sehen, wenn Sie jeweils ein Byte zurücklesen.
Ruslan Gerasimov