Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Nowy JTAG do ARMa na USB - wstęp do projektu

Freddie Chopin 03 Kwi 2009 13:12 89241 353
  • #122
    Poziom 13  

    A ja mam takie czysto teoretyczne pytanie czy do każdego uProcka ARM da się podlączyć i skomunikować za pomocą tego programatora? czy trzeba mieć jakieś specjalne bootloadery?

  • #123
    Poziom 11  

    Wreszcie udało mi się złożyć (bez obudowy) całą płytkę. Zadziałało od pierwszego uruchomienia (w końcu sprawdzał fachowiec ;) ). Muszę przyznać, że dokumentacja nad wyraz dokładna. Nie często spotyka się takie projekty!

  • #124
    Specjalista - Mikrokontrolery

    artusb napisał:
    A ja mam takie czysto teoretyczne pytanie czy do każdego uProcka ARM da się podlączyć i skomunikować za pomocą tego programatora? czy trzeba mieć jakieś specjalne bootloadery?

    Pisałem to już wielokrotnie - to nie zależy od JTAGa (no może trochę zależy, ale bardziej od strony poziomów napięć itp.), a od oprogramowania sterującego. IMHO najlepszym wyborem jest openocd, które obecnie obsługuje chyba każdego istniejącego ARMa (7, 9, 11, XScale, Cortex), a do tego jeszcze mips4k, fpga i kilka bardzo dziwnych rzeczy...

    4\/3!!

  • #125
    Poziom 33  

    Ok JTAG zlozony, mozna sparwdzic czy wszystko jest wporzadku bez wpinania do procka? Wole sie upewnic ze nic nie zchrzanilem zanim podepne ;) I drugie pytanie :P Szukalem szukalem i nie znalazlem, pliku cfg dla procka lpc2378. Znaczy znalazlem, ale wyglada calkiem inaczej niz pliki cfg dla targetow dla openocd 0.1.0

  • #127
    Poziom 33  

    Ok temat zalozylem :P A powiedz mi prosze jeszcze, da sie sprawdzic czy jtag dziala poprawnie ?

  • #128
    Specjalista - Mikrokontrolery

    Hmm... Na pewno takie kroki pomogą w sprawdzeniu:

    1. Układ po podłączeniu do kompa powinien być poprawnie enumerowany - po kilku sekundach od wetknięcia wtyczki zapali się dioda D_USB
    2. EEPROM powinno się dać bez problemu zaprogramować przez MProga
    3. Podłączanie zworek powinno wywoływać konkretną reakcję - dowolna pozycja zworki od JTAGa - zapalenie się diodki D_JVCC, po krótkiej chwili od wyciągnięcia - zgaśnięcie. Założenie zworki od UARTu - zmiana diodki z D_RS na D_UART.
    4. Prosty test loopback'a - zewrzeć pin 2 i 3 w gniazdku RS-232 albo UART (zależnie od tego które aktywne) i sprawdzić czy terminal odbiera to co wysyła. Przy loopbacku obydwie diody UARTU (D_RX i D_TX powinny migać jednocześnie).
    5. Dzięki komendzie openocd jtag_reset (można ją wprowadzić przez telnet) można sprawdzić, czy linie resetu zachowują się tak jak należy.(warto jednak w konfiguracji na czas tego testu ustawić, żeby resety były push-pull, a nie open-drain). Jeśli linia nSRST jest zwarta do masy, to powinna się świecić dioda D_SRST.

    Zapewne da się wszystko sprawdzić dokładniej, ale nie wiem jak (; Ogólnie ciężko uszkodzić JTAGiem procesor, albo procesorem JTAG, więc jeśli tylko nie ma żadnych zwarć ale coś jest jeszcze źle, to po prostu nie będzie działać.

    4\/3!!

  • #129
    Poziom 33  

    Hmm, zaprogramowane wszystko jest, diodki swieca jak powinny, problem tylko ze jak wepne JTAGa do modulu to sie stabilizator grzeje dosc mocno, co raczej nie jest dobrym znakiem ;) Na module dioda power swieci sie dalej, ale gasnie z ethernetu i jeszcze jedna (D6). Zworki J1 i J3 mam ustawione na 3.3V

  • #130
    Specjalista - Mikrokontrolery

    Który stabilizator się grzeje? LP2985 na JTAGu? Jeśli zasilasz JTAGiem target'a, to pamiętaj, że pobór nie może byc zbyt duży (ograniczenie stabilizatora to 150mA). Jeśli zaś target ma swoje zasilanie, to NIE WOLNO zasilać go z JTAGa (zworka JTAG wyciągnięta całkowicie)

    4\/3!!

  • #131
    Poziom 33  

    Grzał sie na targecie, ale spoko progra sie wykonuje ;) Rezystorek R4 na JTAGu nie byl dolutowany. Jade opony wymienic i powalcze dalej :) Juz bez zworek w JTAGu :)

    Dodano po 1 [minuty]:

    Hmm, dalej sie grzeje stabilizator i te diody gasna jak podlacze JTAGa :( Sprawdzilem miernikiem sygnaly ktore sa wyprowadzone na wtyczke, zwarc nie ma. JTAGa podlaczalem teraz bez zworek ;)

    Dodano po 22 [minuty]:

    Hmm juz wiem gdzie problem, wtyczka jest jakos na odwrot i mam jakby dwa rzadki tylko ;) Po jednej stronie sa zwierany od strony JTAGa a po drugiej od strony targeta. No nic juz teraz nie kupie nowej wiec musze poczekac do poniedzalku ;) A swoja droga to te wtyczki sa dosc tajemnicze, caly czas mam z nimi problemy :P Mam nadzieje tylko ze nic nie zdazylo sie upalic :O

    Dodano po 51 [minuty]:

    Ok spilowalem to zabezpieczenie we wtyczce wpialem odpowiednio i na razie jest ok - stabilizator nie grzeje sie program w porcku wykonuje sie poprawnie ;) Teraz tylko odpalic openocd :)

  • #132
    Poziom 13  

    No właśnie: "odpalić openocd". To nie takie proste. Dostaję warning a potem error po komendzie -c "flash write_image..."

    Warn : lpc2000 returned 6
    Error: error writing to flash at address 0x00000000 at offset 0x00000000 (-902)

    Jtag dobrze odczytal numer z kontrolera TAP, wiec coś działa. Kwestia poprawnych wpisów w plikach cfg. Używam lpc2114. Proszę o pomoc zwłaszcza osoby którym udało się z jakimś lpc.

  • #134
    Poziom 13  

    coś ta komenda grzebie we flashu, bo program wczesniej wgrany po RSie się zmienił na paru początkowych bajtach

  • #136
    Poziom 16  

    A testował może ktoś tego JTAGa na CrossWorks? Mi niestety nie chce się wykryć. RS-232 ruszył bez żadnych problemów zaraz po zlutowaniu, ale JTAGa jak widać nie mogę przekonać do współpracy.

  • #137
    Specjalista - Mikrokontrolery

    smyku22 napisał:
    A testował może ktoś tego JTAGa na CrossWorks? Mi niestety nie chce się wykryć.



    Wykrył i połączył się z procesorem bez problemu.

  • #138
    Poziom 16  

    Z jakim procem sprawdzałeś? Grzebałeś coś w ustawieniach czy ruszyło zaraz po podłączeniu?

  • #139
    Poziom 17  

    Witam.

    Mam na 100% dobrze skonfigurowany plik lpc2103.cfg potrzebny do odpalenia jtaga, lecz jtag w ogóle nie wykrywa targeta. Dodam, że na Wiglerze poprzez LPT target zostaje wykryty od razu. Jedna rzecz jaką muszę wykonać to usunąć "ptaszek" z pozycji: "nTRST output inverted" (która znajduje się w sekcji LPT JTAG Settings).
    PIN2 czyli nTRST po stronie targeta mam podpiety do VCC poprzez R10k.
    Czyli resetuje stanem niskim.
    PIN8 czyli nSRST w wiglerze nie używam, a po stronie targeta mam podpięty do mikro switch-a i poprzez R1k do VCC. Po naciśnięciu micro switch-a, nSRST zwiera do masy. Wówczas dioda D_SRST zapala się.

    Domyślam się, że w tym tkwi problem z wykryciem targeta.

    Target zasilany jest z osobnego źródła napięcia. Nie mam żadnej zworki użytej w JTagu. Przy podłączonym JTagu świecą mi się diody: D_USB, D_RS i D_JVCC (ta ostatnia zaświeca się tuz po zasileniu targeta osobnym źródłem napięcia).

    Jak zmienić nTRST w przypadku tego JTaga? Gdzieś się to ustawia w configach, zworkach? Może macie jakieś inne pomysły?

    Poniżej wynik próby połączenia z targetem.

    Code:
    C:\Documents and Settings\wladziu>openocd -f interface/jtagkey.cfg -f target/lp
    
    c2103.cfg
    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src
    /openocd.c $
    2000 kHz
    Error: JTAG communication failure, check connection, JTAG interface, target powe
    r etc.
    Error: trying to validate configured JTAG chain anyway...
    Error: Could not validate JTAG scan chain, IR mismatch, scan returned 0x00. tap=
    lpc2103.cpu pos=0 expected 0x1 got 0
    Warn : Could not validate JTAG chain, continuing anyway...
    Warn : TAP lpc2103.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x00 check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2103.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x00 check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : no telnet port specified, using default port 4444
    Warn : no gdb port specified, using default port 3333
    Warn : no tcl port specified, using default port 6666


    Dodano po 3 [godziny] 9 [minuty]:

    zajrzałem do plików źródłowych openocd/src/jtag/ft2232.c i doszedłem do wniosku ze jtag sam rozpoznaje stan początkowy linii nTRST. W odniesieniu do stanu początkowego neguje ją w czasie wymaganego resetu.
    Czyli jeśli dobrze rozumiem nie potrzebuję ustawiać stanu nTRST.

    Testowałem UART i RS232. Oba działają. Jednak nie kumam jak mam przetestować poprzez telnet jtag (jaka nazwa hosta? jaki port?).

    Może mi ktoś to wytłumaczyć? Ewentualnie napisać co mogę jeszcze zrobić?

  • #140
    Specjalista - Mikrokontrolery

    Po pierwsze - stanem linii reset się nie przejmuj - na pewno jest odpowiedni, zakładając, że nie ma gdzieś błędu w lutowaniu.

    W jaki sposób masz podłączonego JTAGa do procka? Nie jest to sprawa oczywista, ponieważ linie muszą mieć stosowne pullup lub pulldowny - bez tego ani rusz.

    Głównie dlatego, że LPC2103 potrzebuje stosownego stanu na stosownych liniach, żeby w ogóle uruchomić interfejs JTAGa w rdzeniu. Owe stosowne piny to DBGSEL oraz RTCK. W moim manualu do LPC2103, w rozdziale 8.1 na stronie 263 znajduje się informacja, że podczas resetu obydwa te piny powinny być w stanie wysokim, aby JTAG został uruchomiony. O ile zapewnie o pinie DBGSEL nie zapomniałeś, to może coś masz pomieszane przy RTCK?

    Spróbuj też połączyć się (włączyć OpenOCD) natychmiast po puszczeniu reseta w procku (jedną ręką puszczasz reset, drugą ręką odpalasz OpenOCD).

    Jeśli w twoim procku jest program który coś miesza z pinami JTAGa, to może być problem nie do przeskoczenia JTAGowo, który trzeba rozwiązać przez skasowanie układu poprzez FlashMagica (przez bootloader na UART)

    Co do testów przez telnet, to niewiele można przetestować, niemniej jednak połącz się poprzez wpisanei w konsoli "telnet localhost 4444"

    Swoją drogą - jesteś na 100% pewien, że nie ma błedu lutowania albo jakiegoś zwarcia na płytce?

    4\/3!!

  • #141
    Poziom 17  

    W załączniku jest "narysowany" schemacik połączeń o których piszesz.


    Puszczanie reset i włączanie openocd daje taki sam wynik w cmd jaki wkleiłem w poprzednim poście.

    Próba połączenia w cmd, wpisując telnet localhost 4444 kończy się niepowodzeniem:

    Code:
    C:\Documents and Settings\wladziu>telnet localhost 4444
    
    Łączenie z localhost...Nie można nawiązać połączenia z hostem na porcie 4444: Po
    łączenie nie powiodło się


    Co do lutowania to już dożo płytek mam za sobą, wiec jak już to zimny lut.

  • #142
    Specjalista - Mikrokontrolery

    Schemat wygląda zasadniczo na poprawny jeśli tylko RTCK masz podciągnięte do + (do czegoś jest podciągnięte, ale nie dorysowałeś do czego).

    Jeśli telnet ci się nie chce połączyć, to znaczy że OpenOCD zaraz po próbie startu kończy działanie.

    Poszukaj na płytce z JTAGiem i z prockiem jakichś błędów - w końcu jakiś powód musi być. Dobrze by było, gdybyś był w stanie skombinować jakąś płytkę z ARMem, która jest na pewno sprawna - wtedy wiedziałbyś, czy błąd jest po stronie JTAGa czy po stronie targeta.

    4\/3!!

  • #143
    Poziom 17  

    Faktycznie nie dorysowałem 3.3V bo tak mam podłączone.
    Moze uda mi się jutro skombinować oscyloskop bo luty juz raz poprawiałem.
    A płytka z targetem jest na pewno ok bo wigllerem wykrywam i programuje bez problemu.

    A próba połączenia przez telnet localhost 4444 świadczy o błędzie w JTagu czy po prostu o braku komunikacji z targetem? Czy bez target powinno się wykonać połączenia przez telnet z jtagiem o ile działa?

  • #144
    Specjalista - Mikrokontrolery

    Z tym jest różnie - wychodzi na to, że u ciebie OpenOCD wykrywa błąd już na bardzo wczesnym etapie i w ogóle się nie włącza. Możesz spróbować uruchomić go z parametrem -d3 (albo -d 3, nie pamiętam) - może coś wywnioskujesz z komunikatów błędów, ale wątpie, bo one niewiele mówią.

    4\/3!!

  • #145
    Poziom 17  

    Dziś sprawdzałem oscyloskopem tuz przy złączu Jtag i nici. Pin TRST cały czas pozostawał bez zmian czyli logiczna 1ka. Podobnie z innymi pinami (brak zmiany stanu).

    A możne ja źle uruchamiam openOCD?
    Poprzez CMD przechodzę do katalogu OpenOCD/.../bin. Następnie wpisuje komendę:

    Code:
    openocd -f interface/jtagkey.cfg -f target/lpc2103


    Juto będę miał możliwość wypróbowywania JTaga na innym ARMie, ale to pewnie nie ma już sensu.

    Masz może jakiś pomysł, co mógłbym jeszcze oscyloskopem sprawdzić (jakie piny układów)?

  • #146
    Specjalista - Mikrokontrolery

    Uruchamiasz go prawidłowo (nie musisz wchodzić do folderu bin - openocd powinien dodawać się do PATH, jeśli masz na przykład moją wersję instalatora), niemniej jednak piny (conajmniej niektóre - takie jak TMS, TCK, TRST) powinny zmieniać stan. Jeśli tego nie robią, to coś musi być źle... Przeprogramuj EEPROM na JTAGu - najlepiej gotowym templatem z mojej strony i jeśli to nic nie pomoże, to szukaj błędu na płytce. W sumie jak masz oscyloskop, to zmierz też stosowne sygnały na liniach samego układu FT2232 (bezpośrednio na jego pinach). Pamiętaj tylko, że domyślnie resety sterowane są liniami ..._OE (resety są open drain) - aby sterowane były push-pull, trzeba zmienić lekko plik konfiguracyjny.

    4\/3!!

  • #147
    Poziom 17  

    Faktycznie mam ścieżkę do openocd w PATH.
    Używałem wszystkiego co udostępniasz na swojej stronie i przydaje się do uruchomienia płytki.
    Już raz powtórzyłem cala procedurę programowania EEPROMA.

    Masz na myśli plik jtagkey.cfg?

  • #148
    Specjalista - Mikrokontrolery

    Plik w którym to umieścisz jest dowolny - chodzi o parametry polecenia reset_config - w mojej instrukcji do OpenOCD opisane na stronie 35. Domyślnie TRST jest push-pull, a SRST - open-drain. Niemniej jednak nie upatruj w tym problemu, bo nie ma to żadnego znaczenia dla twojego układu - masz pullupa na linii resetu, na JTAGu też jest słaby pullup, więc problem leży gdzie indziej.

    4\/3!!

  • #149
    Poziom 17  

    Freddie Chopin napisał:
    polecenia reset_config - w mojej instrukcji do OpenOCD opisane na stronie 35.


    A gdzie mogę znaleźć Twoją instrukcję? Jak narazie znalazłem oficjalny user manual w katalogu instalacyjnym z openocd. Oczywiście w manualu znalazłem reset_config (strona 27) i inne ciekawe rzeczy. Pytam jedynie z ciekawości, bo chciałbym zobaczyć Twoją instrukcje.

    Jutro jeszcze raz oscyloskopem posprawdzam.

  • #150
    Specjalista - Mikrokontrolery

    Mało precyzyjnie napisałem - przez 'moja' miałem na myśli 'posiadana przezemnie oficjalna wersja' - dla podkreślenia, że w różnych wersjach może być różna strona. Jeśli zainstalowałeś OpenOCD 0.1.0 dla windowsa, to właśnie tam jest owa instrukcja. Pisząc o stronie miałem na myśli stronę pdf'a, a nie stronę widoczną na kartkach - stąd rozbieżność (;

    4\/3!!