Popularny post Elvis Napisano Listopad 8, 2010 Popularny post Udostępnij Napisano Listopad 8, 2010 Lekcja 11 - Komunikacja przez COM0, Bootloader Progam testowy Na początek zaprogramujmy płytkę programem przykładowym dostępnym w archiwum Program16.zip. Program bardzo niewiele różni się od poznanego w poprzedniej części. Główna różnica to wykorzystanie UART0 zamiast UART1 (czyli COM0 zamiast COM1). Program wysyła testowe komunikaty przez port COM0. Aby zobaczyć rezultat działania musimy wykorzystać program do odczytu z COM0. Jak poprzednio polecam program putty, ale wystarczy nawet hyperterminal spod windows. Niestety jeśli uruchomimy terminal, nie zobaczymy spodziewanego rezultatu. Wygląda jakby nasz program nie działał. Żeby uruchomić program musimy wyjąć zworki: J5 - ISP J7 - RST Po ich wyjęciu resetujemy mikrokontroler przyciskiem RESET i widzimy, że program działa poprawnie. Niestety, gdy zamkniemy terminal i spróbujemy zaprogramować mikrokontroler, płytka nie będzie chciała się zaprogramować. Przed programowaniem musimy ponownie założyć zworki J5 i J7 oraz nacisnąć reset. Jak widać jest to dosyć męcząca procedura. Dlatego w poprzednich przykładach wykorzystywaliśmy COM1 do komunikacji, a COM0 do programowania. Bootloader Pozostaje wytłumaczyć magię zworek J5 i J7. Przy okazji znajdziemy nieco łatwiejszą metodę programowania i komunikacji przez port COM0. Najpierw musimy poznać nieco bliżej tzw. bootloader. Jest to program, który jest wgrywany do każdego procesora LPC2114 przez producenta. Gdy kupujemy nowy procesor bootloader jest już do niego wgrany. Co ciekawe, nawet po zaprogramowaniu procesora naszym programem bootloader nadal w nim pozostaje. Tak jak na PC możemy mieć wiele programów na raz, również w mikrokontrolerze może być wgranych wiele programów. Aby programy sobie nie przeszkadzały, znajdują się one pod innymi adresami. Bootloader jest uruchamiany podczas każdego startu, czy resetu procesora. Dopiero bootloader uruchamia nasz program. Do czego służy bootloader? Przede wszystkim do programowania procesora przez UART. Po resecie procesora najpierw uruchamiany jest bootloader, który sprawdza stan pinu P0.14. Jeśli na pinie tym będzie logiczne „1”, przekazuje sterowanie (uruchamia) do naszego programu. Jeśli na wejściu P0.14 po resecie pojawi się logiczne „0” bootloader przejmuje kontrolę i oczekuje na komunikację przez UART0. Do komunikacji z bootlaoderem (czyli programowania procesora) można wykorzystać darmowe programy takie jak: * LPC2000 Flash Utility - http://www.nxp.com/products/microcontrollers/support/software_download/lpc2000/ * FlashMagic - http://www.flashmagictool.com/ * lpc21isp - http://sourceforge.net/projects/lpc21isp/ Ostatni z tych programów jest przez nas wykorzystywany. W pliku makefile znajdziemy odwołanie do niego. Przyciskając Ctrl+F5 wywołujemy właśnie ten program. Teraz gdy wiemy, że po resecie uruchamiany jest nie nasz program, tylko właśnie bootloader, czas przyjrzeć się pinowi P0.14 oraz zworkom J5 i J7. Popatrzmy na schemat Linia A1 jest podłączona właśnie do portu P0.14. Natomiast RST do dopowiada za reset procesora. Jeśli zworka J7 jest założona to to układ pozwala na resetowanie procesora przez PC przy użyciu linii DTR złącza RS-232. Podobnie zworka J5 odpowiada za zerowanie wejścia P0.14 (uruchamiające programowanie przez bootloader) przez linię RTS złącza RS-232. Na schemacie widać jeszcze podłączenie przełącznika S2 z wejściem P0.14 przez zworkę INT1. Wykorzystamy tę możliwość nieco dalej. Gdy zworki J7 oraz J5 są założone, przy wykorzystaniu portu RS-232 można wykonać reset procesora oraz wymusić logiczne „0” na wejściu P0.14. Dzięki temu możliwe jest uruchomienie bootloadera z poziomu PC. Naciskamy ctrl+F5 i wszystko dzieje się automatycznie. Mikrokontroler jest resetowany, na P0.14 wymuszany jest stan „0” i rozpoczyna się programowanie. Niestety czasem taka „automatyzacja” działa nie najlepiej. Jeśli chcemy COM0 wykorzystać jako zwykły port komunikacyjny, linie DTR oraz RTS mogą wpływać na działanie mikrokontrolera. Widzieliśmy to po wgraniu przykładowego programu. Program nie działał, bo procesor był cały czas resetowany. Dużo zależy od programu sterującego portem RS-232, może on używać linii DTR i RTS lub nie. W przypadku putty niestety mikrokontroler nie może działać. Po wyjęciu zworek J5 oraz J7 mikrokontroler działa normalnie, ale nie można automatycznie go programować. Pozostaje zastanowić się, jak niejako „ręcznie” uruchomić bootloader w trybie programowania. Producent płytki dostarczył w tym celu 2 przełączniki: RESET oraz INT1. Jeśli przytrzymując INT1, naciśniemy RESET, procesor zostanie zresetowany, a bootloader odczyta na wejściu P0.14 stan „0” (o ile oczywiście zworka INT1 zostanie założona). Dzięki temu możemy zaprogramować procesor bez zworek J5 i J7. Procedura jest następująca: 1) przytrzymaj przycisk INT1 2) naciśnij i zwolnij RESET 3) zwolnij INT1 4) rozpocznij programowanie klikając przycisk Start w programie FlashMagic, albo odpowiednik w pozostałych Teraz mamy nową, znacznie łatwiejszą procedurę pozwalającą na wykorzystanie COM0 zarówno do programowania, jak i komunikacji. Przy okazji drobna uwaga. W projekt płytki ZL1ARM zakradł się mały błąd. Kondensator C9 o pojemności 100nF zapewnia filtrowanie drgań przycisku S2, ale jednocześnie może powodować zawieszanie (właściwie - uruchamianie bootloadera) podczas startowania płytki. Raz na kilka uruchomień program nie startuje. Jeśli taki efekt się pojawia należy zmienić kondensator na mniejszy. Program16.zip 3 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!