JTAG do ATmegi w wersji USB

AVR JTAGICE USB cloneJakiś czas temu przedstawiałem prosty układ elektroniczny pełniący rolę JTAG-a dla mikrokontrolerów ATmega. Był to znaleziony w Sieci klon firmowego JTAGICE, który to klon mimo prostej budowy znakomicie pełni swoją rolę. Jedyną istotną jego wadą jest sterowanie przez port szeregowy RS-232. Port ten jest już rzadkością w komputerach, co wymusza stosowanie przejściówek USB<–>RS-232. Z mojego doświadczenia wynika, że przejściówki takie często sprawiają wiele kłopotów, dlatego doszedłem do wniosku, że czas ulepszyć JTAG-a, a przy okazji dorobić się wreszcie czegoś konkretnego w miejsce poprzedniej prowizorki.

Tak naprawdę nie czekało mnie wiele pracy — musiałem tylko dodać do układu jakąś przejściówkę USB<–>RS-232 i zaprojektować płytkę, najlepiej pod elementy SMD. W roli konwertera postanowiłem wykorzystać układ scalony firmy FTDI — FT232RL. Kosztuje on wprawdzie kilkanaście złotych, ale ma wbudowany zegar i do działania nie potrzebuje prawie żadnych elementów zewnętrznych.

Opis układu

Schemat ideowy można obejrzeć na poniższym rysunku.

Schemat ideowy

Do ATmegi16 dodałem złącze J3, służące do wgrywania firmware’u, a MAX232 zastąpiłem wspomnianym FT232RL. Ponieważ chciałem wykorzystać możliwość zasilania JTAG-a i debugowanego systemu z portu USB, musiałem również zastosować automatyczny przełącznik zasilania w postaci tranzystora T1 z obwodem soft start (R1, C5). Specyfikacja USB uwzględnia różne tryby zasilania i korzystające z tej magistrali urządzenia powinny w odpowiedni sposób ograniczać swój prąd. Oczywiście FT232RL potrafi przejść w odpowiedni tryb, powiadamiając przy tym zewnętrzne urządzenia, np. po skonfigurowaniu wyjścia SLEEP#, ale takie rozwiązanie nie sprawdziłoby się we współpracy z dołączonym urządzeniem debugowanym. Dlatego zastosowałem polecany przez notę aplikacyjną tranzystor sterowany sygnałem PWREN# (tu: nóżka CBUS3). W razie potrzeby tranzystor odcina zasilanie i całość przechodzi w stan uśpienia.

Diody D1, D2 i D3 mogą być pomocne w diagnozowaniu problemów z JTAG-iem. D2 informuje o tym, iż port USB przyznał nam zasilanie, D1, iż zachodzi komunikacja z komputerem, zaś D3 mówi o pracy samego interfejsu JTAG.

Montaż i uruchomienie

Płytkę drukowaną zaprojektowałem z myślą o jej wykonaniu w warunkach domowych, stąd dość duże przelotki i brak ścieżek prowadzonych do złącz po stronie elementów.

Podczas montażu musimy zwrócić szczególną uwagę na układ FT232RL. Jest on wykonany w stosunkowo drobnym rastrze i przy jego lutowaniu warto wspomóc się topnikiem. Ja używałem RF800.

Jeżeli sami wykonywaliśmy płytkę i musimy lutować przelotki, należy pamiętać, iż kilka z nich znajduje się pod złączem J2. Nie jest to zbyt eleganckie rozwiązanie, ale nie chciało mi się poprawiać tego fragmentu PCB.

Po sprawdzeniu poprawności montażu możemy podłączyć urządzenie do portu USB (stan zworek J4 i J5 jest na razie nieistotny). Teraz należy uruchomić program FT_PROG i skonfigurować układ FT232RL. W zakładce USB_Config_Descriptor zaznaczamy opcje Bus Powered, USB Remote Wakeup i Pull Down IO Pins in USB Suspend zaś wartość Max Bus Power ustawiamy na 500mA. Nazwę urządzenia w USB_String_Descriptors ustawiamy wedle własnego widzimisię. W zakładce Hardware_Specific –> IO_Controls ustawiamy funkcje pinów IO:

Property Value
C0 TX & RXLED#
C3 PWRON#

Następnie programujemy wprowadzone zmiany. Po zamknięciu FT_PROG-a i ponownym podłączeniu urządzenia powinniśmy zobaczyć dodatkowy port COM w systemie (lub prośbę o doinstalowanie sterowników).

Teraz ustawiamy zworkę J5 w pozycji PROG, programujemy ATmegę i wgrywamy firmware zgodnie z opisem pierwotnej wersji urządzenia (linki we wspomnianym wcześniej wpisie).

Po wgraniu firmware’u zworkę J5 ustawiamy w pozycję WORK, zaś J4 wedle potrzeby — USB PWR, jeżeli debugowany układ ma być zasilany z portu USB lub DEVICE PWR, jeżeli dysponuje on własnym zasilaniem. Teraz JTAG jest gotowy do pracy.

Możliwości zmian

Zgodnie z zaleceniem noty aplikacyjnej zastosowałem przeciwzakłóceniowy koralik ferrytowy FB1 na dodatniej linii zasilania USB. Nie jest on niezbędny — można go zastąpić jakimś dławikiem lub po prostu zworą. Jeżeli będziemy mieli wyjątkowego pecha może to jednak wiązać się z zakłóceniami pracy magistrali USB.

Podobnie bezpiecznik polimerowy F1 nie jest niezbędny, zwłaszcza, że porty USB są wyposażone we własne bezpieczniki. Taki bezpiecznik jednak kosztuje niewiele a zwiększa nieco bezpieczeństwo naszego komputera.

Mimo iż układ w całości został zaprojektowany na Linuksie, uruchomiłem go na Windowsie ze względu na aplikację FT_PROG. Za to próbowałem korzystać z JTAG-a na Linuksie, posługując się programem AVaRICE. Niestety, mimo iż program zdawał się wgrywać kod na mikrokontroler, to debugowanie kończyło się niepowodzeniem. Na razie pozostałem więc przy AVR Studio w środowisku Windows. Zresztą AVR Studio ma tę przewagę nad wszystkimi innymi rozwiązaniami, iż udostępnia świetny graficzny monitor zasobów mikrokontrolera.

Wykaz elementów

Półprzewodniki:

  • 1 × FT232RL
  • 1 × ATMEGA16-16AU
  • 1 × IRLM6402 (użyłem IRLM6302)
  • 1 × LED SMD 1206 zielona
  • 1 × LED SMD 1206 zółta
  • 1 × LED SMD 1206 czerwona

Kondensatory SMD 0805:

  • 2 × 22pF

Kondensatory SMD 1206:

  • 4 × 100nF
  • 1 × 10nF
  • 1 × 4,7µF
  • 1 × 10uF

Rezystory SMD 1206:

  • 3 × 270Ω
  • 2 × 1kΩ
  • 1 × 4,7kΩ
  • 2 × 10kΩ
  • 1 × 36kΩ (użyłem 33kΩ)
  • 1 × 150kΩ

Elementy stykowe:

  • 2 × jumperek
  • 1 × gniazdo USB B kątowe do druku przewlekane
  • 1 × gniazdo męskie proste IDC10 do druku przewlekane
  • 1 × goldpin 2×3
  • 2 × goldpin 1×3

Pozostałe:

  • 1 × rezonator kwarcowy 7.3728MHz SMD (oznaczany czasem w katalogach jako 7.372MHz)
  • 1 × LCBA-601 (koralik przeciwzakłóceniowy) — może być 1206, 0805 lub 0603
  • 1 × bezpiecznik polimerowy 0,5A SMD 1812

Pliki

W spakowanym archiwum dostępne są schematy w formacie programu KiCad oraz w formacie PostScript.

Komentarzy: 1 do „JTAG do ATmegi w wersji USB“

  1. Buśka komentuje:

    Hej,
    bardzo fajny projekt.
    Mam jedno pytanie… Czy jeżeli użyję tranzystora IRLM6402 to muszę zmieniać coś w schemacie?

Dodawanie komentarzy

XHTML: Możesz używać tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">