Poradnik: STM32 i interfejs Segger J-Link w środowisku µVision (ARM/Keil)

J-Link firmy Segger to jeden z najczęściej wykorzystywanych interfejsów JTAG w świecie mikrokontrolerów z rdzeniem ARM. Wynika to przede wszystkim z dużych możliwości interfejsu i stosunkowo atrakcyjnej ceny, ale również z możliwości łatwej integracji z wieloma środowiskami programistycznymi, zarówno komercyjnymi (np. µVision firmy Keil czy EWARM firmy IAR) jak i dostępnymi bezpłatnie (np. emIDE).

W artykule pokazano sposób konfiguracji interfejsu J-Link w środowisku programistycznym Keil µVision w wersji 4.53. Wykorzystywany w opisie sprzęt to zestaw uruchomieniowy ZL27ARM z mikrokontrolerem z rodziny STM32 (fot. 1) oraz interfejs J-Link EDU pokazany na fot. 2.

 

Fot. 1. Zestaw uruchomieniowy ZL27ARM opracowany przez KAMAMI.pl z mikrokontrolerem STM32F103

Fot. 1. Zestaw uruchomieniowy ZL27ARM opracowany przez KAMAMI.pl z mikrokontrolerem STM32F103

 

Fot. 2. Wygląd interfejsu J-Link EDU firmy Segger (dystrybutor KAMAMI.pl)

Fot. 2. Wygląd interfejsu J-Link EDU firmy Segger (dystrybutor KAMAMI.pl)

 

Oba urządzenia należy dołączyć do komputera za pomocą kabli USB – zestaw uruchomieniowy jest w ten sposób zasilany, natomiast interfejs J-Link komunikuje się z komputerem osobistym właśnie za pośrednictwem USB. Połączenie pomiędzy zestawem uruchomieniowym i JTAG-iem jest wykonane za pomocą 20-żyłowego przewodu znajdującego się na wyposażeniu J-Linka. Sposób wykonania połączeń pokazano na fot. 3.

 

Fot. 3. Interfejs J-Link EDU dołączony do zestawu ZL27ARM

Fot. 3. Interfejs J-Link EDU dołączony do zestawu ZL27ARM

 

Ponieważ J-Link jest jednym z kilku interfejsów JTAG standardowo obsługiwanych przez Keil µVision, to korzystanie z interfejsu, czyli programowanie pamięci mikrokontrolera, śledzenie wykonywania programu itp., można rozpocząć już w tym momencie (zakładamy oczywiście, że środowisko programistyczne jest prawidłowo zainstalowane na komputerze) – rys. 4.

 

Rys. 4. Obsługa interfejsu J-Link jest wbudowana w Keil µVision

Rys. 4. Obsługa interfejsu J-Link jest wbudowana w Keil µVision

 

Warto zwrócić uwagę na podejście firmy Segger do swoich klientów, gdyż nowe wersje oprogramowania do obsługi interfejsu J-Link można bezterminowo i bezpłatnie pobierać ze strony producenta. Zaleca się korzystać z tego faktu, gdyż liczba układów obsługiwanych przez interfejs jest stale powiększana, a oprogramowanie jest nieustannie rozwijane. Oprogramowanie sterujące wraz ze sterownikami i dokumentacją można pobrać ze strony firmy Segger: J-Link software & documentation packfot. 5. W chwili pisania tego artykułu najnowsza dostępna wersja oprogramowania dla interfejsu J-Link to 4.56.

 

Rys. 5. Firmy Segger umożliwia bezpłatne aktualizowanie oprogramowania do obsługi interfejsu J-Link

Rys. 5. Firmy Segger umożliwia bezpłatne aktualizowanie oprogramowania do obsługi interfejsu J-Link

 

Po pobraniu pliku Setup_JLinkARM_V456.zip, należy go rozpakować i rozpocząć instalację (uruchomić plik Setup_JLinkARM_V456.exe). Pod koniec instalacji jest wyszukiwane oprogramowanie zainstalowane na komputerze, które może współpracować z interfejsem J-Link – na rys. 6 można zobaczyć, że instalator wykrył zainstalowane środowiska: Atmel Studio 6 oraz Keil µVision 4.53.

 

Rys. 6. Podczas instalacji nowej wersji oprogramowania do obsługi J-Linka jest wykrywane oprogramowanie współpracujące z interfejsem

Rys. 6. Podczas instalacji nowej wersji oprogramowania do obsługi J-Linka jest wykrywane oprogramowanie współpracujące z interfejsem

 

Rys. 7. Po zainstalowaniu nowej wersji oprogramowania do obsługi J-Linka konieczna jest zmiana firmware'u

Rys. 7. Po zainstalowaniu nowej wersji oprogramowania do obsługi J-Linka konieczna jest zmiana firmware’u

 

Należy zdecydować czy pakiety te mają wykorzystywać nową wersję oprogramowania czy też nie – oczywiście warto dokonać aktualizacji oprogramowania. Pierwszą widoczną zmianą po aktualizacji jest to, że próba użycia J-Linka wymaga wgrania nowego firmware’u do interfejsu – na szczęście jest to czynność nie wymagająca ingerencji użytkownika (rys. 7). Od tego momentu w aplikacjach będzie wykorzystywana nowa wersja oprogramowania (rys. 8).

 

Rys. 8. Wersję wykorzystywanego oprogramowania można sprawdzić również z poziomu µVision

Rys. 8. Wersję wykorzystywanego oprogramowania można sprawdzić również z poziomu µVision

 

J-Link jako programator

Po wgraniu do µVision projektu należy sprawdzić czy w opcjach projektu jest wybrany odpowiedni mikrokontroler. W tym celu należy wybrać w menu Project | Options for Target… i następnie wybrać zakładkę Device. W zestawie ZL27ARM jest zamontowany układ STM32F103VBT6 i taki układ powinien być wybrany (rys. 9). Wybrany typ układu jest zapisywany w pliku projektu, więc czynność tę wykonuje się tylko raz.

 

Rys. 9. Okno wyboru typu mikrokontrolera w µVision

Rys. 9. Okno wyboru typu mikrokontrolera w µVision

 

Następnie należy wybrać typ interfejsu wykorzystywanego do programowania układu docelowego. W tym celu w menu głównym Flash | Configure Flash Tools… i następnie w zakładce Utilities w polu Use Target Driver for Flash Programming należy wybrać J-LINK / J-Trace Cortex (rys. 10).

 

Rys. 10. Okno wyboru typu interfejsu programującego

Rys. 10. Okno wyboru typu interfejsu programującego

 

W tym momencie jest już wybrany odpowiedni typ programowanego układu oraz właściwy interfejs do programowania. Wydaje się, że konfiguracja interfejsu jest zakończona. Co więcej, wybranie w menu polecenia skasowania pamięci mikrokontrolera Flash | Erase kończy się sukcesem (rys. 11). Przynajmniej tego należało oczekiwać…

 

Rys. 11. Komunikat o poprawnym skasowaniu zawartości Flash

Rys. 11. Komunikat o poprawnym skasowaniu zawartości Flash

 

Jednak po wyzerowaniu mikrokontrolera zamontowanego w zestawie uruchomieniowym okazało się, że nadal jest uruchamiany program, który znajdował się tam wcześniej, czyli pamięć nie została skasowana. Co więcej, próba zaprogramowania pamięci mikrokontrolera kończy się komunikatem błędu (rys. 12).

 

Rys. 12. Zaskakujący efekt - wbrew wcześniejszemu komunikatowi, pamięć Flash nie została skasowana i nie daje się zaprogramować

Rys. 12. Zaskakujący efekt – wbrew wcześniejszemu komunikatowi, pamięć Flash nie została skasowana i nie daje się zaprogramować

 

Ten zaskakujący efekt wynika ze specyfiki µVision, w którym dodatkowo konieczne jest wskazanie algorytmu do zaprogramowania układu docelowego. W tym celu należy w menu głównym wybrać Flash | Configure Flash Tools… i następnie w zakładce Utilities nacisnąć Settings (rys. 13).

 

Rys. 13. Pierwszy krok rozwiązania problemu braku algorytmu obsługi pamięci Flash

Rys. 13. Pierwszy krok rozwiązania problemu braku algorytmu obsługi pamięci Flash

 

Rys. 14. Drugi krok rozwiązania problemu braku algorytmu obsługi pamięci Flash

Rys. 14. Drugi krok rozwiązania problemu braku algorytmu obsługi pamięci Flash

 

W wyświetlonym oknie Cortex JLink/JTrace Target Driver Setup (rys. 14) należy nacisnąć przycisk Add, żeby wyświetlić listę pokazaną na rys. 15. Z listy tej należy wybrać algorytm odpowiedni do programowanego układu – w przypadku mikrokontrolera STM32F103VB jest to pozycja STM32F10x Mid-density Flash.

 

Rys. 15. W kolejnym kroku wybieramy z listy algorytm obsługi pamięci Flash dla używanego typu mikrokontrolera

Rys. 15. W kolejnym kroku wybieramy z listy algorytm obsługi pamięci Flash dla używanego typu mikrokontrolera

 

Po wykonaniu wymienionych czynności konfigurację interfejsu J-Link w Keil µVision można uznać za zakończoną – możliwe jest zarówno kasowanie, jak i programowanie pamięci mikrokontrolera (rys. 16). Na szczęście informacje konfiguracyjne (wybrany typ programowanego układu, typ wykorzystywanego interfejsu oraz algorytm) są zapisywane w pliku projektu, więc przy dalszej pracy z projektem nie ma potrzeby wykonywania tych czynności.

 

Rys. 16. Od tej chwili wszystkie operacje na pamięci Flash będą wykonywane prawidłowo

Rys. 16. Od tej chwili wszystkie operacje na pamięci Flash będą wykonywane prawidłowo

 

J-Link jako debugger

W µVision możliwe jest używanie do debuggowania innego interfejsu niż interfejs wykorzystywany do programowania układu docelowego. Konieczne jest więc wskazanie odpowiedniego interfejsu wykorzystywanego do debuggowania, nawet jeżeli do obu czynności jest używany ten sam interfejs JTAG. W tym celu w menu Flash | Configure Flash Tools… i następnie w zakładce Debug w polu Use należy wybrać J-LINK / J-Trace Cortex (rys. 17).

 

Rys. 17. Okno konfiguracji interfejsu do debugowania pracy mikrokontrolera

Rys. 17. Okno konfiguracji interfejsu do debugowania pracy mikrokontrolera

 

Od tej chwili można już wykorzystywać interfejs J-Link w trybie debuggowania w środowisku Keil µVision. W przytaczanym przykładzie po naciśnięciu Debug | Start/Stop Debug Session zostanie uruchomiona praca krokowa – rys. 18.

 

Rys. 18. Główne okno pakietu µVision podczas monitorowania pracy krokowej mikrokontrolera

Rys. 18. Główne okno pakietu µVision podczas monitorowania pracy krokowej mikrokontrolera

 

Rys. 19. Okno konfiguracji parametrów środowiska i interfejsu J-Link w trybie debugowania

Rys. 19. Okno konfiguracji parametrów środowiska i interfejsu J-Link w trybie debugowania

 

Po naciśnięciu przycisku Settings możliwa jest zmiana ustawień pracy środowiska i interfejsu w trybie debuggowania (fot. 19).
KAMAMI.pl

Autor: varhyid@o2.pl