Programowanie pamięci mikrokontrolerów w systemie i możliwość debugowania ich pracy w realnych warunkach aplikacyjnych są dziś oczywiste dla wszystkich konstruktorów stosujących w swoich opracowaniach współczesne mikrokontrolery. Standardowym interfejsem wykorzystywanym przez programatory do komunikacji z logiką zaimplementowaną w mikrokontrolerze jest 5-liniowy JTAG, niektóre rodziny mikrokontrolerów (zwłaszcza wyposażone w rdzenie Cortex-M0 i do nich zbliżone) są wyposażone w 2-liniowe interfejsy SWD, których poważną zaletą jest minimalizacja liczby linii wykorzystywanych do komunikacji programatora-debuggera z mikrokontrolerem.
Rok 2014 zapowiada się jako kolejny, w którym mikrokontrolery bazujące na rdzeniach Cortex firmy ARM będą wzmacniały swoją rynkową dominację. Rdzenie starszych generacji opracowane przez tę firmę (jak ARM7, ARM9 czy ARM11) odchodzą do historii, podobnie jak wszystkie starsze architektury bazujące na rdzeniach '51, AVR (8 i 32), ColdFire, PIC16/18, HC/HCS08 itp. Zwycięskiego pochodu rdzeni Cortex nic już nie zatrzyma zwłaszcza, że padają potężne "bastiony" bazujące na własnych opracowaniach, jak między innymi firmy będące liderami na rynku mikrokontrolerów: – Renesas, która – na razie – zastosowała rdzeń Cortex-A9 tylko w swoich mikroprocesorach z serii RZ/A, – Infineon, która wdraża kolejne modele mikrokontrolerów XMC4000 (rdzeń Cortex-M4) oraz XMC1000 (rdzeń Cortex- M0), – Freescale, która w swoich działaniach promocyjnych skupia się wyłącznie na rodzinie Kinetis (rdzenie Cortex-M4 oraz Cortex-M0+), – Texas Instruments, która po wpadce związanej z przejęciem Luminary Micro, konsekwentnie rozwija nowe linie mikrokontrolerów bazujących na rdzeniach Cortex-M4 (rodzina Tiva), – walkę o podtrzymanie popularności mikrokontrolerów AVR zarzuciła firma Atmel, której wysiłki wyraźnie obecnie są skierowane na wywalczenie sobie miejsca w świadomości konstruktorów korzystających z platform sprzętowych z rdzeniami Cortex (SAM D20 z Cortex- M0+, SAM3x z rdzeniem Cortex- -M3, SAM4x z rdzeniem Cortex-M4).
Grono rynkowych tuzów podążających szlakiem wytyczonym przez ARM wspiera szybko rosnące grono mniejszych firm, które zarzucają własne mikrokontrolerowe pomysły i rozwiązania i przechodzą na rdzenie Cortex. W celach ilustracyjnych wymienię jako przykłady - nie są to wszystkie! – firmy: Analog Devices (ADuCM36x z Cortex-M3 i CM4xx z Cortex-M4), Spansion (firma przejęła produkcję mikrokontrolerów od Fujitsu, ma w ofercie trzy rodziny układów: FM4 z Cortex-M4, FM3 z Cortex-M3 oraz FM0+ z Cortex-M0+), Silicon Labs (przejęta od EnergyMicro rodzina EFM32 z rdzeniami Cortex-M0+, Cortex-M3 i Cortex-M4).
Dla kompletu wstępnych informacji warto jeszcze wspomnieć o firmach, które jako pierwsze wsparły pomysł firmy ARM i zastosowały opracowane przez nią rdzenie w swoich mikrokontrolerach, jak m.in. NXP czy STMicroelectronics. W wielu europejskich krajach, w tym także w Polsce, rodzina mikrokontrolerów produkowanych przez tę drugą firmę – STM32 – jest obecnie często utożsamiana z "mikrokontrolerami ARM", co dowodzi słuszności decyzji podjętej przed laty.
Walkę z corteksowym "potopem" kontynuuje firma Microchip (w roku 2011 na 4 miejscu pod względem wartości sprzedaży mikrokontrolerów), która kilka lat temu zdecydowała się na zastosowanie w swoich 32-bitowych mikrokontrolerach rdzenia opracowanego przez firmę MIPS, który poza dużą liczbą zalet ma jedną wadę: nie podbił rynku. Konsekwencja działań Microchipa zasługuje na szacunek, ale - w mojej ocenie – nie daje długofalowej nadziei na ekspansję rodziny PIC32.
Biorąc pod uwagę wymienione powyżej przesłanki, w prezentacji programatorów i debuggerów dostępnych na krajowym rynku, skupimy się przede wszystkim na urządzeniach o największym potencjale praktycznym w odniesieniu do ceny, obsługujących najpopularniejsze typy mikrokontrolerów. Przedstawimy także ważne elementy osprzętu programatorów oraz programatory ISP dla układów PLD.
Programatory-debuggery ISP mikrokontrolerów z rdzeniami firmy ARM
Jak wspomniałem na początku artykułu, na rynku dominują obecnie 32-bitowe mikrokontrolery wyposażone w rdzenie z serii Cortex-M, standardowo wyposażane w jeden z synchronicznych interfejsów szeregowych, służących do programowania pamięci Flash i debugowania pracy układu w systemie: – JTAG (Joint Test Action Group), który jest interfejsem 5-przewodowym, opracowanym do celów testowania połączeń i wykonywania testów funkcjonalnych pomiędzy elementami zamontowanymi na PCB, który z czasem został zaadoptowany do debugowania pracy mikroprocesorów i mikrokontrolerów oraz programowania ich pamięci, – SWD (Serial Wire Debug), który jest interfejsem 2-przewodowym, o funkcjonalności podobnej do JTAG, ale nieco mniejszej przepływności danych (ponieważ sterowanie pracą interfejsu – przesyłanie komend sterujących – odbywa się w slotach czasowych transmisji danych).
W zależności od producenta, niektóre mikrokontrolery są wyposażane tylko w interfejs JTAG lub SWD, są także układy (jak na przykład STM32) z wbudowanymi obydwoma typami interfejsów, użytkownik może korzystać z nich wymiennie.
Na rysunku 1 pokazano fragment schematu systemu z mikrokontrolerem z rodziny STM32 ilustrujący sposób dołączenia programatora JTAG do mikrokontrolera, na rysunku 2 pokazano fragment schematu systemu z mikrokontrolerem ADuCM360 (Analog Devices), który wyposażono wyłącznie w interfejs SWD. W przypadku, kiedy mikrokontroler wyposażono w obydwa interfejsy (SWD i JTAG), linia sterująca TCK interfejsu JTAG jest alternatywnie linią SWCLK (SWD), a linia TMS – dwukierunkową linią danych SWDIO (SWD) – rysunek 3.
Wszystkie komercyjne programatory- -debuggery dla mikrokontrolerów obsługują obydwa przedstawione interfejsy, dzięki czemu – w zależności od wyposażenia mikrokontrolera i potrzeb konstruktora- -programisty – można wygodnie korzystać z jednego interfejsu niezależnie od typu mikrokontrolera, dla którego jest budowana aplikacja.
W tabeli 1 zestawiono podstawowe cechy najpopularniejszych, uniwersalnych interfejsów JTAG z USB dla mikrokontrolerów z rdzeniami ARM, przy czym pominięto niektóre ich wersje, cieszące się z różnych powodów niewielką popularnością oraz pracujące z systemami operacyjnymi innymi niż Windows. Znaczące różnice cen prezentowanych interfejsów wynikają z różnej gamy ich zaawansowanych możliwości, które zazwyczaj nie są wykorzystywane w typowych aplikacjach mikrokontrolerowych. Dobierając interfejs do własnych potrzeb warto zwrócić uwagę na fakt, że nie zawsze 20-krotnie wyższa cena oznacza proporcjonalnie większą funkcjonalność w typowych aplikacjach – cechy i parametry urządzenia i ich przydatność w realizowanych aplikacjach warto przeanalizować przed zakupem.
W tabeli 2 zestawiono najważniejsze cechy wyspecjalizowanych interfejsów- -programatorów, przystosowanych do obsługi wybranych rodzin mikrokontrolerów. W tabelach nie uwzględniono dostępnych na rynku pirackich wersji oryginalnych interfejsów, które niskimi cenami zachęcają do zakupu, ale nie zawsze są w stanie spełnić pokładane w nich (techniczne) nadzieje.
W prezentowanych zestawieniach nie uwzględniono zaawansowanych możliwości debugowania oferowanych przez niektóre urządzenia (traktujemy je jako dodatek do podstawowej funkcji programatora), uwzględniono natomiast możliwości programowania ISP oferowane przez niektóre typy programatorów stacjonarnych.
Programatory ISP mikrokontrolerów firmy Microchip
Jak wspomniałem na początku artykułu, Microchip jest jedną z niewielu firm kultywujących własne rozwiązania, w tym także korzystania do programowania pamięci Flash mikrokontrolerów za pomocą interfejsu ISP – w nomenklaturze firmy Microchip ICSP – In Circuit Serial Programming. Opracowany wiele lat temu dwuliniowy interfejs ICSP (rysunek 4) jest w pełni wykorzystywany we wszystkich współcześnie oferowanych mikrokontrolerach tej firmy, także dsPIC, PIC24 oraz we wszystkich wariantach PIC32. Poza programowaniem jest on także wykorzystywany do debugowania pracy mikrokontrolerów, co pozwala budować relatywnie tanie narzędzia sprzętowe wspomagające uruchamianie i testowanie systemów cyfrowych bazujących na tych układach.
Wiele typów mikrokontrolerów oferowanych prze firmę Microchip wyposażono także w dwa rodzaje interfejsów JTAG, do których dostęp jest możliwy poprzez jeden zestaw linii I/O. Jeden z tych interfejsów służy do testowania prawidłowości montażu i połączeń na PCB (boundary scan), drugi jest alternatywnym do ICSP kanałem umożliwiającym programowania pamięci Flash i monitorowanie oraz zarządzanie pracą CPU. Z tego powodu narzędzia oferowane przez firmę Microchip "domyślnie" wykorzystują natywny interfejs ICSP, którego funkcjonalność – przy zachowaniu pełnej kompatybilności "w dół" – są powiększane wraz z rosnącymi wymaganiami aplikacji. W zestawieniu prezentowanym w tabeli 3 uwzględniono możliwości programowania ISP mikrokontrolerów PIC i dsPIC oferowane przez niektóre typy programatorów stacjonarnych.
Akcesoria do programatorówdebuggerów ISP
Producenci interfejsów prezentowanych w artykule tworzą wokół nich "ekosystemy", w skład których wchodzą różnego rodzaju kable i płytki spełniające rolę przelotek pomiędzy złączem IDC20 (standardowe złącze JTAG), a innymi złączami coraz częściej stosowanymi w urządzeniach docelowych. Jednym z powodów i kierunków zmian jest miniaturyzacja złącz, czego przykładem mogą być przelotki J-Link Needle Adapter firmy Segger (fotografia 5), czy Segger J-Link ARM-14 (fotografia 6), która konwertuje złącze IDC20 na IDC14. Inną grupą "przelotek" są adaptery napięciowe, które umożliwiają programowanie i debugowanie mikrokontrolerów zasilanych napięciami o wartości innej niż 3,3 V, które jest najczęściej domyślną wartością przyjmowaną przez producenta.
Temu podobnych rozwiązań jest bardzo wiele i są one indywidualnie dostosowywane przez producentów interfejsów do wymogów i potrzeb klientów.
Drugą ważną grupą peryferii tworzących użytkowe otoczenie interfejsów prezentowanych w artykule są galwaniczne separatory sygnałów, których zadaniem jest galwaniczne rozdzielenie obwodów wyjściowych programatora-debuggera od docelowego układu (rysunek 7). Dzięki temu minimalizowane jest ryzyko uszkodzenia komputera, programatora lub innych elementów toru sygnałowego w wyniku braku wyrównania poziomu "0" sieci zasilającej we wszystkich urządzeniach (co często zdarza się w gniazdkach pozbawionych zerowania lub korzystania z urządzeń nieprawidłowo uziemionych).
Problem jest poważnie traktowany przez wszystkich producentów programatorów- -debuggerów, na przykład Segger oferuje specjalną płytkę J-Link JTAG Isolator (fotografia 8), podobne rozwiązanie o nazwie ULINK Isolation Adapter. Także producenci mikrokontrolerów dostrzegli problem i – przykładowo - Microchip oferuje specjalny interfejs separacyjny do MPLAB REAL ICE (o nazwie MPLAB REAL ICE Isolator – fotografia 9), a STMicroelectronics specjalną wersję popularnego programatora ST-LINK/V2-ISOL (fotografia 10). Galwaniczne separatory dla programatorów są dość kosztowne i w większości przypadków spowalniają ich pracę, co wynika z wykorzystania w nich jako elementy separacyjne transoptorów. Na tym tle bardzo atrakcyjnie wypada polski wyrób – JTAG Isolator firmy KAMAMI.pl (fotografia 11), który konstrukcyjnie został przygotowany do współpracy z interfejsami JTAG z sygnałem taktującym TCK o częstotliwości do 110 MHz, stosunkowo niskiej cenie i niewielkim poborze prądu (do 10 mA).
Podsumowanie
Przedstawiony w artykule przegląd dobrze oddaje aktualną sytuację na rynku, który krok-po-kroku jest dominowany przez mikrokontrolery z rdzeniami Cortex- -M. Upraszcza to sytuację konstruktorów, którzy mają mniej narzędzi, do tego coraz tańszych, mają coraz większe możliwości diagnostyczne. Programatory stacjonarne, także te wyposażone w interfejsy ISP/ICP, stają się narzędziami serwisowymi, coraz rzadziej stosowanymi podczas projektowania i uruchamiania nowych urządzeń. Zaledwie dwa lata temu sytuacja nie była tak jednoznaczna (vide wspomniany przegląd programatorów w EP9/2011), bardzo mnie ciekawi co nam przyniosą dwa kolejne lata…
Piotr Zbysiński, EP
Początki ISP
Rewolucja In System Programming (ISP) dokonywała się stopniowo, a – o czym nie wszyscy pamiętają – zaczęła się od układów PLD firmy Lattice z pierwszych serii ispLSI1000, które wyposażono w synchroniczny interfejs szeregowy o nazwie LatticeISP. Został on dość szybko zastąpiony przez JTAG (IEEE1149), który został przyjęty jako powszechny interfejs do programowania, konfigurowania i testowania w systemie przez wszystkich producentów układów PLD.
Przełom w programowaniu ISP mikrokontrolerów zawdzięczamy firmie Atmel, która wyposażyła w taki interfejs pierwsze mikrokontrolery z rodziny AVR, co miało miejsce w 1996 roku. Obecnie mikrokontrolery pozbawione możliwości programowania pamięci w systemie praktycznie zniknęły z rynku.
Taniej, ale czy warto?
Pokusą dla początkujących konstruktorów systemów z mikrokontrolerami wyposażonymi w rdzenie firmy ARM jest samodzielne wykonanie interfejsów programująco-debugujących, na przykład bazujących na układach interfejsowych USB firmy FTDI. W Internecie można znaleźć wiele opisów kompletnych rozwiązań bazujących na GDBserver, których możliwości są wystarczające dla większości aplikacji. W naszym raporcie z września 2011 taki sposób postępowania jawił się jako rozsądna droga dla oszczędnych, obecnie sytuacja wygląda nieco inaczej: za ok. 220 PLN brutto można stać się posiadaczem jednego z najdoskonalszych interfejsów do debugowania i programowania mikrokontrolerów z rdzeniami ARM (z wbudowanym SWD) – J-Link EDU firmy Segger.
Zalety corteksowego świata
Konstruktorzy korzystający z mikrokontrolerów wyposażonych w rdzeń ARM Cortex-Mx nie muszą zmieniać przyzwyczajeń ani kupować dodatkowych narzędzi sprzętowych, jeżeli z jakichś przyczyn chcą zmienić producenta mikrokontrolerów stosowanych w aplikacji. Jedyny warunek to posiadanie programatora-debuggera obsługiwanego natywnie przez środowisko programistyczne.
O czym nie piszemy w artykule i dlaczego?
Uważni Czytelnicy dostrzegą, że w artykule zostały pominięte natywne interfejsy producentów, wykorzystywane wyłącznie do programowania-debugowania mikrokontrolerów zamontowanych na zestawach ewaluacyjnych, a niedostępne w postaci samodzielnych urządzeń. Z tego powodu nie piszemy w artykule o interfejsach OpenSDA, PC-Link i im podobnych.