sexta-feira, agosto 15, 2008

Microcontroladores - Parte 4

Na parte anterior falamos na memória Flash, que é normalmente utilizada para armazenar o programa (firmware) do microcontrolador. Antes de continuarmos a ver as funcionalidades tipicamente intergradas nos microcontroladores, vamos ver como o programa pode ser gravado na memória Flash.

Praticamente todos os microcontroladores permitem fazer a gravação colocando sinais apropriados em determinados pinos. Existem duas variações básicas (não necessariamente excludentes):

Gravação Externa ao Circuito

Uma forma simples é colocar o microcontrolador (ou a própria memória Flash se ela for externa) em um gravador apropriado. A figura abaixo mostra o McFlash da Mosaico, que permite gravar diversos modelos da família PIC:


Este gravador, como a maioria dos gravadores externos, é conectado a um PC (no caso através do conector serial na parte inferior direita da figura). O conteúdo a ser gravado é transferido do PC para o gravador através de um software especial. Este software permite também apagar e ler a Flash.

Este tipo de gravação é interessante para pequenos testes (quando o microcontrolador vai ser colocado em uma breadboard) ou para uma produção em série de pequena escala (para gravação em maior escala existem gravadores capazes de fazer várias gravações em paralelo).

Gravação no Circuito

A maioria dos microcontroladores atuais permite que um gravador externo seja usado mesmo com o microcontrolador conectado ao circuito. Para isto é necessário seguir algumas recomendações do fabricante e colocar no circuito um conector para ligação do gravador:


Esta forma de gravação é mais prática no desenvolvimento, pois não é necessário ficar tirando e recolocando o microcontrolador.

Em muitos casos o gravador permite também depurar o firmware. A figura abaixo mostra alguns modelos de gravadores com capacidade de depuração:

Existe até uma certa padronização para o conector de gravação, o chamado conector JTAG.

Embora os gravadores nas fotos possuam uma razoável inteligência (sim, eles contém microcontroladores dentro deles) muitas vezes é viável construir um gravador simples utilizando um simples buffer/conversor de nível para conectar pinos da porta paralela de um PC ao conector de gravação. Neste caso o software no PC precisa comandar com precisão os sinais de gravação.

Gravação Sob Controle do Firmware

Diversos microcontroladores permitem que a sua Flash seja gravada por controle do software. Isto possibilita o "santo graal" dos projetos com microcontrolador: a atualização do firmware em campo sem a necessidade de conectar um gravador externo. Nos casos em que o dispositivo possui uma forma de comunicação externa (por exemplo, um modem GPRS) é potencialmente possível fazer esta atualização de forma "automágica" durante a operação normal.

Existem, é claro, vários complicadores. Não é possível atualizar o software que está executando, portanto pelo menos uma parte da rotina de atualização precisa estar em uma área distinta. O grande pesadelo é algo dar errado durante a atualização e o dispositivo virar um "tijolo". Por este motivo o novo firmware é normalmente colocado inicialmente em uma área temporária e gravado ou ativado somente após ter sido recebido completamente e conferido. Nos casos em que exista memória suficiente pode-se ter duas versões distintas armazenadas na Flash, facilitando a recuperação em caso de problemas.

Uma versão mais simplificada é o chamado bootloader. Neste caso existe uma parte do firmware dedicada somente a receber e gravar a aplicação propriamente dita. Neste caso o processo de gravação não faz parte da operação normal, é preciso entrar em um modo especial de operação. Alguns microcontroladores já trazem esta funcionalidade pré-gravada em uma área protegida da Flash.

Protegendo o Firmware

Uma primeira proteção importante é contra o apagamento acidental. Nos casos em que a Flash pode ser gravada por controle do firmware os procedimentos são normalmente complexos para evitar que um software "perdido" se auto-modifique.

Um segundo tipo de proteção consiste em impedir a leitura do firmware através de um gravador externo, para evitar a sua duplicação ou engenharia reversa. Para isto existem uma espécie de "fusíveis" que podem ser "queimados" ao final da gravação e impedem a leitura externa. Em alguns casos estes fusíveis são irreversíveis em outros só podem ser desligados apagando todo o conteúdo da Flash.

Nenhum comentário: