anatomia do arduino bootloaderolive.webfactional.com/anatomia-do-arduino-bootloader.pdfthis work is...

18
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Anatomia do Arduino Bootloader Fábio Olivé ([email protected])

Upload: others

Post on 30-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Anatomia doArduino Bootloader

Fábio Olivé([email protected])

Page 2: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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

Page 3: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

A plataformaArduino

Page 4: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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!

Page 5: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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

Page 6: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Detalhando oATmega328P

Page 7: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

ATmega328P

Page 8: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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)

Page 9: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Pinagem do ATmega328P

Page 10: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Pinagem padronizada pelo Arduino

Page 11: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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 :-)

Page 12: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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

Page 13: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

O papel dobootloader

Page 14: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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

Page 15: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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

Page 16: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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

Page 17: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Conhecendo o Optiboot

• Demonstração prática :-)

Page 18: Anatomia do Arduino Bootloaderolive.webfactional.com/Anatomia-do-Arduino-Bootloader.pdfThis work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Registradores

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