Malthe’s Modelbane:

Jeg har en hobby som jeg godt vil dele med dem der har lyst til at rode med elektronik, model bane, og ATMEL avr cpu'er.
Hvis du har spørgsmål til indholdet på denne side så skriv til Malthe Engstrøm

En bootloader til ATMEGA324 eller ATMEGA2560 via UART og INTEL HEX decodning

Jeg har altid gerne ville lave en bootloader. Men jeg fandt det vanskeligt og krøb uden om. Indtil jeg fik en opgave hvor der virkelig ikke var en vej unden om. Jeg har brugt 3 hele dage på at lave en og debuge den. Før jeg fik hul igennem. Jeg har kigget mange eksembel fra nettet igennem. Ingen af dem kunne jeg bruge direkte til mit brug, og mine krav. Et af kravne var at denne bootloader skulle passe til 2 cpu'er ved at pille i en #define CPU_TYPE 2560. Dette krav gør at hex coden ikke må overstige 2048 byte som er max boot size for ATMEGA324. Det lykkedes lige med 2040 byte. (compile med -Os så kommer den under 2k) Et andet krav er at bootloader skal kunne modtage den INTEL HEX FIL som er output fra compileren. Og med CRC check. Funktions genemgang: Ved en tom CPU vil bootloaderen skrive READY ud på den valgt uart channal (#define COM_CH 3) og afvente hex filen. Som kan afsendes fra et alm.terminal program med den rigtige baud,stop bit og XON / XOFF sat.(9600,8,n,2) echo off. Da cpu'en ikke kan have hele hex file i sig på en gang i ram, læses en line ad gangen. Stoppes datastrømen og linen checkes mod fejl. Afgiver en prik. Når der så er data nok til at falshe en page, som cpuen er delet op i, afgives der et P. Dette forsætter til end of hex file. Hvis alt gik godt starter appliktions programmet. Der sættes et "OK" mærke på den sidste addresse i EEPROM'en. Hvis man ønsker at opdater sit appliktions programmet mere end en gang, skal dette program indeholder en stump code som kan skriv 0xFFFF på den sidste adrresse i EEPROM. Denne C code er lagt i reboot.c. som man så kan include i sin appliktion. Husk at at lave 2 stk #define COM_CH 2 og #define CPU_TYPE 324 i main header. I reboot.C er nøgle ordet "BOOT" som sendes til boot com porten. Efter en reset/(wdt) eller power off og on, vil bootloader start igen. Og en opdatering kan udføres. For at få bootloaderen til at ligge rigtig i flash mem skal man lave en Opsætning af AVR/GCC Linker under toolchain sætter man memory flash til .text=0x1F800 (for atmega2560) eller .text=0x3800 (for atmega324) uder programmering af fuses skal man huske x i bootrst felt og vælge bootzise 2048. Så vil reset peje på bootloaderen som starter på addresse 0x3800 eller 0x1F800 alt efter valg af cpu. Jeg har vedlag min C code. Der helt sikket plads til forbedringer. compiler opt -Os og compile til den cpu som du ønsker at bruge - device.

avr programmer
AVR risp mkII