Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is...
Transcript of Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is...
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Anatomia doArduino 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 plataformaArduino
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 oATmega328P
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
Vetores de Int
Aplicação
Boot
FLASH
Registradores
Registradores deControle e I/O
RAMDados
ePilha
SRAM0000h
0068h
7800h
7e00h7fffh
0000h
0020h
0100h
08ffh
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
O papel dobootloader
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