Anatomia do
Arduino Bootloader
Fábio Olivé
([email protected])
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Tópicos
• A plataforma Arduino
• A família Atmel AVR ATmega
• Padronização da configuração e uso do ATmega
• Detalhando o ATmega328P
• Especificações técnicas
• Registradores de controle e layout da memória
• O papel do bootloader
• O que o microcontrolador faz quando é ligado?
• Quais funcionalidades o bootloader implementa?
• Conversando com o bootloader pela serial
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
A plataforma
Arduino
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
A Família Atmel AVR ATmega
• µControladores RISC de 8bits, contendo:
• 32 registradores de 8bits de uso geral
• Memória de programa em Flash
• Arquitetura Harvard, programa separado dos dados
• Códigos de operação de 16bits (estilo RISC, tamanho fixo)
• Memória SRAM para registradores, controle, periféricos
• Memória EEPROM para retenção de dados
• Várias funções selecionáveis de I/O por pino
• Cada pino é uma surpresa!
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
●
Padronização de Uso do ATmega
• Simplificação da configuração do µcontrolador
• Define usos padronizados para cada pino
• Define formas de identificar cada pino
• Simplificação da linguagem de programação
• C++ facilitado, pré-processado para gerar o programa final
• Abundância de bibliotecas padronizadas
• Padronização de layouts e barramentos de I/O
• Padronização do bootloader e gravação da flash
• Desvantagem: perde um pouco na eficiência do
código e na flexibilidade do uso
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Detalhando o
ATmega328P
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
ATmega328P
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Especificações Técnicas
• 32KB de memória de programa em flash
• Organizado em 16K palavras de 16bits
• Separado entre área de aplicação e área de boot (final)
• Área de boot pode ter 2KB, 1KB ou 512B (optiboot)
• 2KB de Static RAM para dados e registradores
• Registradores de uso geral, de controle e I/O e RAM todos
no mesmo espaço de endereçamento
• Estranho mas interessante :-)
• Arquitetura Harvard, e só a flash é vista como memória de
programa (não “executa” a RAM)
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Pinagem do ATmega328P
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Pinagem padronizada pelo Arduino
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Registradores de Controle
• Regiões de memória que afetam o funcionamento e
a configuração do µcontrolador
• Funções de I/O como porta serial, seleção de direção
dos pinos de I/O, seleção do canal analógico, etc
• PinMode(8, OUTPUT), por exemplo, muda alguns bits em
registradores de controle que habilitam o pino PB0 para
funcionar como saída
• Acesso a timers, interface de leitura e escrita na
EEPROM, etc
• É a parte “mágica” do ATmega328P, que define como
ele interage com o mundo externo :-)
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Layout da Memória
FLASH
Vetores de Int
0000h
0068h
SRAM
Registradores
0000h
0020h
Registradores de
Controle e I/O
0100h
Aplicação
7800h
Boot
7e00h
7fffh
RAM
Dados
e
Pilha
08ffh
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
O papel do
bootloader
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
O que o 328P faz quando é ligado?
• Inicializa todos os pinos como INPUT
• Inicializa registradores de controle e status
• Identifica fusíveis de configuração básica
• Incluindo onde começa o bootloader
• Inicializa SRAM e Stack Pointer
• Executa o bootloader
• A partir daqui é só software
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Funcionalidades do Bootloader
• Configurar o µcontrolador de acordo com a
especificação da plataforma Arduino
• Identificar comandos de programação
• Identificar o µcontrolador (modelo, etc)
• Realizar inicialização da “plataforma”
• Executar (saltar para) a aplicação gravada na flash
• Atualmente o Arduino usa o optiboot, que é muito
simplificado e ocupa apenas 512 bytes
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Falando com o Bootloader pela Serial
• Protocolo STK500
•
•
•
•
Funções bastante básicas
Identificação do µcontrolador (modelo, etc)
Configuração de fusíveis e bits persistentes de controle
Leitura e gravação das memórias
• Programa especializado: avrdude
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Conhecendo o Optiboot
• Demonstração prática :-)
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Referências
•
•
•
•
http://arduino.cc/en/Hacking/Bootloader
http://code.google.com/p/optiboot/
http://www.atmel.com/devices/ATMEGA328P.aspx
AVR Instruction Set Reference
• http://www.atmel.com/images/doc0856.pdf
• STK500 Communication Protocol
• http://www.atmel.com/Images/doc2591.pdf
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Download

Anatomia do Arduino Bootloader