Tradução: Maria Elisa - Assessoria em Inglês e Alemão
Revisão: Renato Kodaira
A memória de dados EEPROM dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A é acessível para leitura e escrita durante a operação normal (toda a faixa de VDD). Esta memória não é diretamente mapeada no espaço de arquivos do registrador. Ao invés disso, ela é endereçada indiretamente através dos Registradores de Funções Especiais (SFRs). Existem quatro SFRs utilizados para ler e escrever nesta memória. Estes registradores são:
-
EECON
-
EECON2 (Não é um registrador fisicamente implementado)
-
EEDATA
-
EEADR
a EEDATA contém os dados de 8 bits para escrita/ leitura e a EEADR contém o endereço da posição na qual a EEPROM é acessada. os dispositivos PIC16F627A/628A possuem 128 bytes de dados EEPROM com uma faixa de endereços do 0h até 7Fh. O dispositivo PIC16F648A possui 256 bytes de dados EEPROM, com uma faixa de endereços de 0h até FFh.
A memória de dados EEPROM permite a leitura e a escrita do byte. A escrita de um byte apaga automaticamente a posição e escreve os novos dados (erase before write = apagar antes da escrita). A memória de dados EEPROM é projetada para muitos ciclos de apagar/ escrever. O tempo de escrita é controlado por um temporizador on-chip (no próprio chip). O tempo de escrita irá variar com a voltagem e a temperatura, e também de chip para chip. Por favor, consulte as especificações AC para limites exatos.
Quando o dispositivo possui proteção de código, a CPU pode continuar a ler e escrever na memória de dados EEPROM. Um programador de dispositivo não pode mais acessar esta memória.
Informações adicionais sobre a memória EEPROM estão disponíveis no "Manual de Referência de Média Ordem PIC®" (DS33023).
|
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
EEDAT7 |
EEDAT6 |
EEDAT5 |
EEDAT4 |
EEDAT3 |
EEDAT2 |
EEDAT1 |
EEDAT0 |
bit 7 |
|
|
|
|
|
|
bit 0 |
|
bit 7-0
|
EEDATn: Valor do byte para a Escrita ou a Leitura da posição da memória de dados EEPROM.
|
|
Legenda:
R = bit de leitura
W = bit de escrita
U = bit não implementado (unimplemented), lido como '0'
-n = valor na POR
'1' = bit está ativado
'0' = bit está apagado
x = bit é desconhecido |
|
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
R/W-x |
EEADR7 |
EEADR6 |
EEADR5 |
EEADR4 |
EEADR3 |
EEADR2 |
EEADR1 |
EEADR0 |
bit 7 |
|
|
|
|
|
|
bit 0 |
|
bit 7 |
PIC16F627A/628A |
|
Endereço não Implementado: Deve ser colocado em '0' |
|
PIC16F648A |
|
EEADR: Colocado em '1' especifica as 128 posições superiores (128 - 256) da Operação de Leitura/ Escrita da EEPROM
|
bit 6-0
|
EEADR: Especifica uma das 128 posições da Operação de Leitura/ Escrita da EEPROM
|
|
Legenda:
R = bit de leitura
W = bit de escrita
U = bit não implementado (unimplemented), lido como '0'
-n = valor na POR
'1' = bit está ativado
'0' = bit está apagado
x = bit é desconhecido |
13.1 EEADR
O registrador EEADR do PIC16F648A endereça 256 bytes de dados EEPROM. Todos os oito bits no registrador (EEADR<7:0>) são requisitados.
O registrador EEADR dos PIC16F627A/628A endereça somente os primeiros 128 bytes de dados EEPROM, então só sete dos oito bits no registrador (EEADR<6:0>) são requisitados. O bit superior tem seu endereço decodificado. Isto significa que este bit deve estar sempre em '0' para assegurar que o endereço esteja no espaço de memória de 128 bytes.
O EECON1 é o registrador de controle com quatro bits de baixa ordem implementados fisicamente. Os quatro bits superiores são inexistentes e são lidos como '0's.
Os bits de controle RD e WR iniciam a leitura (read) e a escrita (write), respectivamente. Estes bits não podem ser apagados, somente ativados, pelo software. Eles são apagados pelo hardware na conclusão da operação de leitura ou escrita. A inabilidade de apagar o bit WR com o software previne o encerramento acidental e prematuro da operação de escrita.
O bit WREN, quando ativado, permitirá uma operação de escrita. Ao se ligar o equipamento, o bit WREN está apagado. O bit WRERR é ativado quando uma operação de escrita é interrompida por uma Reinicialização MCLR ou por uma Reinicialização de esgotamento de tempo do WDT durante a operação normal. Nestas situações, após a reinicialização, o usuário pode checar o bit WRERRR e reescrever a posição. Os dados e o endereço não serão modificados nos registradores EEDATA e EEADR.
O bit sinalizador de interrupção EEIF no registrador PIR1 é ativado quando a escrita estiver completa. Este bit deve ser apagado pelo software.
O EECON2 não é um registrador físico. A leitura do EECON2 retornará todos os bits como zeros. O registrador EECON2 é utilizado exclusivamente na sequência de escrita dos dados EEPROM.
REGISTRADOR 13.3: EECON1 - REGISTRADOR 1 DE CONTROLE DA EEPROM (ENDEREÇO:9Ch)
|
U-0 |
U-0 |
U-0 |
U-0 |
R/W-x |
R/W-0 |
R/S-0 |
R/S-0 |
--- |
--- |
--- |
--- |
WRERR |
WREN |
WR |
RD |
bit 7 |
|
|
|
|
|
|
bit 0
|
|
bit 7-4
|
Não implementado: lido como '0'
|
bit 3 |
WRERR: Bit Sinalizador de Erro na EEPROM |
|
1 = Uma operação de escrita é encerrada prematuramente (qualquer Reinicialização MCLR, qualquer Reinicialização WDT durante a operação normal, ou Reinicialização BOR) |
|
0 = Operação de escrita completada.
|
bit 2 |
WREN: Bit de Habilitação da Escrita na EEPROM |
|
1 = Permite ciclos de escrita |
|
0 = Inibe a escrita na memória de dados EEPROM
|
bit 1 |
WR: Bit de Controle da Escrita |
|
1 = Inicia um ciclo de escrita. (O bit é apagado pelo hardware assim que a escrita estiver completa. O bit WR somente pode ser ativado - não apagado - pelo software). |
|
0 = O ciclo de escrita na memória de dados EEPROM está completo.
|
bit 0 |
RD: Bit de Controle da Leitura |
|
1 = Inicia uma leitura da EEPROM (A leitura leva um ciclo. O RD é apagado pelo hardware. O bit RD somente pode ser ativado - não apagado - pelo software) |
|
0 = Não inicia uma leitura da EEPROM
|
|
Legenda:
R = bit de leitura
W = bit de escrita
U = bit não implementado (unimplemented), lido como '0'
-n = valor na POR
'1' = bit está ativado
'0' = bit está apagado
x = bit é desconhecido |
13.3 Leitura da Memória de Dados EEPROM
Para se ler a posição da memória de dados, o usuário deve escrever o endereço no registrador EEADR e depois ativar o bit de controle RD (EECON1<0>). Os dados estão disponíveis, no ciclo imediatamente seguinte, no registrador EEDATA, portanto eles podem ser lidos na próxima instrução. O EEDATA manterá este valor até uma outra leitura, ou até que ele seja escrito pelo usuário (durante uma operação de escrita).
EXEMPLO 13.1: LEITURA DE DADOS DA EEPROM
BSF STATUS, RP0 ;Banco 1
MOVLW CONFIG_ADDR
MOVWF EEADR ;Endereço para leitura
BSF EECON1, RD ;Leitura EE
MOVF EEDATA, W ;W = EEDATA
BCF STATUS, RP0 ;Banco 0
13.4 Escrita na Memória de Dados EEPROM
Para se escrever em uma posição da memória de dados EEPROM, o usuário deve primeiramente escrever o endereço no registrador EEADR e os dados no registrador EEDATA. Depois o usuário deve seguir uma sequência específica para inicializar a escrita em cada byte.
BSF STATUS, RP0 ;Banco 1
BSF EECON1, WREN ;Habilita escrita
BCF INTCON, GIE ;Desabilita interrupções
BTFSC INTCON,GIE ;Ver AN576
GOTO $-2
;******** Início da sequência requerida ********
MOVLW 55h ;
MOVWF EECON2 ;Escreve 55h
MOVLW AAh ;
MOVWF EECON2 ;Escreve AAh
BSF EECON1,WR ;Ativa o bit WR
;******** Fim da sequência requerida ********
BSF INTCON, GIE ;Habilita interrupções
A escrita não inicializará se a sequência acima não for seguida com exatidão (escrever a 55h no EECON2, escrever a AAh no EECON2, depois ativar o bit WR) para cada byte. Recomendamos fortemente que as interrupções sejam desabilitadas durante este segmento de código. Uma contagem de ciclos é executada durante a sequência requerida. Qualquer número que não for igual à quantidade de ciclos necessária para executar a sequência requerida anulará a escrita dos dados na EEPROM.
Além disso, o bit WREN no EECON1 deve estar ativado para habilitar a escrita. Este mecanismo previne escritas acidentais na memória de dados EEPROM devido a uma eventual (inesperada) execução de código (i.e. programas perdidos). O usuário deve manter o bit WREN apagado o tempo todo, exceto ao atualizar a EEPROM. O bit WREN não é apagado pelo hardware.
Após iniciada uma sequência de escrita, apagar o bit WREN não afetara este ciclo de escrita. O bit WR terá sua ativação inibida a menos que o bit WREN seja ativado.
Ao se completar o ciclo de escrita, o bit WR é apagado pelo hardware e o bit EE de Sinalização de Interrupção por Finalização de Escrita (EEIF) é ativado. O usuário pode tanto habilitar esta interrupção como inativar este bit. O bit EEIF nos registradores PIR1 deve ser apagado pelo software.
13.5 Verificação da Escrita
Dependendo da aplicação, é boa prática de programação verificar se o valor escrito na Memória de Dados EEPROM (Exemplo 13.3) corresponde ao desejado. Isso deve ser feito nas aplicações em que um bit EEPROM será solicitado quase até o seu limite de especificação.
BSF STATUS, RP0 ;Banco 1
MOVF EEDATA, W
BSF EECON1, RD ;Lê o valor que
;foi escrito
;
;O valor escrito (no registrador W) e
;o que foi lido (em EEDATA) são o mesmo?
;
SUBWF EEDATA, W
BTFSS STATUS, Z ;A diferença é 0?
GOTO WRITE_ERR ;NÃO, Erro na escrita
;SIM, Escrita bem sucedida
;Continuar o programa
13.6 Proteção contra Escrita Espúria
Existem condições nas quais o dispositivo pode não aceitar escrever na memória de dados EEPROM. A fim de proteger contra escritas espúrias na EEPROM, vários mecanismos têm sido inseridos. Na ativação, o WREN é apagado. Também quando habilitado, o Temporizador de Ativação (72 ms de duração) previne a escrita na EEPROM.
A sequência de inicialização da escrita e o bit WREN juntos ajudam a prevenir uma escrita acidental durante um brown-out, uma falha de energia ou um mal-funcionamento do software.
A memória de dados EEPROM consiste em uma matriz de bytes endereçáveis de alta confiabilidade que foi otimizada para o armazenamento de informações que se alteram frequentemente (p. ex. variáveis de programa ou outros dados que são carregados com frequência). Quando as variáveis em uma seção mudam frequentemente, enquanto as variáveis em uma outra seção não se alteram, é possível exceder o número total de ciclos de escrita na EEPROM (especificação D124) sem exceder a quantidade total de ciclos de escrita em um único byte (especificações D120 e D120A). Se for este o caso, então uma revalidação (refresh) da matriz deve ser executada. Por este motivo, as variáveis que não se alteram frequentemente (tais como constantes, IDs, calibrações, etc.) devem ser armazenadas na memória de programa Flash.
Uma rotina simples de atualização da memória de dados EEPROM é apresentada no Exemplo 13.4.
Nota:
Caso a memória de dados EEPROM seja somente utilizada para armazenar constantes e/ou dados que raramente se alteram, uma atualização da matriz provavelmente não é necessária. Veja a especificação D124.
BANKSEL 0X80 ;Seleciona o Banco 1
CLRF EEADR ;Inicia no endereço 0
BCF INTCON, GIE ;Desabilita as interrupções
BTFSC INTCON, GIE ;Veja AN576
GOTO $ - 2
BSF EECON1, WREN ;Habilita a escrita na EEPROM
Loop
BSF EECON1, RD ;Recupera o dado em EEDATA
MOVLW 0x55 ;Primeiro passo da sequência requerida
MOVWF EECON2 ;
MOVLW 0xAA ;Segundo passo da sequência requerida
MOVWF EECON2
BSF EECON1, WR ;Inicia a sequência de escrita
BTFSC EECON1, WR ;Aguarda o final da escrita
GOTO $ - 1
#IFDEF __16F648A ;256 bytes no 16F648A
INCFSZ EEADR, f ;Verifica o final da memória
#ELSE ;128 bytes no 16F627A/628A
INCF EEADR, f ;Próximo endereço
BTFSS EEADR, 7 ;Verifica o final da memória
#ENDIF ;Fim da compilação condicional
GOTO Loop ;Repete para todas as posições
BCF EECON1, WREN ;Desabilita a escrita na EEPROM
BSF INTCON, GIE ;Habilita as interrupções (opcional)
13.8 Operação da Memória de Dados EEPROM durante a Proteção de Código
Quando o dispositivo possui proteção de código, a CPU está apta a executar a leitura e a escrita dos dados na memória de dados EEPROM.
TABELA 13.1: REGISTRADORES/BITS ASSOCIADOS À MEMÓRIA DE DADOS EEPROM
Endereço |
Nome |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
Valor na Reinicialização de Power-On |
Valor em Todas as Outras Reinicializações |
9Ah |
EEDATA |
Registrador de Dados da EEPROM |
xxxx xxxx |
uuuu uuuu |
9Bh |
EEADR |
Registrador de Endereço da EEPROM |
xxxx xxxx |
uuuu uuuu |
9Ch |
EECON1 |
--- |
--- |
--- |
--- |
WRERR |
WREN |
WR |
RD |
---- x000 |
---- q000 |
9Dh |
EECON2(1) |
Registrador 2 de Controle da EEPROM |
---- ---- |
---- ---- |
Legenda:
x = desconhecido
u = inalterado
- = não implementado, lido como '0'
q = o valor depende da condição
células sombreadas = não utilizadas pela memória de dados EEPROM
Nota 1:
O EECON2 não é um registrador físico.