Instrukcja Programator/Debugger Jtag Telwis www.telwis.pl Spis Treści ARM toolchain... 1 Debugger OpenOCD... 2 Edytor (IDE) Eclipse... 2 Start OpenOCD w Eclipse.... 6 Instalacja sterowników... 7 Podstawy poruszania się w menu... 9 Złącze 16 pinowe... 10 Diody LED... 10 zworka... 10 Aby OpenOCD działał w środowisku Eclipse trzeba wykonać trzy podstawowe kroki: 1. zainstalować Sourcery G++ Lite Edition for ARM w wersji EABI. Jest to TOOLCHAIN, który możemy za darmo pobrać ze strony Codesourcery. szukać należy tutaj: http://www.mentor.com/embedded-software/sourcerytools/sourcery-codebench/editions/lite-edition/ 2. zainstalować Debugger OpenOCD. Źródło jest tutaj: http://openocd.sourceforge.net/ 3. zainstalować Eclipse IDE for C/C++ Developers. http://www.eclipse.org/downloads/ Jest to aplikacja działająca pod systemem Windows i pozwalająca w trybie okienkowym (windowsowym) uruchomić zewnętrzną aplikacją OpenOCD a więc kompilować oraz zaprogramować i debugowac kod wynikowy. Do pracy z Eclipse wymagana jest możliwie najnowsza wersja Java. Poniższy przykład oparty jest na mikrokontrolerze STM32F103 oraz interface ie Jtag-Telwis. ARM toolchain Proces instalacji Sourcery G++ Lite Edition for ARM w wersji EABI jest standartowy. Należy tylko pamiętać aby podczas instalacji zezwolić na wpisanie zmiennej środowiskowej PATH chociaż po zainstalowaniu programu możemy ją wpisać ręcznie. Aby sprawdzić czy zmienna PATH się zainstalowała oraz czy prawidłowo działa program, możemy w linii poleceń (Start > Uruchom... (Run...) -> cmd) wpisać komendę arm-none-eabi-gcc --version na co program w odpowiedzi da nam następujący komunikat:
C:\>arm-none-eabi-gcc version arm-none-eabi-gcc (Sourcery G++ Lite 2009q1-161) 4.6.1 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE Debugger OpenOCD Proces instalacji OpenOCD też jest standardowy i niezależny od instalacji Toolchaina. Należy pamiętać aby sprawdzić czy plik wykonawczy OpenOCD.exe jest wpisany w zmienną środowiskową co pozwoli nam na uruchamianie debugera OpenOCD z linii poleceń z każdego miejsca na dysku. Poprawność instalacji sprawdzamy z linni komend (Start > Uruchom... (Run...) -> cmd). W dowolnym folderze wpisujemy komendę: openocd --version, na co program odpowie komunikatem: C:\>openocd --version Open On-Chip Debugger 0.6.1 (2012-10-07-10:34) Release Licence under GNU GPL v2. For BUG reports,read http://opensourceforge.net/doc/doxygen/bugs.html Edytor (IDE) Eclipse Eclipse umożliwia sterownie zainstalowanymi wcześniej aplikacjami wykorzystując plik makefile do kompilacji, uruchamiania w tle OpenOCD a tym samym zaprogramowanie do mikrokontrolera kodu wynikowego i za pomocą GDB debugowanie tego kodu. Eclipse nie wymaga instalacji. Jest gotowy do działania od razu po rozpakowaniu. Aby zaprzęgnąć toolchaina oraz debuggera w środowisko Eclipse potrzebna jest konfiguracja składająca się z kilku kroków. Aby stworzyć nowy projekt trzeba kliknąć: File > New > C Project i w pole Project name wpisać własną nazwę nowego projektu. W oknie Project type należy wybrać: Makefile project\empty Project \Other Toolchain i kliknąć na Finish. Opcje projektu można zmienić później klikając w menu Project\Properties.
W zakładce Project->Properties->C\C++ Build i na karcie Builder Settings należy odznaczyć opcję Use default build command i w polu tekstowym zmienić wpis na cs-make. W zakładce Project->Properties->Settings na karcie Binary Parsers należy zaznaczyć GNU Elf Parser w odpowiednich polach tekstowych tej karty wpisać ścieżki dostępu do odpowiednich plików z programu CodeSoucery, który wcześniej zainstalowaliśmy. Standardowo zainstalowany Codesoucery ma ścieżki dostępu widoczne na poniższym screenie.
Teraz skonfigurujemy GDB Debugger w środowisku Eclipse. Otwieramy zakładkę Run z menu i wybieramy Debug Configurations W panelu z lewej należy kliknąć na GDB Hardware Debugging aby aktywować tą zakładkę. Następnie należy kliknąć na przycisk New aby utworzyć nową konfigurację. W rezultacie uruchomi się okno z nową konfiguracją do wypełnienia. W zakładce Main trzeba wprowadzić własną nazwę tej konfiguracji Jeżeli okno Project jest puste, klikamy zakładkę Browse I wybieramy projekt, który chcemy debugować. Automatycznie w zakładce C/C++ Application puste pole wypełni się odpowiednim plikiem Elf. Następnie trzeba odznaczyć pole wyboru (ustawić jako puste) Disable auto build aby zbudowana binarka (plik binarny) przypadkiem nie miała złych ustawień. Lepiej jest później użyć komendy Project->Build All z menu głównego za każdym razem kiedy zmieni się kod źródłowy. Upewnić się czy wybrany jest Standard GDB Hardware Debugging. Jeżeli nie to kliknąć na Select other... aby zmienić. Z pewnych powodów Debugger Services Framework nie działa prawidłowo z OpenOCD.
Teraz należy przejść do zakładki Debugger i kliknąć przycisk Browse... aby wstawić ścieżkę dostępu do pliku wykonawczego debugera GNU arm-none-eabi-gdb w katalogu BIN. W polu Port Number należy wstawić nr portu 3333 w którym Eclipse będzie się komunikować z OpenOCD. Na następnej karcie Startup (zrzut ekranu poniżej) w oknie Initialization Commands należy odznaczyć Reset and Delay. Podobno (sam nie testowałem) nie działają prawidłowo z toolchainami dla procesorów ARM. W polu tekstowym tego okna możemy wpisać komendy wydawane bezpośrednio dla OpenOCD. Dla układu z mojego przykładu STM32F103 należy wpisać nast. Komendy GDB: -mon reset reset układu -mon halt zatrzymuje rdzeń -load ładuje nowy obraz
W dolnym okne - Runtime Options należy zaznaczyć Set breakpoint at i w pole tekstowe wpisać main aby w czasie pierwszego debugowania program zatrzymał się na tym breakpoint cie. Często Resume też musi być zaznaczone. Start OpenOCD w Eclipse. Teraz trzeba jeszcze utworzyć konfigurację za pomocą której jednym kliknięciem uruchomi się OpenOCD w środowisku Eclipse. Aby poprawnie skonfigurować Eclipse trzeba wejść w zakładkę External Tools (zielony przycisk w menu narzędziowym z małą skrzyneczką) I z rozwiniętego menu wybrać zakładkę External Tools Configuration. W zakładce External Tools Configuration należy w pole tekstowe Location wstawić ścieżkę dostępu do pliku wykonawczego openocd.exe w zakładce Working Directory wstawić ścieżkę dostępu do naszego projektu w zakładce Arguments wpisać komendy jakie OpenOCD musi wykonać aby się uruchomił. OpenOCD po uruchomieniu pobiera informacje z plików [interface].cfg oraz z [target].cfg.
Są to pliki konfiguracyjne znajdujące się w katalogu OpenOCD\scripts. Poniższy przykład oparty jest na mikrokontrolerze STM32F103 oraz interface ie jtagkey i takie właśnie pliki konfiguracyjne figurują na poniższym przykładzie. Instalacja sterowników Podłaczyć jtag do portu USB. System wykryje nowe urządzenie i otworzy okno wizzard a. Wymagana jest ręczna instalacja sterownika ponieważ windowsowy wizzard najprawdopodobniej zainstaluje nam domyślne sterowniki ze strony ftdi podczas gdy wymagane sterowniki są z biblioteki libusb-win32. Ręczna instalacja polega na tym, aby system operacyjny nie wyszukiwał sam sterowników. W trakcie instalacji musimy więc zaznaczyć opcję Nie szukaj,sam wybiorę sterownik do zainstalowania i w tym miejscy należy samemu wskazać systemowi katalog, w którym znajduje się wymagany sterownik. Do pracy z OpenOCD w środowisku Eclipse należy zainstalować sterowniki jtag-telwisdriver z katalogu Drivers\libusb-win32 (są dostępne na www.telwis.pl w dziale wsparcie Techniczne->Sterowniki). Sterowniki te należy instalować tylko dla pierwszego kanału układu FT2232 (kanał A), ponieważ tylko ten kanał obsługuje interface jtag, natomiast drugi kanał tego układu (kanał B) wymaga sterowników ftd2xx z katalogu Drivers/ftd2xx. Po zainstalowaniu sterowników oraz podłaczeniu jtaga, w menadżerze urządzeń powinny pojawić się nazwy zainstalowanych sterowników (zrzut ekranu poniżej).
Jeżeli wszystko skonfigurowano poprawnie to w celu sprawdzenia należy podłączyć jatg a z podłączonym docelowym układem i następnie uruchomić Eclipsa. Powinien być widoczny ostatnio wczytany projekt. Klikamy kolejno Run->External Tool->[nazwa projektu]. W przykładzie poniżej jest to OpenOCD+jtagkey+stm32F1x. Jeżeli wszystko przebiegnie prawidłowo to w dolnej zakładce Console powinna pojawić się lista komunikatów podobna do poniższej. adapter speed: 1000 khz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 cortex_m3 reset_config sysresetreq Info : clock speed 1000 khz Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints Oznacza to, że jtag skomunikował się z OpenOCD, rozpoznał podłączony mikrokontroler i można przystąpić do załadowania image do mikrokontrolera i debugowania, wstawiając break pointy i testując nasz kod źródłowy. Jednym ze sposobów jest kliknięcie kolejno: Run->Debug History-> [nazwa wcześniej utworzonej konfiguracji debugowania] w tym przypadku jest to: 1 stm_blink_test Debug.
Jeżeli kod programu zostanie załadowany do mikrokontrolera, wtedy otrzymamy w oknie konsoli komunikat jak na poniższym listingu. load D:\\Programowanie\\C\\JtakTest\\stm32_blink_led-1.2.1-120107\\out\\stm32_blink_led.elf Loading section.text, size 0x4b8 lma 0x8000000 Start address 0x8000130, load size 1208 Transfer rate: 2 KB/sec, 1208 bytes/write. tbreak main Temporary breakpoint 2 at 0x80002f2: file main.c, line 79. Note: automatically using hardware breakpoints for read-only addresses. continue Temporary breakpoint 2, main () at main.c:79 79 volatile uint32_t count, count_max = 1000000; Oznacza to, że teraz można przejść do edytora C/C++, otworzyć plik main.c i wstawiać breakpointy testując kod źródłowy. Podstawy poruszania się w menu 1.przyciski odpowiedzialne za uruchom, wstrzymaj, zatrzymaj debugowanie. 2.wskazuje gdzie wstawiono przykładowy break point (nr linii w kodzie) 3.Po zatrzymaniu debugowania OpenOCD jest wciąż uruchomiony i działa w tle. Aby zakończyć i opuścić OpenOCD trzeba nacisnąć przycisk 4.
Złącze 16 pinowe JVREF ntrst TDI TMS TCK n/c TDO nsrst JVREF Diody LED Na płytce JTAG-Telwis znajdują się dwie diod LED. Zielona - obecność prawidłowego napięcia JVCC zasilającego bufory interfejsu i układ docelowy Żółta - linia nsrst jest w stanie aktywnym (stan niski) układ docelowy jest zresetowany, zworka Zworka służy do kontroli zasilania. Nieprawidłowa konfiguracja zworki może doprowadzić do uszkodzenia JTAGa, układu docelowego lub portu USB w komputerze PC! Domyślnie zworka jest wyjęta. Możliwe są nast. pozycje: 1. Założenie zworki w pozycję 3V3 powoduje zasilanie buforów JTAGa (oraz układu docelowego za pośrednictwem linii JVCC) napięciem 3,3V. Możliwie jest wtedy debuggowanie układów bez doprowadzania do JTAGa napięcia zasilającego bufory i / lub zasilanie układu docelowego za pośrednictwem JTAGa. 2. Założenie zworki w pozycję 5V powoduje zasilanie buforów JTAGa (oraz układu docelowego za pośrednictwem linii JVCC) napięciem 5V. Możliwie jest wtedy debuggowanie układów bez doprowadzania do JTAGa napięcia zasilającego bufory i / lub zasilanie układu docelowego za pośrednictwem JTAGa. 3. Jeśli układ docelowy ma własne zasilanie, które doprowadzone jest liniami JVCC, zworka musi być bezwzględnie zdjęta!