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.

[LPC2478] OpenOCD + KT-LINK

01 Sie 2010 21:19 3495 12
  • Poziom 18  
    Witam,

    zainstalowałem OpenOCD ze strony Freddiego Chopina, używam też OpenOCD skompilowanego do współpracy z FTDI, oraz sterowniki do programatora KT-LINK, które były z nim dostarczone na CD. Używam płytki ewaluacyjnej LPC-2478-STK z Olimex-u. Uruchamiam teraz OpenOCD z linii komend:
    Code:
    openocd-ftd2xx -f interface/kt-link.cfg -f target/lpc2478.cfg

    przez co w rezultacie otrzymuję następującą odpowiedź:
    Code:

    C:\>openocd-ftd2xx -f interface/kt-link.cfg -f target/lpc2478.cfg
    Open On-Chip Debugger 0.4.0 (2010-07-09-11:10)
    Licensed under GNU GPL v2
    For bug reports, read
            http://openocd.berlios.de/doc/doxygen/bugs.html
    jtag_nsrst_delay: 100
    jtag_ntrst_delay: 100
    trst_and_srst srst_pulls_trst srst_gates_jtag trst_push_pull srst_open_drain
    RCLK - adaptive
    Info : device: 6 "2232H"
    Info : deviceID: 67353570
    Info : SerialNumber: FFSK6HASA
    Info : Description: KT-LINK A
    Info : max TCK change to: 30000 kHz
    Info : RCLK (adaptive clock speed)
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (mfg: 0x787, part: 0xf
    1f0, ver: 0x4)
    Info : Embedded ICE version 7
    Error: EmbeddedICE v7 handling might be broken
    Info : lpc2478.cpu: hardware has 2 breakpoint/watchpoint units


    Teraz robię w drugiej konsoli połączenie telnet na porcie 4444 i chcę wykonać polecenie "reset" zgodnie z tutorialem Frieddiego Chopina. Niestety polecenia nie udaje się wykonać o czym świadczy komunikat:
    Code:

    Open On-Chip Debugger
    > reset
    couldn't read enough bytes from FT2232 device (0 < 81)
    couldn't read from FT2232
    error: -104
    Command handler execution failed
    in procedure 'reset' called at file "command.c", line 650
    called at file "command.c", line 361
    couldn't read enough bytes from FT2232 device (0 < 6)
    couldn't read from FT2232
    couldn't read enough bytes from FT2232 device (0 < 6)
    couldn't read from FT2232


    Próbowałem zmieniać w pliku lpc2478.cfg wartość jtag_rclk na 100, niestety efekt ten sam. Czemu polecenie reset nie chce działać? Macie jakieś pomysły co sprawdzić, co pozmieniać żeby to naprawić?

    Dodatkowo próbowałem jeszcze wg tutoriala Freddiego zrobić kilka "stepów", użyłem najpierw polecenia soft_reset_halt, potem halt i step.

    Oto wynik z konsoli:
    Code:

    Open On-Chip Debugger
    > init
    > soft_reset_halt
    requesting target halt and executing a soft reset
    target state: halted
    target halted in ARM state due to debug-request, current mode: Supervisor
    cpsr: 0x000000d3 pc: 0x00000000
    > halt
    > step
    target state: halted
    target halted in ARM state due to single-step, current mode: Supervisor
    cpsr: 0x000000d3 pc: 0x00000278
    > step
    target state: halted
    target halted in ARM state due to single-step, current mode: Supervisor
    cpsr: 0x000000d3 pc: 0x00000278
    > step
    target state: halted
    target halted in ARM state due to single-step, current mode: Supervisor
    cpsr: 0x000000d3 pc: 0x00000278
    > step
    target state: halted
    target halted in ARM state due to single-step, current mode: Supervisor
    cpsr: 0x000000d3 pc: 0x00000278
    >


    Moje pytanie brzmi dlaczego nie zmienia się PC? Czy uC się zawiesił?

    Dziękuję z góry za wskazówki i odpowiedzi,
    Pozdrawiam,
    Krzysiek
  • Pomocny post
    Specjalista - Mikrokontrolery
    vcd_a napisał:
    Próbowałem zmieniać w pliku lpc2478.cfg wartość jtag_rclk na 100, niestety efekt ten sam.

    Zamiast jtag_rclk użyj jtag_khz, jaka jest różnica doczytasz w manualu.

    Cytat:
    Moje pytanie brzmi dlaczego nie zmienia się PC? Czy uC się zawiesił?

    Pewnie układ siedzi w nieskończonej pętli jakiegoś wyjątku. Możesz sobie za pomocą OpenOCD zdezassemblować aktualny rozkaz - poszukaj w manualu, polecenie chyba "arm disassemble ..."

    Na liście mailingowej OpenOCD ktoś właśnie ma dokładnie taki problem, przejrzyj archiwum.

    Przy okazji miej świadomość, że OpenOCD które dostałeś (pracujące z ftd2xx) jest dystrybuowane nielegalnie i tak samo nielegalne będzie rozsyłanie go dalej.

    4\/3!!
  • Poziom 18  
    Dzięki za odpowiedź, zmiana parametru przyniosła skutek.

    Mam jeszcze kolejne pytanie: skąd wziąć skrypt linkera do LPC2478, makefile i startup? Oczywiście wiadomo, że google, google, google, ale może macie jakieś dobre strony, gdzie tego szukać?

    Pozdrawiam Krzysiek
  • Pomocny post
    Specjalista - Mikrokontrolery
    Znalazłeś na mojej stronie OpenOCD, to poszukaj jeszcze przykładowego projektu dla LPC2103. Trzeba w nim zmienić tylko drobnostki: rozmiar pamięci w skrypcie linkera i argumenty z jakimi wywoływane jest OpenOCD.

    4\/3!!
  • Poziom 18  
    Witam, uruchomiłem już OpenOCD, kompilator też działa w porządku. Przygotowałem też prosty projekt dla LPC2478. Jednak teraz mam problem z Eclipse i debugowaniem. Gdy próbuję uruchomić konfigurację do debugowania to wszystko zatrzymuję się w tym momencie: [LPC2478] OpenOCD + KT-LINK

    Wszystko skonfigurowałem tak samo jak w tutorialu Freddiego Chopina.

    Dlaczego debug nie startuje?

    Pozdrawiam i dziękuję za odpowiedzi,
    Krzysiek
  • Pomocny post
    Specjalista - Mikrokontrolery
    Czy aby na pewno w ostatniej zakładce konfiguracji External Tool (Common) masz zaznaczone Launch in background?

    4\/3!!
  • Poziom 18  
    Dzięki Freddie za odpowiedź, rzeczywiście zapomniałem zaznaczyć tej opcji.

    1. Mam teraz następujący problem, co zrobić z błędem OpenOCD:
    Code:

    Info : Embedded ICE version 7
    Error: EmbeddedICE v7 handling might be broken

    Wydaje mi się, że ten problem może w pewien sposób wpływać na to co się dzieje z debugowaniem.

    2. Mam jeszcze problem z debugowaniem - uruchamiam najpierw poprzez Eclipse OpenOCD, potem odpalam konfigurację Debug, zmienia mi się układ okien perspective, debug przechodzi do pierwszej linii w mainie, gdy chcę przejść do kolejnej linii wciskając CTRL + R, otrzymuję komunikat: "The operation is unavailable on current selection. Please place the cursor on valid line to run to."

    Wiem już teraz jak przejść do trybu debugowania, a jak po prostu zaprogramować uC? Żeby program załadować na stałe do flasha?

    Pozdrawiam Krzysiek
  • Pomocny post
    Specjalista - Mikrokontrolery
    vcd_a napisał:
    1. Mam teraz następujący problem, co zrobić z błędem OpenOCD:
    Code:

    Info : Embedded ICE version 7
    Error: EmbeddedICE v7 handling might be broken

    Wydaje mi się, że ten problem może w pewien sposób wpływać na to co się dzieje z debugowaniem.

    Nigdy nie pojawił mi się ten komunikat, nie wiem co tu można wymyślić. Poprzeglądaj listę dyskusyjną w poszukiwaniu podobnego problemu, ewentualnie tam pytaj.

    Cytat:
    2. Mam jeszcze problem z debugowaniem - uruchamiam najpierw poprzez Eclipse OpenOCD, potem odpalam konfigurację Debug, zmienia mi się układ okien perspective, debug przechodzi do pierwszej linii w mainie, gdy chcę przejść do kolejnej linii wciskając CTRL + R, otrzymuję komunikat: "The operation is unavailable on current selection. Please place the cursor on valid line to run to."

    Ehh... Przecież WSZYSTKO mówi komunikat... CTRL + R - Run to Line - skoro nie masz wybranej żadnej linii, to gdzie niby miałby dojść? Przecież na górze okna masz typowe przyciski Step Into, Step Over, Step Return, do tego klikając prawym w jakąś linię kodu można zrobić jeszcze kilka operacji...

    Cytat:
    Wiem już teraz jak przejść do trybu debugowania, a jak po prostu zaprogramować uC? Żeby program załadować na stałe do flasha?

    Skoro go debuggujesz, to chyba znaczy że ma ten program we flashu, czyż nie? (pomijam debuggowanie w RAM)

    4\/3!!
  • Poziom 18  
    Pomimo tego, że program debugowałem, po resecie nie zostawał on w pamięci flash.
    Mam teraz takie pytanie pod jaki adres należy wgrywać program do flasha?, piszę teraz skrypt do programowania i zatrzymałem się na wywołaniu komendy flash write_bank.


    Pozdrawiam Krzysiek
  • Specjalista - Mikrokontrolery
    A po co Ci "flash write_bank", skoro jest "flash write_image"?

    flash write_image erase nazwa_pliku.rozszerzenie

    i tyle ci potrzeba. Przed tym oczywiście "reset halt" lub co najmniej "halt".

    Skoro po debuggowaniu program "nie zostaje we flashu" to masz błąd zupełnie gdzie indziej - taka jest prawda, bo "load" wywołuje fizyczny zapis do układu. Jedynym przypadkiem gdy program faktycznie w układzie nie zostaje jest debuggowanie w RAMie. Program pewnie Ci się nie włącza, bo jest błędny (czyli od razu zwis), albo włącza się bootloader NXP, bo nie podciągnąłeś odpowiednich pinów do odpowiednich potencjałów lub brak jest stosownej sumy kontrolnej w stosownym miejscu flasha (jeśli grzebałeś w standardowych plikach konfiguracyjnych OpenOCD). Zrozum to, że skoro "coś" debuggowałeś, to owe "coś" musi być w układzie - to nie symulator, nie emulator, tylko sprzętowy interfejs do debuggowania _w_ układzie.

    4\/3!!
  • Poziom 18  
    @Freddie

    Tak, grzebałem w pliku lpc2478.cfg i zmieniałem tam jtag_rclk na jtag_khz. Powiedz czy to może mieć teraz jakiś wpływ na programowanie i na debug?

    flash write_image działa, dzięki wielkie!

    Jednak dostaję następujący komunikat:
    Code:

    Warn : Verification will fail since checksum in image (0x00000000) to be written to flash is different from calculated vector checksum (0xb9206e58).
    Warn : To remove this warning modify build tools on developer PC to inject correct LPC vector checksum.


    Jak mogę poprawić tę sumę kontrolną?

    Pozdrawiam Krzysiek
  • Specjalista - Mikrokontrolery
    vcd_a napisał:
    Tak, grzebałem w pliku lpc2478.cfg i zmieniałem tam jtag_rclk na jtag_khz. Powiedz czy to może mieć teraz jakiś wpływ na programowanie i na debug?

    Nie może i nie ma.

    Cytat:
    Jednak dostaję następujący komunikat:
    Code:

    Warn : Verification will fail since checksum in image (0x00000000) to be written to flash is different from calculated vector checksum (0xb9206e58).
    Warn : To remove this warning modify build tools on developer PC to inject correct LPC vector checksum.


    Jak mogę poprawić tę sumę kontrolną?

    "Poprawić" jej nie możesz, więc ciesz się, że OpenOCD oblicza ją za Ciebie.

    4\/3!!
  • Poziom 18  
    Witam,
    krótkim słowem zakończenia wątku:

    Skrypt linkera do LPC2478, makefile i startup wziąłem ze stronki Freddiego. Wszystkie pliki świetnie działają wraz z wcześniej przygotowanym toolchain-em.

    Pozdrawiam Krzysiek