As Memórias Flash
De uma forma geral, as memórias do tipo Flash se caracterizam por não necessitarem de alimentação para manter seu conteúdo (são não voláteis) e permitirem a sua alteração ocasional.
A leitura da memória Flash não costuma envolver cuidados especiais (porém ela é mais lenta que a memória Ram). A operação de escrita é um pouco mais complexa e permite apenas mudar bits do estado '1' para o estado '0'. Para retornar os bits em '0' para '1' é necessária uma operação de apagamento, que é lenta e tipicamente afeta muitas posições de memória.
O número de escritas/apagamentos é limitado; a Atmel garante um mínimo de 10000 operações no ATmega328.
Usando Dados na Flash do ATmega328
Como dito no início, o ATMega328 só é capaz de executar instruções que estejam na Flash (consequência da sua arquitetura Harvard). Nada impede, é claro, de colocar bytes arbitrários na Flash. Entretanto, usar estes dados requer um procedimento especial. Afinal, na arquitetura Harvard, as vias de endereços e dados são separadas para Ram e Flash. No primeiros microcontroladores PIC, por exemplo, era impossível acessar diretamente o conteúdo da Flash; constante tinham que ser geradas executando código.
Felizmente o ATmega328 (e outros microcontroladores da família AVR) possuem a instrução LPM (Load Program Memory). Esta instrução copia o byte da Flash apontado pelo registrador Z para um registrador de uso geral (de onde pode ser escrito na Ram se necessário) e, opcionalmente, incrementa Z para apontar para a posição seguinte.
Gravando a Flash
Como colocar um programa inicialmente na Flash do ATmega328? Existem três maneiras básicas:
- Programador paralelo externo: esta opção requer colocar +12V no pino de reset e fazer um "sapateado" complexo em vários outros pinos. É, portanto, mais adequado para a programação fora do circuito.
- Programador serial (SPI) externo: esta opção não requer tensões especiais e utiliza apenas três pinos (além do reset), sendo viável de ser usada sem retirar o ATmega328 do circuito.
- Programação por software: através de instruções especiais é possível o firmware regravar a Flash.
Além de programar a Flash, estes procedimentos permitem programar também a EEProm, alguns bytes especiais de configuração (chamados de fuse - fusíveis) e os bits de Lock que permitem travar a leitura e reprogramação da Flash. Uma vez travada a reprogramação, a única opção é fazer um apagamento total, que limpa toda a memória e os fusíveis.
Não está nos meus planos brincar com o programador paralelo. Já com o serial pretendo testar três opções "faça você mesmo": usando um Arduino, usando um adaptador ligado à porta paralela do PC e montando um programador que se conecta a uma porta USB do PC.
Vou começar, porém, investigando um pouco a programação por software, examinando o Bootloader do Arduino a partir do próximo post.
Nenhum comentário:
Postar um comentário