Hallo,
ich schreibe gerade einen Flash qspi Treiber, der auf anderen Code
basiert.
Ich moechte die Write Funktion davon benutzen, nur wird da irgendwas von
pages geschrieben, das ich nicht verstehe.
1
/*
2
* This function writes to the serial Flash connected to the QSPI interface.
3
* All the data put into the buffer must be in the same page of the device with
4
* page boundaries being on 256 byte boundaries.
5
*
6
* @param Address contains the address to write data to in the Flash.
7
* @param ByteCount contains the number of bytes to write.
8
* @param Command is the command used to write data to the flash. QSPI
9
* device supports only Page Program command to write data to the
10
* flash.
11
* @param Pointer to the write buffer (which is to be transmitted)
12
*/
Also, ich moechte einen uint32_t buffer unbestimmter Groesse in Flash
schreiben.
Was muss ich da mit den Pages beachten?
Oder kann ich meine Flash-Write Funktion einfach so aufrufen:
1
write(addr,buf_size,WRITE_CMD,buffer);
In den Beispielcode wird so aufgerufen:
1
/*
2
* Number of flash pages to be written.
3
*/
4
#define PAGE_COUNT 32
5
6
/*
7
* Write the data in the write buffer to the serial Flash a page at a
olpo schrieb:> Also, ich moechte einen uint32_t buffer unbestimmter Groesse in Flash> schreiben.> Was muss ich da mit den Pages beachten?
Folgende Gedankenstütze hilft:
- Das Lesen ist meist völlig frei
- Schreiben und Löschen geht nur in - nach im Datenblatt
vorgeschriebenen - Blöcken
olpo schrieb:> Was ist mit FlashErase().> Kann die denn auch nur in Page-Groessen erasen?
Wenn du verrätst welchen Baustein du genau verwendest bzw. ein
Datenblatt anhängst, kann man das nachschauen.
Schau halt mal ins Datenblatt. Jeder Flash Speicher ist in Pages,
Sectors, Blocks usw. aufgeteilt. Bei jedem etwas anders. Die meisten SPI
Flashes haben 256 Byte große Pages, gelöscht werden muss aber in
Sektoren, meist 4k oder gar 64k groß.
Du musst die Daten vorher halt auslesen und dann wieder schreiben, wenn
du nur ein paar Pages oder gar Bytes ändern willst.
Für Byte-Write nimmt man EEPROM. Adesto DataFlash ist noch so ein
Zwischending, da sind die zu löschenden Bereiche kleiner. Die sind aber
außer zu sich selbst zu nix anderem kompatibel.
olpo schrieb:> Warum braucht der einen Write-Buffer?> Und was will er da erasen?
Meine Güte.. du hast doch den Quellcode vor dir.. liest doch einfach
nach was er macht?
olpo schrieb:> Warum braucht der einen Write-Buffer?> Und was will er da erasen?
Meine Güte.. du hast doch den Quellcode vor dir.. liest doch einfach
nach was er macht?
Also, man kann nicht sagen, daß bei einem Read auf ein Flash irgendwas
gelöscht wird?
Hier noch die Funktion, falls da jemand etwas bekannt vorkommt, wäre es
nett, wenn er seine Gedanken mit mir teilt.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.