Ik kreeg de opdracht om "de bootloader te branden" op mijn Arduino om een fout die ik kreeg op te lossen. Hoe kan ik dit doen? (En wat is precies de bootloader?)
Ik kreeg de opdracht om "de bootloader te branden" op mijn Arduino om een fout die ik kreeg op te lossen. Hoe kan ik dit doen? (En wat is precies de bootloader?)
De bootloader is een klein programma dat (bijna) altijd op een Arduino staat. Het beheert het uploaden en starten van de schetsen die je maakt, en knippert de pin 13 LED wanneer het bord reset.
Om de bootloader te branden:
Tools ► Board ►
in de IDE. Controleer dit nogmaals, zelfs als u programma's correct zou kunnen uploaden; uploaden vereist niet altijd het juiste bord. Tools ► Programmer ►
. Tools ► Burn Bootloader
, en wacht. Het duurt niet langer dan een minuut en duurt vaak maar een paar seconden. Bronnen:
En wat is de bootloader precies?
De bootloader is een klein stukje code dat zich in het "hoge" deel van het programmageheugen bevindt. Normaal gesproken wordt het niet gewist wanneer u nieuwe schetsen uploadt. Het doel ervan is om onmiddellijk na een reset te worden geactiveerd (de zekeringen zijn geconfigureerd om code te starten op het bootloader-adres in plaats van het adres 0x0000). De bootloader wacht een korte tijd (zoals een seconde) om te zien of "programmeer" -gegevens op de seriële poort aankomen.
Als dat het geval is, leest het die gegevens en decodeert om de rest van het flashgeheugen te herprogrammeren. In samenwerking met het uploadprogramma (normaal gesproken avrdude) wordt de nieuwe schets via de seriële poort verzonden. De bootloader wist pagina's met flash-geheugen en vervangt ze door de nieuwe code. Als het klaar is, voert het de nieuwe code uit.
Als er geen instructies aankomen, springt de bootloader naar adres 0x0000 om de bestaande sketch op het bord uit te voeren.
Een alternatieve methode om een bootloader te programmeren is door een sketch te gebruiken die ik een tijdje geleden heb geschreven en die draait op een:
Het "programmeer" -bord voert de schets uit die heeft bootloaders voor een aantal boards die er hard in zijn gecodeerd. Je verbindt het programmeerbord met het doelbord (het bord dat de bootloader wil) met 6 aansluitdraden zoals getoond.
Die specifieke foto illustreert de ene Uno die een andere programmeert een.
Je voert de sketch uit (opererend via de Serial Monitor om het commando's te geven). Eerst identificeert het de doelchip:
Atmega-chipprogrammeur.Geschreven door Nick Gammon.Entered programmeermodus OK.Signature = 0x1E 0x95 0x0F Processor = ATmega328PFlash-geheugengrootte = 32768 bytes.LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Bootloader adres = 0x7E00 Bootloader lengte = 512 bytes.
Typ 'L' om Lilypad (8 MHz) loader te gebruiken, of 'U' voor Uno (16 MHz) loader ... Type 'G' om de chip met de bootloader te programmeren ...
Je drukt op G om het te programmeren.
Chip wissen ... Bootloader schrijven ... Committing pagina beginnend bij 0x7E00 Committing pagina beginnend bij 0x7E80 Committing pagina beginnend bij 0x7F00 pagina begint bij 0x7F80Written.Verifying ... Geen fouten gevonden.Zekeringen schrijven ... LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Klaar.Type 'C' als je klaar bent om verder te gaan met een andere chip ...
Voor een Uno duurt dit een seconde. Het programmeren van een Mega2560 duurt 3 seconden.
Gedetailleerde instructies op Atmega bootloader programmeur
Code kan worden gedownload van Github: nickgammon / arduino_sketches