czwartek, 11 grudnia 2014

Programowanie mikrokontrolerów LPC poprzez ISP programami Flash Magic i lpc21isp

Mikrokontrolery LPC pozwalają programować wbudowaną w swoją strukturę pamięć flash poprzez In-System Programming w skrócie ISP, zwykle przez interfejs UART co na początku pozwala zaoszczędzić trochę grosza, nie jest konieczny zakup programatora / debuggera JTAG, którego koszt często przekracza 100 zł.
Zaraz po resecie albo po włączeniu zasilania mikrokontrolera sprawdzany jest stan pewnego pinu, jeżeli występuje na nim stan niski wtedy uruchamiany jest ze specjalnego obszaru pamięci nie dostępnego dla użytkownika tzw. bootloader, który to komunikuje się z urządzeniem zewnętrznym (np. program Flash Magic na komputerze PC) zwykle poprzez port UART poprzez odpowiedni protokół.
Jeśli chodzi o pin na, który należy podać przy "rozruchu" stan niski zależne jest to od mikrokontrolera, i tak dla LPC1114  jest to P0.1, dla LPC1768 P2.10. Dokładnie jest to opisane w podręczniku użytkownika, czyli tzw. User Manual (UM) zawarty też tam jest opis protokołu podczas programowania ISP - być może ktoś sam napiszę nowy program do na komputer :)
Tak na marginesie UM to podręcznik, z którym musisz się zapoznać jeśli chcesz poważnie programować dany mikrokontroler LPC, zawarto w nim opis rejestrów i poszczególnych interfejsów mikrokontrolera.
Ponieważ w Internecie można znaleźć wiele opisów programowania ISP przy użyciu programu Flash Magic w pierwszej kolejności opiszę program lpc21isp dla systemu operacyjnego Linuks, choć bez problemu można skompilować dla systemu Windows.
Program lpc21isp mimo mylącej nazwy programuje większość mikrokontrolerów LPC.
Program należy pobrać ze strony http://lpc21isp.sourceforge.net aktualnie najnowsza wersja 197 przy próbie kompilacji krzyczy następującym błędem:

/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make: *** [lpc21isp] Błąd 1


Aby poprawnie skompilować należy w pliku Makefile odnaleźć następującą linie:


lpc21isp: lpc21isp.c adprog.o lpcprog.o lpcterm.o $(GLOBAL_DEP)
    $(CC) $(CDEBUG)  $(CFLAGS) -o lpc21isp lpc21isp.c adprog.o lpcprog.o lpcterm.o 


na następującą:

lpc21isp: lpc21isp.c adprog.o lpcprog.o lpcterm.o $(GLOBAL_DEP)
    $(CC) $(CDEBUG)  -o lpc21isp lpc21isp.c adprog.o lpcprog.o lpcterm.o


Następnie wydać polecenie make, które wykona skrypt kompilacji zawarty w Makefile.
Chcąc zaprogramować mikrokontroler wydaj polecenie:

lpc21isp plik_z_programem.hex /dev/ttyS0 115200 12000

do mikrokontrolera zostanie załadowany wsad zawarty w pliku plik_z_programem.hex przez port /dev/ttyS0 z prędkością 115200. Ostatnia wartość to taktowanie oscylatora podpiętego pod mikrokontroler w kHz.
Aby wgrać plik binarny należy dodać przełącznik -bin

lpc21isp -bin plik_z_programem.bin /dev/ttyS0 115200 12000

Chcąc zaprogramować mikrokontroler rodziny LPC pod systemem operacyjnym Windows zwykle używa się programu Flash Magic, choć istnieje wersja programu lpc21isp skompilowanego dla Windows. Ponieważ program Flash Magic głównie używany jest w wersji okienkowej, dlatego częściej jest wybierany niż lpc21isp.


Kroki, które należy  wykonać by zaprogramować mikrokontroler:
  1. Wybierz odpowiedni rodzaj mikrokontrolera, który zamierzasz zaprogramować
  2. Wybierz odpowiedni port COM, na którym będzie odbywać się komunikacja z mikrokontrolerem
  3. Ustaw prędkość portu (komunikacji), zacznij od 115200 jeśli będą występować błędy przy programowaniu zmniejsz prędkość
  4. Rodzaj interfejsu wybierz None (ISP)
  5. W polu Oscilator podaj częstotliwość taktowania zewnętrznego oscylatora wyrazonego MHz
  6. Zaznacz odpowiednią opcję Erase block used by Hex File. Opcja ta wymusza wyczyszczenie pamięci flash mikrokontrolera o rozmiarze takim jakim zajmuje plik HEX
Następnie wciśnij przycisk Browse po czym wskaż plik hex, którym chcesz zaprogramować mikrokontroler. Ostatnim krokiem jest wciśniecie przycisku Start co spowoduje rozpoczęcie procesu programowania mikrokontrolera.

Brak komentarzy:

Prześlij komentarz