Processador atmel
1. Funcionamento bootloader no processador atmel
O bootloader é um software que está inserido na memória flash, este é sempre executado primeiramente pelo microcontrolador após um Reset (Boot) e carrega na Flash um software que recebe pela serial (loader). O ATmega328 possui alguns recursos que facilitam o bootloader, tais como: A memória Flash pode ser dividida em duas seções, um bootloader (no final da memória, com 512, 1024, 2048 ou 4096 bytes) e uma aplicação (com o restante). Na seção do bootloader pode ser usada a instrução SPM, capaz de reprogramar toda a Flash. Independente disto, existe uma outra divisão em duas seções de tamanho fixo, a RWW (Read While Write, os primeiros 28K) e a NRWW (No Read While Write, os últimos 4K). Enquanto isto, é feito um apagamento ou escrita na região RWW, o código pode ser executado na região NRWW, caso contrário, a região NRWW é actualizada e o processador fica parado durante a operação. Para fins de apagamento e gravação a Flash é dividida em páginas de 128 bytes. As operações afetam sempre uma página inteira.
Quanto ao protocolo para receber o programa pela serial, o Bootloader utiliza um subconjunto do protocolo usado por um programador externo, o STK-500. Este permite-nos usar softwares padrão de programação no computador, o IDE do Arduino usa o Avrdude. Com o passar do tempo o bootloader do Arduino passou por alterações, a versão atual é o chamado Optiboot (bootloader "otimizado"). A otimização consistiu em reduzir o tamanho para caber em 512 bytes, aumentar a velocidade na serial para 19200 e receber os dados de uma página enquanto a apaga. Uma das reduções foi suportar somente um mínimo de comandos do STK-500. Em particular não há suporte a operações sobre a EEProm ou os fusíveis. É de importância também referir no bootloader, o seu disparo e o disparo da aplicação. Nas primeiras versões, o bootloader começava a sua execução quando era feito um reset e esperava por um certo