Hi,
ich traue es mir ja schon garnicht zu Fragen.
Ich habe hier einen Flash Speicher der in 4KB sectoren unterteilt ist,
bevor ich da hinein schreiben kann muss sicher gestellt sein das dieser
sector gelöscht ist.
Microchip hat da in seinem TCP Stack (SPIFlash.c) das so gelöst:
1 | #define SPI_FLASH_SECTOR_SIZE (4096ul)
|
2 | #define SPI_FLASH_SECTOR_MASK (SPI_FLASH_SECTOR_SIZE - 1)
|
3 | if((dwWriteAddr & SPI_FLASH_SECTOR_MASK) == 0)
|
4 | SPIFlashEraseSector(dwWriteAddr,ERASE_4K);
|
Schreibe ich nun auf diesen Sector so wird der Sector gelöscht:
1 | 524288 (0x00080000) (00000000 00001000 00000000 00000000) <- dwWriteAddr
|
2 | 4095 (0x00000FFF) (00000000 00000000 00001111 11111111) <- SPI_FLASH_SECTOR_MASK
|
1. Frage:
Wird der Sector gelöscht beim schreiben des ERSTEN Bytes in diesen
Sector?
oder wird beim schreiben des letzten Bytes in diesen Sector bereits der
nächste gelöscht? (wäre ja idiotisch)
2. Frage:
Warum wird in der oben genannten Funktion, mit den Variablen
SPIFlashEraseSector aufgerufen?
Weil (0x00080000 & 0x00000FFF) offensichtlich 0 ist?
Nur das würde doch bedeuten das er auf ein (0x00000FFF & 0x00000FFF)
wartet was einer 4095
und somit dem letzten Byte im
sector
3. Frage:
Die Microchip Appconfig wird im beispiel an Adresse 0x00 geschrieben,
und hier wieder das selbe spiel:
(0x00000000 & 0x00000FFF) scheint wieder ==0 und somit wird der flash
gelöscht.
Kann es sein das Flash erase jedesmal ausgeführt wird ausser an der
sector grenze?
Und vorallem hat soetwas nicht erheblich auswirkungen auf die lebenszeit
vom Flash?