Forum: Mikrocontroller und Digitale Elektronik 4KB Sector Erase bei einem SST25V Flash


von David H. (davidm)


Lesenswert?

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?

: Verschoben durch Moderator
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.