Bootloader problemen

Hey,

Ik ben bezig met de bootloader van de atmel app-note 109 (http://www.atmel.com/atmel/acrobat/doc1644.pdf).
Ik gebruik een at90can32, een bootblock van 2048 words, avrdude met een usbtinyisp.

Nu is mijn vraag, hoe kan ik de bootloader software in het juiste codegeheugen krijgen?

Alvast bedankt.

edit: Ik weet dat er al 1001 topics zijn over dit onderwerp, maar ik heb nergens antwoord kunnen vinden op deze vraag.
Ik heb ook nergens in de avrdude help een command gevonden om het begin van het programmeren aan te geven.

[Bericht gewijzigd door neoel op 28 juli 2010 18:34:41 (27%)]

Rather a (_E=MC2_) than a (_?_).
Een bootloader wordt meestal niet af fabriek meegeleverd. Die moet je dus zelf laden de eerste keer, bivoorbeeld met een ISP programmer.

Of je koopt een micro bij een leverancier dat de bootloader meelevert met de micro.

Succes.
Ik weet dat er standaard geen bootloader op zit, en die wil ik erop zetten. Ik heb een usbtinyISP van ladyada.

Het probleem is (volgens mij) dat ik de hex die ik met de isp wil proggen, niet in het goede stuk geheugen krijg.

wat ik tot nu toe heb gedaan is: Een bootloader compileren (van appnote 109), de fuses programmeren (zodat hij in het bootloader geheugen start).

Nu wil ik de bootloader in de chip zetten. Maar hoe gaat dat met een bootloader?
Rather a (_E=MC2_) than a (_?_).
Marcel

Golden Member

De truc is inderdaad om de bootloader op het juiste geheugenadres te plaatsen (zie datasheet). Dat moet in de HEX file al goed zitten. Het programmeren is dan gewoon rechttoe rechtaan. Maar ik heb geen idee welke ontwikkeltools jij gebruikt en dus ook niet wat je zou moeten doen om een juiste HEX file te genereren. Vertel daar eerst eens wat over.

Er zijn overigens genoeg opensource bootloader projecten te vinden voor AVR. Opensource, dus kijk eens hoe zij dat doen.
Ik gebruik de avr gcc library.

Dus het zit toch in de code. Dankje .
Rather a (_E=MC2_) than a (_?_).
shizzle dizzle

Golden Member

Het zit'm niet in de code maar de project instellingen, dus de makefile.

Kijk eerst in de hex file of the bootloader op de goed plaats zit. Raak niet in de war tussen words en byte's.

Mocht de bootloader niet op de goede plek staan, dan kun je dat veranderen in project optie's door bij memory settings het volgende in te zetten.



In dit voorbeeld wordt de code vanaf word adress 0xf000 geplaatst. Dit is voor een at90can128
ING. -> werktuigbouw nu het echte werk, elektronica
Aah, dankje.

Ik werk alleen met mn eigen makefiles (op kubuntu).
Maar dan ga ik de makefile van het voorbeeld wel even doorpluizen.

Edit:
Dit is mn hexfile : main.hex
En dit is mn Makefile : Makefile

Volgens mij is mn hexfile niet correct.

Bij een bootblocksize van 2048 words, moet de bootloader op 0x3800 beginnen
Rather a (_E=MC2_) than a (_?_).
shizzle dizzle

Golden Member

De hexfile is niet correct.

Ik heb nog niet zoveel kaas gegeten van makefiles (een beetje bij de arm processoren) Ik vind het ideaal dat die automatisch gegenereert wordt.

Mijn makefile is als volgt.

http://www.uploadarchief.net/files/download/makefile.txt

Bij ldflags zie je wel de toevoeging

-Wl,-section-start=.text=0x1e000

Ik weet het niet meer zeker, maar volgens mij heb je ook nog te maken met een linkerfile, volgens mij is dat een .map file.

Die wordt ook toegevoegd in de ldflags.
ING. -> werktuigbouw nu het echte werk, elektronica
Voor dit eens toe aan je make file, wel met het juiste adres.
code:
# Starting byte address of the bootloader
BOOT_START = 0x1E000