Sida 1 av 2

Bootloader till ARM (AT91SAM7)

Postat: 13 juni 2005, 04:41:53
av strombom
Sådär nu har jag äntligen knåpat ihop en liten bootloader som ligger i SRAM:

http://www.altronix.se/filz/loader.rar

Har inte testat den så mycket men det är en början i varje fall. Hoppas någon kan få nytta av den. Imorgon får det bli att skriva en bootloader som ligger i FLASHEN. Det är mycket kvar att fixa på den...

(Om man inte själv vill ändra i koden måste man ha en 18.432 MHz kristall och använda com1 samt usart0)

God natt :)

/Johan

Postat: 13 juni 2005, 20:01:02
av macgyver
trevligt, jag kunde inte köra ditt VB program, måste nog ha nån VB fil installerad
jag kom på en sak också, intel hexfiler kan bara hantera 16-bitars adresser. så jag har ändrat i makefilen till motorola .srec, den klarar 24 och 32 bitars adresser, vilket är bra om man vill skriva till RAM:et som normalt ligger på 0x200000
jag har upptäckt en användbar finess på ARM:en också, man kan skriva till ett register "TimeGuard" i USART:en, värdet motsvarar en timeout-tid mellan varje mottaget tecken, en flagga i USART:ens status register när tiden löper ut. detta kan ju vara bra om man inte vill att processorn låser sig om nåt tecken skulle missas, speciellt för mig som inte har en resetkanpp :)

Postat: 13 juni 2005, 20:53:59
av strombom
Så nu har jag lagt till ett litet installationsprogram i rar-filen...

Kan ju nämna att jag inte har någon felsäkerhet inbyggd över huvud taget.

/Johan

Postat: 13 juni 2005, 21:02:37
av macgyver
nuså funkade det
lite nyfiken bara, har du tänkt att lägga in samma kod som du nu kör i ramet på ARM:en i som flash-bootminne? eller ska du skriva en annan bootloader och skriva den till flashminnet med hjälp av koden som du har nu?
och hur ska du lösa det med att ihex filerna bara klarar 16-bits adresser?

Postat: 13 juni 2005, 21:06:33
av strombom
Jag tänkte utgå från den här koden, inte ändra mycket alls...

Intel HEX klarar mer än 16-bitar och det har jag utnyttjat, "04 - Extended linear address record". På en rad med type 04 så får man 2 bytes som utgör de 16 övre bitarna i adressen. Då får man 32-bitars adressering.

/Johan

Postat: 13 juni 2005, 21:21:33
av macgyver
aha okej, men hur får du WinARM att skriva extended intel hex filer?

Postat: 13 juni 2005, 21:25:13
av strombom
Jag har en rad i makefilen:
FORMAT = ihex

Hur det funkar vet jag inte, men det fungerar :roll:

/Johan

Postat: 13 juni 2005, 21:29:45
av macgyver
hmm, konstigt jag fick bara vanliga 16-bits ihex filer när jag körde med FORMAT = ihex

Postat: 13 juni 2005, 21:32:15
av strombom
Om man kollar på en HEX-fil:

Kod: Markera allt

:020000040020DA
:100000000B0000EA14F09FE514F09FE514F09FE563
:1000100014F09FE50000A0E1F0FF1FE50CF09FE564
:10002000A4002000A4002000A4002000A4002000C0
:10003000A400200078D09FE578009FE50FE0A0E1C4
:1000400010FF2FE10D00A0E1D1F021E368809FE5D2
Första raden:
:020000040020DA

02 = bytecount: 2 bytes
0000 = adress: 0
04 = typ: 04 - extended linear memory
0020 = data: 0x0020????
DA = checksum

då sätter jag 0x00200000 som offset på alla adresser som kommer på efterföljande rader

nästa gång en 04 kommer ändrar jag bara offsetten

/Johan

Postat: 13 juni 2005, 21:36:13
av macgyver
åfan, det missade jag, nu ser jag ju att 04 extended finns med i början
då kan jag radera min fina motorola srec kod :(

Postat: 13 juni 2005, 21:37:26
av strombom
:wink: och :cry:

/Johan

Postat: 13 juni 2005, 22:19:14
av strombom
Några förslag på hur man ska lösa det här med avbrottsvektorer när man har en bootloader ?

/Johan

Postat: 13 juni 2005, 23:05:52
av Icecap
Efter vad jag har sett genom tiderna fungerar alla bootloaders på processorer där interruptvektorerna inte ligger i RAM så att alla interrupt är bannlysta tills funktionen är klar.

Det finns dock vissa processorer där man kan ändra ett page-register och "flytta" interrupt-vektorer till RAM och då är det ju bara att lägga upp det hela rätt.

Så det beror ganska hårt på hårdvaran men oftast är det helt utan interrupt.

Postat: 14 juni 2005, 17:12:50
av macgyver
Som jag har fattat där det bara att skriva in vektor adresserna i Source Vector Registren på AIC:en
annars kan man ju alltid göra som på 8051:orna att lägga i en jump på int vector adresserna i bootminnet som pekar på valfri adress i minnet där man i sin tur kan lägga in en jump till sin interrupt handler

Postat: 15 juni 2005, 19:08:49
av strombom
Så nu har jag gjort en bootloader i konsol-läge

http://www.altronix.se/filz/loader_050616.rar

körs så här:
sam7bl.exe -port 1 -baud 115200 -chip 128 -write c:\.....\example.hex

Återstår fortfarande att göra en permanent bootloader som ligger i flashen men det får duga med ram så länge.

/Johan