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.