Podłączając LPC1768-MiniDK-2 do portu USB komputera w celu zaprogramowania ISP w systemie Linuks często pojawiał się w systemie jako urządzenie o rożnych nazwach. Czasami /dev/ttyUSB0, innym razem /dev/ttyUSB1, kolejnym razem kiedy wczesnej był podpięty modem LTE jako /dev/ttyUSB4.
Taki chaos nie mógł dalej panować, dlatego, cdn...
środa, 31 grudnia 2014
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:
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:
- Wybierz odpowiedni rodzaj mikrokontrolera, który zamierzasz zaprogramować
- Wybierz odpowiedni port COM, na którym będzie odbywać się komunikacja z mikrokontrolerem
- Ustaw prędkość portu (komunikacji), zacznij od 115200 jeśli będą występować błędy przy programowaniu zmniejsz prędkość
- Rodzaj interfejsu wybierz None (ISP)
- W polu Oscilator podaj częstotliwość taktowania zewnętrznego oscylatora wyrazonego MHz
- Zaznacz odpowiednią opcję Erase block used by Hex File. Opcja ta wymusza wyczyszczenie pamięci flash mikrokontrolera o rozmiarze takim jakim zajmuje plik HEX
LPC1768-MiniDK-2
Ostatnio wpadł mi w ręce moduł LPC1768-MiniDK-2 z kolorowym wyświetlaczem dotykowym 2,8". Za stosunkowo niewielką cenę (do 150 zł) można nabyć w kilku polskich sklepach internetowych LPC1768-MiniDK-2, kupując bezpośrednio u "chińczyka" jeszcze taniej. W zestawie był kabel USB, kabel ethernetowy, przejściówka mini USB na gniazdo USB (np. do podłączenia pendrive), oraz płyta z przykładami, dokumentacją oraz sterownikami.
Mikrokontroler LPC1768 należy do rodziny mikrokontrolerów ARM Cortex-M3, na każdy 1 MHz przypada 1,25 MIPS, co przy 100 MHz daje 125 MIPS, a taka prędkość bez problemu pozwala na odgrywanie plików dźwiękowych w formaci MP3. Najważniejsze cechy mikrokontrolera LPC1768 to:
Jest także dostępna wersja wyświetlacza, gdzie wymiana danych do wyświetlacza odbywa się poprzez interfejs SPI jednak "odświeżanie" ekranu będzie o wiele wolniejsze niż na magistrali 16 bitowej.
Pokazana na zdjęciu płyta zawiera:
Ponieważ producent pomyślał o konwerterze USB-UART (oparty na scalaku CP2102) do zaprogramowania modułu nie jest konieczny programator/debugger JTAG (np. LPC-Link2), w zupełności wystarczy dołączony do zestawu kabel USB oraz aplikacja Flash Magic dla Windows, natomiast jeżeli pracujesz pod Linuksem użyj aplikacji lpc21isp.
Na dołączonej płycie znajdują się przykłady dla środowiska programistycznego Keil'a jednak ja preferuję środowisko LPCXpresso celowo przeznaczone dla mikrokontrolerów LPC. Z przeportowaniem przykładów dla LPCXpresso nie ma najmniejszych problemów. Postaram się gdzieś umieścić przykłady dla LPCXpresso w najbliższym czasie.
Pakując moduł w odpowiednią obudowę można stworzyć elegancki sterownik wszelakich zastosowań.
Moduł zbudowany jest w oparciu o mikrokontroler LPC1768 taktowany maksymalnie do 100 MHz, z 512 KB pamięci flash firmy NXP, więcej informacji o samym mikrokontrolerze znajduje się na stronie http://www.nxp.com/documents/data_sheet/LPC1769_68_67_66_65_64_63.pdf
Mikrokontroler LPC1768 należy do rodziny mikrokontrolerów ARM Cortex-M3, na każdy 1 MHz przypada 1,25 MIPS, co przy 100 MHz daje 125 MIPS, a taka prędkość bez problemu pozwala na odgrywanie plików dźwiękowych w formaci MP3. Najważniejsze cechy mikrokontrolera LPC1768 to:
- częstotliwość pracy do 100 MHz
- pamięć flash 512 KB
- pamięć ram 64 KB
- Ethernet MAC
- kontroler USB w trybach DEVICE, HOST, OTG
- 8 kanałowe DMA ogólnego przeznaczenia
- 4 porty UART
- 2 porty CAN
- 3 porty SSP/SPI
- 4 timery ogólnego przeznaczenia
- 3 porty I2C, I2S
- 8 kanałowy 12 bitowy przetwornik ADC
- 10 bitowy DAC
- 2 kanałowy enkoder inkrementalny
- 6 wyjściowy PWM ogólnego przeznaczenia
- specjalny blok PWM do zastosowania regulacji silników
- zegar czasu rzeczywistego o ultra niskim poborze energii
Jest także dostępna wersja wyświetlacza, gdzie wymiana danych do wyświetlacza odbywa się poprzez interfejs SPI jednak "odświeżanie" ekranu będzie o wiele wolniejsze niż na magistrali 16 bitowej.
Pokazana na zdjęciu płyta zawiera:
- Mikrokontroler LPC1768
- Gniazdo ethernet do podłączenia z siecią ethernetową
- Gniazdo programatora/debuggera JTAG
- Gniazdo mini-USB, które można wykorzystać do programowania albo port UART
- Gniazdo mini-USB, wykorzystanie np. jako USB HOST
- Gniazdo na baterię w celu podtrzymania zegara czasu rzeczywistego
- Kwarc zegarkowy
- Gniazdo do podłączenia zewnętrznego zasilacza wraz ze stabilizatorem
- Diody LED, w tym dwie do dowolnego wykorzystania
- Diody sygnalizacyjne prace portu USB
- Przyciski, w tym do dowolnego wykorzystywania
- Gniazda do podłączenia wyświetlacza
Ponieważ producent pomyślał o konwerterze USB-UART (oparty na scalaku CP2102) do zaprogramowania modułu nie jest konieczny programator/debugger JTAG (np. LPC-Link2), w zupełności wystarczy dołączony do zestawu kabel USB oraz aplikacja Flash Magic dla Windows, natomiast jeżeli pracujesz pod Linuksem użyj aplikacji lpc21isp.
Na dołączonej płycie znajdują się przykłady dla środowiska programistycznego Keil'a jednak ja preferuję środowisko LPCXpresso celowo przeznaczone dla mikrokontrolerów LPC. Z przeportowaniem przykładów dla LPCXpresso nie ma najmniejszych problemów. Postaram się gdzieś umieścić przykłady dla LPCXpresso w najbliższym czasie.
Subskrybuj:
Posty (Atom)