Beschleunigen der Bootzeit durch ändern der Fuse Bits

Da mein vorhaben das Programm direkt per SPI (ICSP) in den µC Mega2560 zu laden aufgrund meines warscheinlich nicht mit mega2560 kompatiblen USBasp Programmers fehlschlug  habe ich mich dazu entschlossen nur die Fuse Bits zu verändern.

Hintergrund: Der USBasp von www.fischl.de  den ich seit einigen Jahren besitze um damals die „kleinen“ AVRs zu programmieren scheint ein Problem mit > 128Kbyte zu haben. Ein update auf die aktuellste Version sollte das Problem beheben, bei mir allerdings bis jetzt ohne Erfolg. Es gibt noch eine alternative Software für den USBasp, allerdings habe ich diese nicht probiert, da Sie leider nicht unter Linux Mint 14 läuft.

Am besten benutzt man einen AVR Programmer konform zu  STK500 damit sollte es keine Probleme geben.

Da alles nicht geklappt hat, habe ich mit entschlossen mit dem USBasp per ICSP Schnittstelle die fuse Bits geringfügig zu verändern.

Die originalen Fuse Einstellungen des Arduino Boards sind in der Datei boards.txt unter ../arduino-1.0.3/hardware/arduino/boards.txt zu finden. Dort sind als Standard folgende Fuse einsgestellt;

low_fuses=0xFF      high_fuses=0xD8      extended_fuses=0xFD

Ein Blick auf http://www.engbedded.com/fusecalc/ verrät was dahinter steckt.

Die einzige Änderung die ich vorgenommen habe ist die high_fuses=0xD8 in high_fuses=0xD9 zu ändern. Damit wird folgende Funktion deaktiviert.

Boot Reset vector Enabled (default address=$0000); [BOOTRST=0]

Das hat zu Folge, das das Programm zwar direkt ohne Bootloader geladen wird, aber der mega 2560 nicht mehr sofort mit der Arduino IDE geflashed werden kann.

Ein ändern der Fuse wird mit avrdude vorgenommen, hier der Befehl als root dazu.

sudo avrdude -c usbasp -v -p m2560 -U hfuse:w:0xd9:m

oder mit

sudo avrdude -c usbasp -v -p m2560 -U hfuse:w:0xd8:m

zurück zum Original. Man kann auch alle Fuses auf einmal schreiben einfach am ende alle Fuses anhängen.

-U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xfd:m

Normalerweise kann das Progamm mit folgendem Befehl über USBasp geflashed werden.

sudo avrdude -c usbasp -v -p m2560 -U flash:w:RFID_Scanner_1_00.cpp.hex

Ein erfolgreiches fusen sollte so ausschauen:

sudo avrdude -c usbasp -v -p m2560 -U hfuse:w:0xd9:m

avrdude: Version 5.11.1, compiled on Oct 30 2011 at 10:37:28
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is „/etc/avrdude.conf“
User configuration file is „/home/sven/.avrduderc“
User configuration file does not exist or is not a regular file, skipping

Using Port : /dev/parport0
Using Programmer : usbasp
AVR Part : ATMEGA2560
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 10 256 0 yes 262144 256 1024 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 : usbasp
Description : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9801
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as FD
avrdude: reading input file „0xd9“
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xd9:
avrdude: load data hfuse data from input file 0xd9:
avrdude: input file 0xd9 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying …
avrdude: 1 bytes of hfuse verified

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK

avrdude done. Thank you.

Dieser Beitrag wurde unter Allgemein veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.