Memória Flash: A página inteira precisa ser apagada antes de gravar apenas alguns bytes?


16

Uma pergunta fácil, espero! Não estou encontrando respostas definitivas ...

Estou escrevendo drivers para um chip de memória flash SST25VF064C . Ele se comunica via SPI.

Como toda memória flash (que eu saiba), ela precisa ser apagada (todos os bits = 1) antes de poder ser gravada (bits = 0). Para esse chip, a menor área que pode ser apagada é de 4kB.

Sua memória é dividida em páginas de 256 bytes. Com uma instrução, posso escrever de um byte a 256 bytes em uma página especificada. Não preciso iniciar no limite da página: o primeiro local a ser programado pode estar em qualquer lugar da página.

A regra geral é garantir que a página seja apagada antes de escrevê-la. Mas posso escrever em uma página previamente escrita, se evitar as áreas já escritas? Por exemplo, digamos que eu armazene dados nos bytes 0-127. Mais tarde, posso gravar outros 128 bytes na mesma página, se eu iniciar no byte 128?

Respostas:


13

Sim, após qualquer apagamento, você pode usar qualquer número de operações separadas para gravar dados (alterando os bits de 1 para 0) antes da próxima operação de apagamento.

Você pode até reescrever um local previamente escrito, desde que você esteja limpando apenas mais bits. Isso pode ser útil para manter coisas como bitmaps de alocação.


Excelente, obrigado! Era exatamente isso que eu estava procurando.
bitsmack

Observe que alguns chips não gostam que você escreva um byte anterior após outro, observando várias folhas de dados; no entanto, isso parece variar entre os dispositivos.
Vality 24/07

1
@ Qualidade: Você pode dar um exemplo disso?
Dave Tweed

3
Os MCUs @DaveTweed NXP LPC21xx e LPC23xx têm um byte de soma de verificação para cada 16 bytes de memória; você deve gravar todos os 16 bytes de uma vez porque a soma de verificação está gravada nessa operação. Se você vier mais tarde e tentar escrever zeros na mesma "linha", os zeros serão gravados, mas uma nova soma de verificação será gravada sobre a anterior; as chances são de que ele tenha alguns 1's onde o anterior tinha 0s, portanto a soma de verificação se torna inválida. Não me lembro se o MCU permite que você leia uma linha com uma soma de verificação inválida. Enfim, isso seria um exemplo de "variar entre dispositivos".
Guillermo Prandi

1
"qualquer número de operações separadas para escrever ... a próxima operação de exclusão." Observe que algumas partes, principalmente as memórias flash incorporadas nas MCUs, indicarão um número máximo de gravações antes que uma exclusão seja necessária. Presumivelmente, violar esse limite arriscará corromper outras áreas da memória, por isso é importante observar esses limites.
22419 ajb

5

posso escrever em uma página escrita anteriormente, se evitar as áreas já escritas?

Se eu entender p. 16 da folha de dados corretamente, está dizendo: Com esse chip específico, você não deve gravar em uma página previamente escrita, mesmo se evitar as áreas já gravadas.

detalhes

A folha de dados do chip de memória flash SST25VF064C na p. 16 diz "A instrução de programa da página programa até 256 bytes de dados na memória. O endereço da página selecionado deve estar no estado apagado (FFH) antes de iniciar a operação do programa da página".

Suponho que, portanto, "A página selecionada inteira deve estar no estado apagado (todos os bytes na página FFh) antes de iniciar uma operação do Programa de Página". A SST ou a Microchip divulgou alguma documentação que esclareça essa sentença irritantemente ambígua?

Na minha experiência, o fabricante de todos os chips flash MLC e de alguns chips flash SLC mais recentes exige que, uma vez que uma página tenha sido escrita, a página precise ser apagada antes que a página seja escrita novamente, mesmo que você queira alterar apenas 1 bit para um 0 bit. (Isso é chamado de "regra de gravação única" no artigo do YAFFS .)

Na minha experiência, todos os chips flash antigos permitem alterar qualquer bit de 1 para 0 bit sem um ciclo de apagamento, mesmo que esse bit esteja em uma página ou mesmo em um byte que já tenha outros bits programados em zero - um a página do flash pode ser programada várias vezes entre as apagadas. (Isso é chamado de "gravação múltipla" no artigo do YAFFS).

A folha de dados do fabricante é uma promessa condicional que o fabricante faz para você. Contanto que você siga todas as recomendações da folha de dados, o fabricante promete que o chip funcionará conforme especificado. Suspeito que se você programar uma página escrita anteriormente, evitando as áreas já gravadas, há uma boa chance de que uma leitura imediata possa fornecer os dados que você espera - os bytes recém-gravados são os valores que você acabou de escrever, e os outros bytes provavelmente não são alterados. No entanto, como isso não segue as recomendações da folha de dados, você não pode mais confiar em todas as promessas da folha de dados. Eu ouço rumores de que essa atividade não sancionada faz com que o tempo e a resistência de retenção de dados sofram, devido a distúrbios no programa, superprogramação, interceptação de carga, efeitos semelhantes ao martelo de linha DRAM , etc.

"O esquema de uso de memória influencia a taxa de erro de bits. Programação de páginas parciais, programação não seqüencial de páginas dentro do bloco, leitura excessiva por bloco sem apagar, bem como número não igual de operações de leitura em um único bloco aumenta o número de leituras perturbar erros ". - Michal Jedrak. "Memória Flash NAND em sistemas embarcados".

"O distúrbio do programa ocorre quando um bit é programado involuntariamente de" 1 "para" 0 "durante um evento de programação de página. Esse erro de bit pode ocorrer na página que está sendo programada ou em outra página do bloco. o bloco durante a programação da página pode fazer com que uma pequena quantidade de corrente entre nas células de memória próximas. Tentativas repetidas de programação parcial da página continuarão agravando essa condição. " - Douglas Sheldon e Michael Freie. "Perturbar testes em memórias flash" . p. 8, 9.

"O distúrbio do programa acontece quando um bit é programado acidentalmente (1 a 0) durante uma operação de programação. ... Essa condição é agravada pela programação aleatória no bloco e pela aplicação de várias gravações parciais nas páginas." "Yaffs NAND flash mitigação de falhas"


0

É altamente provável que o software de programação que você está usando já esteja gravando os 256 bytes "necessários". Ele "parece" como se estivesse dando a capacidade de gravar de um a 256 bytes, mas suspeito que o que está fazendo seja OR-by (s) byte (s) que você deseja com uma "máscara" de 256 "FF". Se isso estiver correto, você poderá "com segurança" escrever qualquer byte uma vez , sem precisar apagar todos os bytes de 4K. Se uma soma de verificação for gravada fora do seu controle, provavelmente, uma soma de verificação inválida será criada quando você escrever outro byte em um segmento gravado anteriormente. As implicações disso dependem do chip.

Se o seu software de programação não executar o "OR", você poderá fazer isso sozinho. Limpe um segmento de 256 bytes, escreva os bytes na (s) posição (ões) correta (s), OU com uma máscara de 256 bytes de FFs e escreva o segmento na página desejada.

Se um dos métodos funciona com um chip em particular, pode ser facilmente determinado por você. Escreva nos primeiros 128 bytes, escreva nos segundos 128 bytes, verifique se os primeiros 128 bytes NÃO estão "bagunçados"!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.