Hallo zusammen Gibt es einen Standard, der das Protokoll und die verschiedenen Modi beschreibt, den viele Speicherbausteine implementieren: Command -> Address -> Dummy bytes -> Daten ... Der Command bestimmt, wie Daten gelesen/geschrieben werden. Z.B. FastRead( 0x0B) oder QuadIO (0xEB). Ist das ein Pseudostandard an den sich die meisten halten, oder gibt es da was richtiges?
Hi Es gibt die SFDP die von den meisten aktuellen QSPI Chips auch implementiert werden: https://www.macronix.com/Lists/ApplicationNote/Attachments/1870/AN114v1-SFDP%20Introduction.pdf Auch interessant zu dem Thema https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/mtd/spi-nor?h=v5.12-rc4 Matthias
avr schrieb: > Gibt es einen Standard, der das Protokoll und die verschiedenen Modi > beschreibt, den viele Speicherbausteine implementieren: > > Command -> Address -> Dummy bytes -> Daten ... > > Der Command bestimmt, wie Daten gelesen/geschrieben werden. Z.B. > FastRead( 0x0B) oder QuadIO (0xEB). Leider totales Chaos. Abgesehen von Write Enable, Write Disable, Read Status Reg., dem Urahn-Read 0x03 und Urahn-Page Program 0x02 kocht jeder sein eigenes Süppchen. Vielfach ähnlich, aber dann mit subtilen Unterschieden. Und bisweilen mit kleinen undokumentierten Gemeinheiten. Wenn's um die "schnelleren" Modi geht, wird's erst richtig phantasievoll. Aber das ist trotzdem alles noch halbwegs mit ein paar Tabellen halobwegs zu handhaben. Richtig lustig wird's bei OctoSPI ... Und das erwähnte SFDP hilft leider nur begrenzt. Eher ein großer Suppentopf, in dem man einfach alles und jedes Gemüse (schön klein geschnippelt) hineingeworfen hat. Sprich, da findet sich auch die exotischte Idee noch in Stein gemeißelt. Ganz abgesehen davon sind mir schon etliche Chips untergekommen, die lt. Datenblatt und Datecode SFDP-Daten drin haben sollten. Ja, das Kommando geht auch, nur leider herrscht in dem Datenblock gähnende Leere. Und mancher Hersteller macht aus dem Datenblock noch ein extra Geheimnis (so etwa: Contact factory for details ...). Bei OctoSPI kann man selbst die ID und auch die SFDP-Daten (wenn überhaupt vorhanden) nicht ohne diverse Versuche mit unterschiedlichen Parametern ermitteln, da das Kommando 1 oder 2 Byte lang, die Adressen 3 oder 4 Byte lang sein können und die Anzahl der Dummy-Bytes auch nicht festgelegt ist. Ach ja, die ID, machmal sind es drei Bytes, die endlos wiederholt werden, manchmal kommen nach den dreien nur noch lauter 0x00, manchmal noch eine "erweiterte ID". Da kommt Freude auf ...
Okay, danke - das habe ich fast schon vermutet. Ich habe auf JEDEC inzwischen zwei Standards gefunden, aber die decken nur einen kleinen Teil ab: JESD251A, JESD251-1
Ein Blick in JESD216D lohnt sich. Da gehen einem die Augen über ... Was aber praktisch immer problemlos geht: Nach Power-up per SPI (eine Leitung!) vom Anfang (ab Adresse 0) einen beliebig großen zusammenhängenden Block mit 0x03 lesen. Danach wird's kompliziert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.