Hardware Bootloader – Printrboard
Bootloader?:
Een bootloader is een computerprogramma dat zorgdraagt voor het starten van het besturingssysteem bij de opstart (bootstrap) van een computer, veel microcontrollers komen zonder bootloader erop gebrand, dat moeten eindgebruikers zelf doen.
De Printrboard is uitgerust met een Atmel AT90USB1286 chip als besturing, het nadeel (of voordeel…het is maar hoe je het ziet) is dat deze chip ook de bootloader in zich heeft die ook als virtuale COMpoort via USB kan dienen om zo programmacode erop te schrijven, bij verkeerd flashen van de firmware kan je de chip “bricken” (een zodanige mis-configuratie dat de chip niet meer goed functioneert)
Let op: Nu heeft vrijwel elke microcontroller een eigen set van bootloaders, deze zijn onderling tussen microcontrollers NIET uitwisselbaar!
Wat heb je nodig?
1) Arduino UNO (Micro of Nano)
2) Arduino IDE
3) AVRdude
3) Jumpwires
Aan de slag
1) Programmeer de Arduino als ISP zoals hier beschreven.
2) Sluit de Arduino als volgt aan op het Printrboard:
Arduino ISP header: | Printrboard ISP header: |
---|---|
VCC (5v) van ISP | VCC (5v) |
GND | GND |
MISO (Master Input, Slave Output) | MISO (Master Input, Slave Output) |
MOSI (Master Output Slave Input) | MOSI (Master Output Slave Input) |
SCK (seriele klok) | SCK (Seriële klok) |
Adruino D10 | RST (Reset) |
Ps. Als het goed is gegaan, zal er een ledje branden op het printrboard! en de Arduino werkt nog steeds (ledjes branden) (druk voor de zekerheid even op de RESET van de Arduino)
3) Zet het Printrboard in bootmode, begin met de jumper instelling:
- Printerboard RevA-C: Jumper moet verwijderd worden.
- Printerboard RevD-F: Jumper moet geplaatst zijn.
Druk op de RESET knop.
4) Download (onder aan deze pagina) de CDC bootloader: AT90USB1286 – BootloaderCDC.7z, pakt het archief uit, en plaats het HEX bestand in de ARVdude folder.
Een kleine samenvatting:
De AruinoISP gebruikt: stk500v1 @ 19200 baud
Printer board gebruikt: at90usb1286
COMpoort: Die van de Arduino (uiteraard)
Bestand: BootloaderCDC.hex
5) Zet de FUSES goed (optioneel) met het commando:
avrdude -c stk500v1 -p at90usb1286 -b 19200 -P COM10 -U lfuse:w:0xDE:m -U hfuse:w:0x9B:m -U efuse:w:0xF0:m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.07s avrdude: Device signature = 0x1e9782 (probably usb1287) avrdude: reading input file "0xDE" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xDE: avrdude: load data lfuse data from input file 0xDE: avrdude: input file 0xDE contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: reading input file "0x9B" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0x9B: avrdude: load data hfuse data from input file 0x9B: avrdude: input file 0x9B contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xF0" avrdude: writing efuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of efuse written avrdude: verifying efuse memory against 0xF0: avrdude: load data efuse data from input file 0xF0: avrdude: input file 0xF0 contains 1 bytes avrdude: reading on-chip efuse data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 1 bytes of efuse verified avrdude: safemode: Fuses OK (E:F0, H:9B, L:DE) avrdude done. Thank you. |
6) Gebruik het volgende commando om de CDCbootloader op de chip te zetten (via de Arduino)
avrdude -v -c stk500v1 -p at90usb1286 -b 19200 -P COM10 -U flash:w:BootloaderCDC.hex:i
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
avrdude: Version 6.3, compiled on Dec 16 2016 at 13:33:19 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "d:\Arduino\hardware\tools\avr\bin\avrdude.conf" Using Port : COM10 Using Programmer : stk500v1 Overriding Baud Rate : 19200 AVR Part : AT90USB1286 Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PA0 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00 flash 65 6 256 0 yes 131072 256 512 4500 4500 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : STK500 Description : Atmel STK500 Version 1.x firmware Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.03s avrdude: Device signature = 0x1e9782 (probably usb1287) avrdude: safemode: hfuse reads as 9B avrdude: safemode: efuse reads as F0 avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "BootloaderCDC.hex" avrdude: writing flash (131072 bytes): Writing | ################################################## | 100% 0.05s avrdude: 131072 bytes of flash written avrdude: verifying flash memory against BootloaderCDC.hex: avrdude: load data flash data from input file BootloaderCDC.hex: avrdude: input file BootloaderCDC.hex contains 131072 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.05s avrdude: verifying ... avrdude: 131072 bytes of flash verified avrdude: safemode: hfuse reads as 9B avrdude: safemode: efuse reads as F0 avrdude: safemode: Fuses OK (E:F0, H:9B, L:DE) avrdude done. Thank you. |
Na het uploaden zal er meteen een nieuwe (virtuele) COM poort aanwezig zijn, voorbeeld Windows:
7) Na het uploaden druk op de RESET knop van het Printrboard! en koppel de Arduino UNO met ISP af van het Printrboard.
8) Geef de printrboard op de “normale wijze” stoom (niet via ISP)
9) Druk op de RESET van het Printrboard om in de bootmode te komen (jumper instelling staat nog goed)
10) Upload het programma via ArduinoIDE op de compoort van het Printrboard, en je programma staat weer op de Printrboard!
11) Vergeet niet de Jumper instelling weer aan te passen zodra je klaar bent! en de printrboard weer te resetten!
Informatie bootloaders:
Er zijn momenteel 3 bootloaders beschikbaar voor de AT90USB128x MCU’s.
DFU – USB Device Firmware Upgrade Class
Dit is de officiele bootloader ondersteunt door Atmel, Windows ziet deze bootloader als “Atmel Device”.
- Voordelen:
- Werkt met Atmel FLIP tool.
- Nadelen:
- Heeft een driver nodig (libusb)
- Geen commandolijn software aanwezig in Windows
- Voor Linux is er een open source host loader app aanwezig.
- Kan niet geintregeerd worden in Arduino IDE
CDC – USB Communication Device Class
Deze bootloader maakt een virtuele COM poort aan om vervolgens programmacode te flashen, Windows ziet deze bootloader als “LUFA CDC Class Boot loader”
- Voordelen:
- Werkt met Arduino IDE
- Werkt met AVRdude (-c avr109)
- Nadelen:
- Gebruiker moet (telkens) weten welke virtuele COM poort is aangemaakt
- Gebruikt een driver, INF nodig om te installeren.
- Upgrade van AVRdude nodig wanneer ArduinoIDE < v1.0
HID – USB Human Interface Device Class
- Voordelen:
- Geen problemen, gewoon “plug ’n play”!
- Geen driver nodig
- Nadelen:
- Werkt niet met ArduinoIDE
Bronnen:
blog.lincomatic.com
helentronica.com
Download AT90USB1286 bootloaders @ blog.lincomatic.com
[#/mechanica/bootloaders/at90usb1286″ ]