Ethernetowy bootloader dla mikrokontrolerów Freescale Kinetis
Rozwijanie aplikacji z ethernetowym bootloaderem w środowisku IAR
Jako projekt bazowy środowiska IAR, do którego dodany zostanie ethernetowy bootloader, wykorzystać można swój własny projekt, bądź któryś z przykładowych projektów dla układu Kinetis dostępnych na stronie internetowej firmy Freescale. W tym przypadku użyty został projekt przykładowy o nazwie „Hello World”, który można znaleźć pod ścieżką …\kinetis-sc\ build\iar\hello_world . Następujące działania należy podjąć w celu modyfikacji pliku konfiguracyjnego linkera:
1. Otworzyć workspace projektu „Hello World” przy pomocy pliku hello_world.eww .
2. Zmienić opcję workspace-a na FLASH_512KB_PFLASH , otworzyć plik 512KB_Pflash.icf (rysunek 3).
Rys. 3. Plik konfiguracyjny linkera
3. Zmodyfikować plik linkera .icf .
a. Zmodyfikować adres pamięci początku aplikacji właściwej mikrokontrolera z 0x0000_0000 na 0x0000_C000 (listing 1).
Listing 1.
define symbol __ICFEDIT_intvec_start__ = 0x0000C000; define symbol __ICFEDIT_region_ROM_start__ = 0x0000C000; define symbol __ICFEDIT_region_ROM_end__ = 0x00080000; define exported symbol __VECTOR_TABLE = 0x0000C000; define exported symbol __VECTOR_RAM = 0x1fff0000; define symbol __code_start__ = 0x0000C410;
b. Zmienić sekcję pamięci split RAM section na RAM sesction poprzez skasowanie sekcji RAM2 i zwiększenie sekcji RAM do 0x2001_0000 (listing 2).
Listing 2.
define symbol __ICFEDIT_region_RAM_start__ = 0x1FFF0410; define symbol __ICFEDIT_region_RAM_end__ = 0x20010000; //define symbol __region_RAM2_start__ = 0x20000000; //define symbol __region_RAM2_end__ = 0x20010000;
c. Stworzyć sekcję dla parametrów bootloadera (ta sekcja jest potrzebna tylko w przypadku, gdy aplikacja będzie zmieniała parametry bootloadera). Należy zdefiniować początek i koniec sekcji, co rozumieć należy przez zdefiniowanie symboli, które reprezentować będą określone wartości (listing 3).
Listing 3.
define symbol FappParams_start__= __ICFEDIT_region_ROM_end__ - (2*0x400); //FAPP define symbol FappParams_end__ = __ICFEDIT_region_ROM_end__-1; //FAPP
Następnie stworzyć obszar ROM , w którym umieszczona zostanie aplikacja właściwa (listing 4).
Listing 4.
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__-1] - mem:[from FappParams_start__ to FappParams_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__-1]; //| mem:[from __region_RAM2_start__ to __region_RAM2_end__-1]; place at address mem:FappParams_start__ { section fapp_params }; //APP
Cały zmodyfikowany plik .icf został pokazany w dodatku A do artykułu.
4. Skompilować i zlinkować projekt. Następnie otworzyć plik .map i sprawdzić, czy aplikacja została umieszczona pod zmodyfikowanymi adresami pamięci Flash (rysunek 4).
Rys. 4. Plik wyjściowy mapy pamięci
Teraz wygenerowany plik .srec jest gotowy do wgrania do pamięci mikrokontrolera przez ethernetowy bootloader. Plik ten można znaleźć w folderze projektu, gdzie generowane są pliki po procesie kompilacji i linkowania. Na rysunku 5 pokazano w jaki sposób można łatwo zlokalizować ten folder i znajdujący się w nim plik .srec .
Rys. 5. Lokalizacja pliku s-rec