Para quem, baseado na simplicidade na operação de pendrives, não entende como uma memória flash seja assim tão "fresca" para se gravar como eu venho dizendo,
este artigo na Wikipedia dá alguns esclarecimentos.
Um resumo (acrescentando coisas que eu sei de outras fontes):
- Só é possível mudar um bit qualquer de uma EEPROM (incluindo as flash) para "1" durante uma operação de apagamento. Durante a escrita só é possível gravar "0"s. É por isso que uma memória apagada apresenta "FF"s (11111111 11111111).
- Existem duas tecnologias: "NOR" e "NAND". A "NOR" é mais flexível na programação e leitura (permite até Execute In Place), mas é mais cara e por isso menos comum. Eu acredito que todas as flash usadas em DVD players sejam NAND.
- Uma memória NAND só pode ser apagada por setores/blocos. E esses setores não costumam ser menores que 8K, mas em sua maioria tem de 32K a 64K (pelo menos para memórias de 2MB).
- Uma memória NAND pode ser programada por "páginas" tão pequenas quanto 512 bytes, sempre tendo em mente que 1)A página tem que estar apagada antes 2)Se você quiser escrever outra coisa no mesmo lugar precisa apagar o bloco inteiro antes.
- Uma EEPROM que pode ser programada um byte de cada vez chama-se "byte-programmable" (é o caso das memórias que guardam as preferências do usuário). A maioria das flash é "page-programmable".
Exemplos flash "byte-programmable" AM28F020 (256 KB)
Exemplos flash que podem ser programadas byte por byte mas não são "byte-programmable" porque requerem que o setor seja apagado antes.
EN25F80 (2MB - SPI) - Usada no Eletrovision EV-597
Rictad,A flash do seu aparelho (MXIC MX29LV160C) parece ser capaz de programação byte-por-byte. Isso não está absolutamente claro no datasheet. Mas uma coisa está clara (página 16):
Programming is allowed in any sequence and across
sector boundaries. A bit cannot be programmed from a
"0" back to a "1". Attempting to do so may cause the
device to set Q5 to "1", or cause the Data# Polling algo-
rithm to indicate the operation was successful. However,
a succeeding read will show that the data is still "0".
Only erase operations can convert a "0" to a "1".
Isso significa que, de qualquer forma, sua flash não é exatamente "byte-programmable". A CPU pode até escrever em algum lugar onde previamente haviam "FF"s, mas
não pode mudar esse valor a não ser usando um ciclo "copia, apaga, muda e cola".
Até passou pela minha cabeça uma teoria: Será que o MTKFlash realmente está lendo a flash ou está lendo uma cópia da flash na RAM? Mas eu descartei essa possibilidade porque:
1)O firmware vai para a RAM com o bloco RISC descompactado. Ter duas cópias do firmware na RAM seria um desperdício de memória
2)Para isso o aparelho precisaria estar praticamente todo "ativo". A maioria dos parelhos permite a leitura do firmware mesmo em standby.