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.