Posts Tagged ‘ Memória ’

Escrevendo na EEPROM

Um microcontrolador de 8-bit (PIC, AVR, Intel 8051) é formado, normalmente, por uma a CPU, uma memória de armazenamento para o programa que será executado (geralmente flash), memória RAM  e um punhado de uma memória para armazenamento “permanente” de dados.

Essa última memória normalmente é EEPROM (a EEPROM pode ser substituida por outras tecnologias, mas são as mais comuns nos microcontroladores).

A idéia inicial seria ter um pequeno espaço onde dados poderiam ser escritos pelo microcontrolador, para serem acessados mais tarde, preservando seu conteúdo mesmo sem energia elétrica. Algo que a memória Flash já faz, com a “única” diferença de ser escrita em blocos e não bit a bit, economizando espaço.

Antes de falar da EEPROM, vou falar um pouquinho de PROM e EPROM, nada que não seja encontrado na Wikipedia.

A memória PROM, como a sigla em inglês já diz, pode ser escrita uma única vez e, depois disso, se torna de “apenas leitura”. Em alguns casos, isso pode ser suficiente para aplicação em que ela está inserida, mas em outros, pode não ser interessante.

Se, numa empresa que vende sistemas microcontrolados descobrisse que existe um erro no programa armazenado na PROM dos seus microcontroladores, ela não poderia alterar antes de enviar aos clientes. Para isso, surgiu a EPROM, que pode ser apagada, como o E (erasable) do seu nome diz.

A EPROM pode ser apagada com o uso de luz ultra-violeta forte incidente em uma pequena janela no topo do encapsulamento do circuito integrado, sendo possível solucionar o problema anterior.

eprom

Por fim, vieram as EEPROM, título do post de hoje. Esse tipo de memória pode ser apagada eletricamente, podendo ser utilizada não só como armazenamento do programa do microcontrolador como um espaço onde o próprio pode usar como armazenamento que pode ser reescrito diversas vezes.

Essas diversas vezes em que a EEPROM pode ser reescrita resumem-se à aproximadamente 100 mil (é só ver no datasheet do seu microcontrolador para saber quanto dura a sua… isso pode variar bastante), que significa que, se seu sistema escreve na EEPROM muitas vezes, ela pode parar de funcionar corretamente em algum momento, fazendo com que seu programa não escreva mais nela (mesmo que ele não perceba que não está escrevendo). Isso acontece pela tensão muito mais alta que o normal aplicada para poder apagar o que estava escrito.

Aí você pode me dizer: Mas a memória flash onde o programa do microcontrolador está pode parar de funcionar com 10 ou 100 vezes menos operações de escrita! Claro, claro, mas teoricamente você coloca o programa nela e depois não muda com muita frequência. Seria muito difícil alguém precisar regravar a memória flash mil ou 10 mil vezes.

Por isso, volto à questão da EEPROM, que, como fica à critério do seu programa quantas vezes ele vai escrever nela, em um dado momento não vai mais funcionar. Lembre-se que um microcontrolador pode fazer alguns milhões de operações em um segundo, se forem todas de escrita na EEPROM, lá se vai a sua memória.

Uma possível solução para fazer uma rotina de escrita na EEPROM é, antes de escrever os dados, verificar se eles já não estão escritos naquele lugar.

Se seu programa faz uma leitura analógica, por exemplo, a cada tempo T e após salva essa leitura na EEPROM, pode acontecer de diversas vezes a última leitura ser idêntica à atual, fazendo com que você force uma escrita onde não seria preciso, diminuindo a vida útil da sua memória.

Anúncios