Czy można stworzyć interfejs JTAG z arduino?


14

Jeśli tak, czy można skierować mnie do strony, która mówi, jak to zrobić? Wydaje mi się, że mogłem znaleźć sposób , ale nie jestem pewien, czy to jeszcze zadziałałoby (muszę znaleźć coś, aby to przetestować).

To pytanie jest związane z moim poprzednim pytaniem znajdującym się tutaj.

W przypadku, gdy potrzeba więcej informacji w tle.


JBailey Właśnie natknąłem się na twoje pytanie dotyczące użycia arduino do stworzenia konwertera JTAG-USB i zastanawiałem się, jak sobie poradziłeś? \

Odpowiedzi:


14

Tak, możliwe jest przekształcenie Arduino w adapter ARM JTAG.

Istnieją trzy problemy: napięcie, prędkość i sterowniki.

Arduino działa natywnie przy 5 V. Większość mikrokontrolerów ARM nie ma tolerancji 5 V na swoich pinach JTAG i wymaga 3,3 V. Najłatwiejszym rozwiązaniem jest uruchomienie Arduino przy napięciu 3,3 V , w przeciwnym razie konieczna będzie konwersja poziomu ( pomysły - patrz konwersja I2C z 3,3 na 5,0 V ).

Arduino jest podłączony do komputera za pomocą łącza szeregowego. Wątpię, czy osiągnie to szybciej niż 115200 b / s, co spowoduje, że interaktywne działania, takie jak przechodzenie przez kod w debuggerze, będą bardzo wolne. Będziesz jednak mógł wgrywać kod i przeładowywać urządzenia.

JTAG to protokół wysokiego poziomu, specyficzny dla każdej rodziny procesorów, który używa interfejsu podobnego do SPI do wymiany danych. Większość kluczy JTAG zapewnia interfejs SPI przez USB, a resztę pracy pozostawia aplikacji PC. OpenOCD i URJTag to popularne opcje. Będziesz potrzebował sterownika w jednym z nich dla twojego protokołu Arduino JTAG.

Bus Pirate jest bardzo podobny do Arduino (mikrokontroler o niskiej prędkości + układ FTDI). Obsługuje JTAG z OpenOCD, więc na pewno jest to możliwe.

Jeśli korzystasz z Teensy / Opendous lub innej płyty AVR-USB, możesz użyć eStick-JTAG .

Ale w przypadku utraconego kosztu JTAG polecam jeden z kluczy opartych na FTDI2232. Są tanie i dobrze wspierane przez OpenOCD.


5

Jest to możliwe, ale bardzo trudne. Nie podoba mi się JTAG oparte na FTDI, ponieważ układy FTDI są gotowymi czarnymi skrzynkami i tak naprawdę nie można się ich nauczyć.

Gdybym chciał zbudować USB-JTAG z AVR, dostałbym taki z co najmniej pełną obsługą USB w układzie. Następnie weź stos USB AVR (kody źródłowe c) i spójrz na przykładowy szeregowy USB. Ponieważ bitbanging nad usb jest złym pomysłem (duże opóźnienie), należy go przekonwertować na polecenia wyższego poziomu, które instruują MCU, aby sam wykonał bitbanging (lub jeśli to możliwe, użyje SPI) i zwróci wynik wysokiego poziomu nad usb (pełne bajty ). Ale potem pojawia się potrzeba napisania sterowników dla IDE w celu obsługi nowego urządzenia JTAG w celu debugowania nad nim. OpenOCD i URJTag mają kod źródłowy sterowników dla wielu urządzeń jtag, więc musisz pobrać i przerobić jeden dla nowo wynalezionego urządzenia. Zobacz, jak niektóre osoby wykonały podobną pracę: http://code.google.com/p/estick-jtag/


1

Spójrz na openocd. Backendy są w większości oparte na podejściu bit bang portu równoległego, myślę, że posuwa się tak daleko, że zmienia się tylko jeden bit na raz. Dość łatwo jest wziąć to, co, jak sądzę, nazywają atrapą zaplecza, co jest przykładem. Wyślij dowolne polecenie zapisu bitu do arduino i ustaw lub wyczyść ten bit. Gdy zostaniesz poproszony o odczytanie bitu wejściowego, wyślij polecenie do arduino, aby wykonać to zadanie i zwrócić wyniki.

Zrobiłem dokładnie to z sukcesem, ale nie z arduino, miałem rozmowę openocd z hosta na symulowanym rdzeniu ramienia działającym w symulatorze hdl.

Zauważ, że niektóre specyfikacje jtag są zamknięte, na przykład kora-m3 jest jakimś rodzajem zserializowanej zmniejszonej liczby pinów jtag, które ostatnio szukałem nie były dostępne bez NDA. to może nie mieć znaczenia, ponieważ openocd dba o to wszystko, o ile używasz interfejsu jtag obsługiwanego przez openocd, a bit back-end jest miejscem, w którym twoje arduino i jakikolwiek interfejs używany do dostania się do niego / z niego wchodzi do gry .

Jak zauważył już Joby, musisz uważać na napięcia (nie wszystkie smaki arduino mają 5 V i nie wszystkie kontrolery ramion mają 3,3 V) oraz kondycjonowanie sygnału i uziemienie i tak dalej. Jeśli twoja plansza jest zasilana z zasobów, które są na innym poziomie niż to, z czym zasilasz arduino, możesz stopić coś po połączeniu tych dwóch.


Zauważ, że użycie szeregowego (lub gorzej USB z pakietowym transportem) do bit-bitu proxy może być bardzo wolne. O wiele bardziej wydajne jest, aby mikrokontroler wykonywał kompletne operacje i komunikował się z nim na wyższym poziomie, tzn. Kazał mu czytać ten rejestr, pisać ten, a nawet programować ten blok danych.
Chris Stratton,

1

Jest to możliwe, a ja faktycznie to zaimplementowałem i wyjaśniłem wszystko tutaj .

Na github znajduje się biblioteka , która składa się z dwóch części: programu działającego na arduino i skryptu python, który wysyła pliki XSVF do arduino.

Najprawdopodobniej będziesz potrzebować kilku rezystorów, aby przekształcić 5 V na 3,3 V, ponieważ większość układów FPGA i CPLD używa tego poziomu napięcia.

Miałem też pewne doświadczenia z pisaniem asemblera / deasemblera dla plików XSVF, kod znajduje się w tej samej bibliotece github i jest wyjaśniony w tym poście tutaj .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.