Niedrogi programator JTAG do układów FPGA

Niedrogi programator JTAG do układów FPGA

Ceny profesjonalnych programatorów z interfejsem JTAG sięgają setek, a nawet tysięcy złotych. To może być przeszkodą w stosowaniu układów wymagających takich narzędzi. Programator zaprezentowany w artykule powstał po to, aby prostym i tanim sposobem programować układy FPGA firmy Lattice, ale może się sprawdzić także z innymi układami z interfejsem JTAG.

Podstawowe parametry:
  • przeznaczony do programowania układów FPGA firmy Lattice,
  • zbudowany na bazie układu FT232H,
  • komunikacja z komputerem poprzez USB,
  • połączenie z układem docelowym poprzez standardowe, 10-pinowe złącze JTAG.

Głównym elementem programatora jest układ FT232H produkowany przez firmę FTDI. Trzeba podkreślić, że FT232H i popularny FT232RL to zupełnie różne układy. Układ FT232H umożliwia konwersję danych przesyłanych poprzez USB na bardzo różne interfejsy cyfrowe, takie jak UART, I²C, SPI i wiele innych, a nas oczywiście interesuje możliwość użycia interfejsu JTAG. Układ scalony jest gotowym black-boxem, który wystarczy podłączyć i od razu działa bez konieczności programowania ani konfigurowania w jakikolwiek sposób.

Na rynku dostępne są trzy wersje układów, które mogą pracować jako JTAG:

  • FT232Hx – najprostszy i najtańszy, wyposażony w jeden konwerter,
  • FT2232Hx – dwa konwertery w jednym układzie ze wspólnym USB. W systemie prezentuje się jako dwa niezależne urządzenia, które mogą pracować w tym samym czasie niezależnie od siebie. Na przykład jeden z nich może funkcjonować jako przejściówka USB-UART, a drugi może pracować jako JTAG,
  • FT4232Hx – cztery konwertery w jednym układzie ze wspólnym USB.

W miejsce znaku x znajduje się litera określająca obudowę układu. Q oznacza obudowę QFN, a L oznacza obudowę LQFP. Płytka programatora została zaprojektowana w taki sposób, aby dało się przylutować układ zarówno w obudowie QFN, jak i LQFP.

Budowa i działanie

Schemat programatora został pokazany na rysunku 1. Jest w dużej mierze kopią aplikacji umieszczonej w dokumentacji układu FT232H. Drobną modyfikacją jest dodanie matrycy diod zabezpieczających przed przepięciami – układu scalonego typu USBLC6-2. W razie braku dostępności tego elementu można wlutować zworki w jego miejsce.

Rysunek 1. Schemat programatora

Pamięć typu 93LC56B służy do przechowywania konfiguracji układu FT232H. Do zmiany konfiguracji należy wykorzystać program FT_PROG, który można pobrać ze strony producenta pod adresem https://ftdichip.com/utilities/ – jedną z ciekawszych rzeczy jest możliwość ustawienia nazwy dla naszego urządzenia, która będzie wyświetlana przez Windows w Menedżerze Urządzeń. Inne ustawienia wymagają specjalistycznej wiedzy na temat funkcjonowania USB – zmiana PID, VID czy modyfikacja sterowników może spowodować, że układ FT232H przestanie działać i nie będzie można go już przeprogramować (wtedy trzeba wylutować układ pamięci i wlutować pustą).

Translator napięć

Programator został wyposażony w blok translacji napięć dla sygnałów JTAG. We współczesnej elektronice obserwujemy tendencję do obniżania wartości napięcia zasilania układów cyfrowych. Standard 5 V jest już rzadko stosowany, ale warto, żeby programator umożliwiał współpracę z układami w tym starszym standardzie. Napięcie 3,3 V obecnie wydaje się standardem dla większości układów scalonych, ale coraz częściej spotykamy układy pracujące przy napięciu 2,5 V, 1, 8 V, 1,2 V czy nawet jeszcze niższym. Aby umożliwić komunikację pomiędzy programatorem a układami scalonymi pracującymi przy różnych napięciach, zastosowano translator napięć typu TXB0108PW – umożliwia on podłączenie sygnałów o napięciu od 1,65 V do 5,5 V. W razie braku dostępności tego układu można go pominąć i wlutować rezystory-zworki (0 Ω) w miejsca R20, R21, R22, R23 i R24. W takiej sytuacji programator będzie działał tylko z układami, pracującymi przy napięciu 3,3 V. Kiedy układ TXB0108PW jest zamontowany, tych rezystorów oczywiście nie należy lutować.

Blok zasilania

Przydatną cechą programatora jest możliwość zasilania programowanego układu. W tym celu zastosowano regulowany stabilizator napięcia LM1117-ADJ. Aby z niego skorzystać, należy wetknąć zworkę w miejsce J2 i ustawić żądane napięcie potencjometrem R14.

Możliwe jest ustawienie napięcia w zakresie od 1,25 V do 3,8 V. Jeżeli chcemy zasilać układ napięciem 5 V, wówczas zworkę należy założyć na pozycję J1 i wtedy programowany układ będzie zasilany prosto z USB. Jeżeli nie chcemy dostarczać zasilania do programowanego układu, to nie należy zakładać zworki.

Montaż i uruchomienie

Schemat płytki PCB został pokazany na rysunku 2. Montaż programatora należy wykonać zgodnie z ogólnymi zasadami dotyczącymi montażu elementów SMD. Po zmontowaniu programator należy podłączyć do portu USB. System Windows sam zainstaluje właściwy sterownik do obsługi FT232H. Opcjonalnie można uruchomić aplikację FT_PROG, przetestować układ i zmieniać różne ustawienia według własnego uznania, ale można ten proces pominąć.

Rysunek 2. Schemat płytki PCB

Programowany układ należy podłączyć za pomocą przewodu taśmowego ze złączami IDC. Na płytce umieszczono dwa złącza goldpin 2×5 – jedno z rastrem 2,54 mm, a drugie z rastrem 1,27 mm. Pinout obu złączy jest identyczny i zgodny z powszechnie stosowanym standardem konektora JTAG. Dla porządku nazwy poszczególnych sygnałów umieszczono na płytce obok konektorów.

Fotografia 1. Wygląd zmontowanego programatora

Programator testowano z oprogramowaniem Lattice Diamond. Po uruchomieniu aplikacji Diamond Programmer nasz programator wykrywany jest automatycznie jako HW-USBN-2B (FTDI). Automatycznie są wykrywane także wszystkie układy scalone podłączone do interfejsu JTAG – na rysunku 3 widzimy, że aplikacja rozpoznała układ FPGA MachXO2.

Rysunek 3. Aplikacja Diamond Programmer współpracująca z programatorem na bazie układu FT232HL

Niewątpliwą zaletą zaprezentowanego rozwiązania jest sumaryczny koszt wszystkich elementów programatora – wynosi około 50 zł.

Dominik Bieczyński
leonow32@gmail.com

Wykaz elementów:
Rezystory: (SMD0603)
  • R1…R3, R5, R7…R9, R11: 10 kΩ
  • R4: 2 kΩ
  • R6: 12 kΩ, 1%
  • R10: 4,7 kΩ
  • R12: 100 Ω
  • R13: 220 Ω
  • R14: 500 Ω potencjometr precyzyjny
  • R20...R24: 0 Ω (uwagi w tekście)
Kondensatory: (SMD0603)
  • C1, C3, C5, C7, C8, C10, C14…C18, C20, C22, C23: 100 nF
  • C2, C4, C6, C9: 4,7 μF
  • C11: 10 nF
  • C12, C13: 10 pF
  • C19: 1 μF
  • C21: 10 μF
Półprzewodniki:
  • D10: USBLC6-2
  • U1: FT232Hx (QFP lub LQFP)
  • U2: TXB0108PW (TSSOP20)
  • U3: 93LC56B (SO8)
  • U4: LM1117-ADJ
Pozostałe:
  • K1: złącze mikro USB
  • K2: złącze IDC10
  • K3: goldpin 2×5, 1,27 mm SMD
  • X1: 12 MHz
  • L1, L2, L3: koralik ferrytowy 600 Ω@100 MHz (SMD0603)
  • J1, J2: goldpin 1×2 + jumper
  • J3: mikroswitch SMD
Artykuł ukazał się w
Elektronika Praktyczna
wrzesień 2022
DO POBRANIA
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio styczeń - luty 2025

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich styczeń 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów