Pytanie:
Czy to właściwy sposób umieszczania wielu żetonów w jednym łańcuchu JTAG?
Maxthon Chan
2016-12-26 11:41:36 UTC
view on stackexchange narkive permalink

Myślę o projekcie hobbystycznym, w którym mikrokontroler i CPLD są połączone. Czy to jest właściwy sposób?

schematic

symuluj ten obwód - schemat utworzony przy użyciu CircuitLab

Pytania dodatkowe:

  • Czy istnieje jakieś „standardowe” wyprowadzenie, które powinienem zastosować podczas projektowania złącza JTAG?

    Mikrokontrolery Altera CPLD i ARM mają bardzo różne pół-standardowe wyprowadzenia JTAG. Czy mogę zdecydować się na coś, co jest w pewnym sensie standardem, który może być wygodny w obu środowiskach? Myślę o wyprowadzeniu CMSIS-DAP (standard używany w świecie ARM) z linią nTRST poprowadzoną do pinu 7 (inaczej nieużywanego na CMSIS-DAP), ale podświadomość powiedziała mi, że pinout Altera FPGA może być lepsze, ponieważ USB Blaster może być również używany w OpenOCD.

  • H jak debugować oba chipy naraz, jeśli to w ogóle możliwe?

    Ponieważ mam oba chipy w tym samym łańcuchu JTAG, teoretycznie powinienem być w stanie debugować oba chipy jednocześnie. Jak to zrobić w praktyce? Wiem, że OpenOCD + GDB może działać dla ARM, ale co z CPLD?

    Czy w takim układzie powinienem w ogóle unikać SWD na ARM?

  • Czy dzielenie zegarów między dwoma chipami jest dobrym pomysłem?

    Jak zasugerowano na diagramie, czy dobrym pomysłem jest taktowanie CPLD za pomocą funkcji wyjścia zegara MCU? Jak utrzymać zarządzanie EMC w tym scenariuszu?

  • Co to jest dobre połączenie magistrali dla dwóch chipów?

    Ponieważ omawiany układ jest dość dużym pakietem, mogę podłączyć CPLD do odsłoniętego interfejsu SRAM. Czy to dobry pomysł? Czy powinienem również podłączyć magistrale I2C i SPI? I kilka dodatkowych pinezek?

Łatwym sposobem sprawdzenia, czy programator JTAG będzie obsługiwał oba układy (lub przynajmniej pominie drugi układ), jest zakup „płytki rozwojowej altera epm570” i „płytki rozwojowej stm32f103”.Obydwa wydają się mieć minimalne, niedrogie płyty programistyczne.Jeśli wstępny test wykaże niezadowalającą obsługę CPLD w narzędziu ARM JTAG lub niezadowalającą obsługę ARM w narzędziu CPLD JTAG, należy zachować oddzielne interfejsy JTAG.
@MarkU Mam oba.Jak to przetestować?Podłącz mój J-Link do płyty deweloperskiej EPM570 i podłącz mój nadajnik USB do płyty STM32F103 i sprawdź, czy nadal mogą poprawnie wykryć łańcuch?
To jest poprawne.Chodzi o to, aby zweryfikować, czy programator JTAG można skonfigurować tak, aby omijał nieużywane urządzenie.Być może będziesz musiał jakoś powiedzieć programatorowi JTAG, co jest w łańcuchu JTAG, na wypadek, gdyby nie mógł automatycznie wykryć urządzeń.
@MarkU Jeśli obie sondy debugujące mogą poprawnie wykryć urządzenia, jak postępować z tego miejsca?Czy masz jakieś odpowiedzi dotyczące dodatkowych pytań?
Nie jestem pewien co do obsługi debugowania, musisz go wypróbować i zobaczyć.W przypadku płyty produkcyjnej, w której przestrzeń jest premium, preferowane jest użycie pojedynczego łańcucha JTAG.Ale w przypadku projektu hobbystycznego prawdopodobnie łatwiej jest je rozdzielić.
@MarkU Nie mam miejsca, aby poprowadzić wszystko na mojej tablicy, dlatego używam tego połączonego projektu.
Nie pokazałeś podciągnięć / podciągnięć, które są zwykle wymagane w TMS, TCK, TDI (zwykle podciąganie) i TRST (podciąganie).Na wyjściu TDO znajduje się zwykle mały rezystor szeregowy (typowo 33 omy).Jest paskudny problem z częściami bez TRST i w takich sytuacjach (typowych dla FPGA) TCK powinien zostać usunięty * w dół *
Jeden odpowiedź:
Krunal Desai
2016-12-30 12:43:42 UTC
view on stackexchange narkive permalink

Masz tam kilka pytań, postaram się odpowiedzieć na nie po kolei. Po pierwsze, dla JTAG:

Koncepcyjnie tak, zgadza się - JTAG jest łańcuchem / rejestrem przesuwnym i połączyłeś go jako taki. Oto przemyślenia, jakie mam na poziomie systemu:

  • Czy kiedykolwiek skończę z „zerwanym” łańcuchem? IE, to oba urządzenia w tej samej domenie zasilania (włączone w tym samym czasie) i oba są urządzeniami zdolnymi do działania JTAG regardless stanu - tj. Jeśli oprogramowanie nie jest załadowane lub jest w inny sposób uszkodzone, jest JTAG TAP część nienaruszona?

  • Fizycznie, jak blisko siebie znajdują się te urządzenia? Najprostszą rzeczą do zrobienia dla TCK jest podanie go do bufora zegara i skierowanie go do każdego urządzenia punkt-punkt. W przeciwnym razie można zaprojektować proste linie przesyłowe i poprowadzić je w stylu „przelotu” i zakończyć linię zakończeniem AC (rezystor i kondensator połączone szeregowo z GND). Nawet przy małych prędkościach JTAG, nowoczesny debugger JTAG może sterować szybkimi krawędziami, a ślad może skończyć się wystarczająco długo, aby uzasadnić uwzględnienie efektów TL.

  • Czy moje oprogramowanie JTAG (urjtag itp.) jest w stanie obsłużyć łańcuch różnych urządzeń? Wiele rozwiązań JTAG jest bardzo kruchych i pęka, gdy w łańcuchu znajdują się nieznane urządzenia. Jako minimum, powinieneś mieć dostępne pliki BSDL każdego urządzenia, aby oprogramowanie je rozpoznało (przez IDCODE) i wiedziało, jak długi jest IR każdej części. JTAG DRs zostaną następnie zdefiniowane na podstawie części.

Najczęstszym problemem, na który napotykają ludzie, są „zepsute” łańcuchy, w których TDO nie jest w stanie tego zrobić, ponieważ jednej z części nie ma (wymienne karty rozszerzeń), jest wyłączona lub w stan, w którym JTAG nie działa. Dodanie rezystora obejściowego, który można załadować do krótkiego TDI / TDO w części, może być dobrym pomysłem.

Inne problemy obejmują słabą integralność sygnału w TCK - pracowałem nad projektem, w którym projektant rozłożył TCK do ponad 10 węzłów na wielu płytkach drukowanych, bez żadnego ponownego sterowania. Jak możesz sobie wyobrazić, łańcuch był w zasadzie bezużyteczny ze względu na wszystkie odbicia i okropną integralność sygnału.

Pytania dodatkowe:

Czy istnieje jakieś „standardowe” wyprowadzenie, które powinienem zastosować podczas projektowania złącza JTAG?

Nie, ale jak powiedziałeś, istnieją pseudo-standardy od dostawców, takie jak Altera's dla ich USBBlaster / ByteBlaster / etc, lub "standardowe" pinout ARM dla J-Link lub podobnego. Musisz wziąć pod uwagę:

  • czy chcesz zlutować razem niestandardowe wiązki dla debuggerów? Jeśli tak, ile musisz zbudować dla swojego programu / projektu? Ręczne budowanie 20 uprzęży byłoby do niczego, a inżynier SW będzie na ciebie naprawdę zdenerwowany, jeśli straci 10 godzin, ścigając problem, który okazuje się sporadycznym zaciskiem na TDO.

  • Czy chcesz umieścić dodatkowe złącze na płycie tylko dla JTAG, czy też użyć rozwiązania bez złącza, takiego jak Tag-Connect, które jest bardziej odpowiednie do testowania końca linii z kosztem BOM 0 USD?

W każdym przypadku musisz podać co najmniej: VCC (dla sensu), GND, TCK, TMS, TDI, TDO i TRST # dla minimalnej implementacji JTAG. Ochrona ESD również nie jest tu złym pomysłem.

H, jak debugować oba chipy naraz, jeśli jest to w ogóle możliwe?

To wszystko jest po stronie oprogramowania hosta - możesz to zrobić, o ile twój SW (urjtag, OpenOCD) może łączyć stan obu części, ale jest to trudne. Nie wiem, jaka jest twoja aplikacja, ale moja intuicja mówi, że spędzisz większość czasu JTAG na programowaniu go w CPLD i może podłączeniu się do instancji ChipScope / SignalTap ILA. W przypadku MCU widzę bardziej szczegółowe debugowanie oprogramowania SW z Segger J-Link lub podobnym - w tym przypadku oprogramowanie do debugowania musi być wystarczająco inteligentne, aby obsługiwać łańcuch JTAG, w którym będzie odpowiednio nadmiernie / niedostatecznie przesunąć obsługiwać dodatkowe urządzenie w łańcuchu. Idealnie, CPLD siedzi w BYPASS i po prostu dodaje dodatkowy bit wypełnienia / cykl zegara do mastera JTAG.

Czy dzielenie zegarów między dwoma chipami to dobry pomysł?

Oczywiście, oszczędza ci to inny oscylator, zakładając, że działa elektrycznie (VIH / VIL / itd.) i spełnione są wymagania dotyczące precyzji. Czy nie masz nic przeciwko temu, że CPLD jest „martwy”, jeśli MCU nie pojawi się pierwszy? Wymusza zależność w systemie w zakresie kolejności włączania. Mogę również dodać linię RESET sterowaną przez MCU do CPLD, aby twój MCU mógł trzymać logikę CPLD w RESET, uruchomić zegar, a następnie cofnąć potwierdzenie RESET. Nie przypominam sobie, czy ta rodzina części Altera ma wewnętrzny oscylator RC używany do początkowej konfiguracji.

Jeśli chodzi o EMI / EMC, to jest poza zakresem tego pytania (IMO), ale postępuj zgodnie z najlepszymi praktykami dla pojedynczego sygnału zegarowego. Nie rób tego dłużej, niż potrzebujesz, użyj zakończenia serii, jeśli to konieczne, i użyj widma rozproszonego, jeśli jest to potrzebne / tolerowane.

o to jest dobre połączenie magistrali dla dwóch chipów?

Nie wiem, jaka jest twoja aplikacja. SPI jest proste i wymaga bardzo niewielu przewodów. Równoległy z pewnością by zadziałał, ale znowu nie znam wymagań dotyczących szybkości przesyłania danych ani opóźnienia, ale oczywiście jest więcej śladów.

STM32F103 ma domyślnie włączony TAP w trybie 5-przewodowego JTAG + SWD, a interfejs można wyłączyć w oprogramowaniu.I tak, jestem w porządku z założeniem złącza na JTAG i stworzeniem niestandardowych wiązek (stworzyłem już wiązki dla J-Link 20-pin do 10-pinowego CMSIS-DAP i 10-pinowego USB Blaster do 10-pinowego CMSIS-DAP wforma krzyżowo zaciskanych IDC) Oba chipy zasilane są z tego samego regulatora 3,3V.Mogę dodać piny, aby MCU zresetowało logikę CPLD, a jest też inny sygnał globalnego resetowania, który jest emitowany z sondy debugującej i może zresetować oba chipy jednocześnie.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...