Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

AT91SAM7XC256 - Eclipse+openocd+GDB+JTAG lock pick konfiguracja debugera

B0BI 09 Jan 2013 22:57 4158 16
Computer Controls
  • #1
    B0BI
    Level 11  
    Witam,
    Mam trochę problemów z konfiguracją openocd i GDB pod linuxem. Na wstępie zaznaczę, że sprzętowo wszystko powinno być ok, bo całość już kiedyś mi działała ale pracuję teraz na innym komputerze i z nowszymi wersjami oprogramowania. Pierwszy problem to prędkość z jaką łączy się JTAG-lock-pick Freddiego z procesorem. Przy wywołaniu openocd używam takich argumentów:

    
    -f interface/jtagkey.cfg -f target/at91sam7x256.cfg -c "arm7_9 dcc_downloads enable" -c "arm7_9 fast_memory_access enable" -c "adapter_khz 1000"
    


    po zresetowaniu (wypięciu i wpięciu kabla USB) jest wszystko ok, ale jak zakończę połączenie to przy kolejnej próbie otrzymuję taką odpowiedź:

    
    Open On-Chip Debugger 0.7.0-dev-00135-g76afade (2013-01-04-22:15)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst
    dcc downloads are enabled
    fast memory access is enabled
    adapter speed: 1000 kHz
    Info : device: 4 "2232C"
    Info : deviceID: 67358712
    Info : SerialNumber: FTTI4QTZA
    Info : Description: Amontec JTAGkey A
    Info : clock speed 1000 kHz
    Error: couldn't read enough bytes from FT2232 device (0 < 81)
    Error: couldn't read from FT2232
    Error: Trying to use configured scan chain anyway...
    Warn : Bypassing JTAG setup events due to errors
    Info : Embedded ICE version 1
    Info : sam7x256.cpu: hardware has 2 breakpoint/watchpoint units
    


    Jeśli wartość adapter_khz ustawię na 1 to za każdym połączenie jest prawidłowo nawiązywane ale nie jest to satysfakcjonująca prędkość.

    Drugi problem to integracja z GDB. Jeśli połączenie openocd jest prawidłowe i uruchomię debuger, wyskakuje okno z komunikatem: "Execution is suspended because of error" a po rozwinięciu szczegółów błędu: "The program is not being run". Tak wygląda odpowiedź openocd:

    
    Open On-Chip Debugger 0.7.0-dev-00135-g76afade (2013-01-04-22:15)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst
    dcc downloads are enabled
    fast memory access is enabled
    adapter speed: 1000 kHz
    Info : device: 4 "2232C"
    Info : deviceID: 67358712
    Info : SerialNumber: FTTI4QTZA
    Info : Description: Amontec JTAGkey A
    Info : clock speed 1000 kHz
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    Info : Embedded ICE version 1
    Info : sam7x256.cpu: hardware has 2 breakpoint/watchpoint units
    Info : accepting 'gdb' connection from 3333
    Warn : Bad value '00000001' captured during DR or IR scan:
    Warn :  check_value: 0x00000009
    Warn :  check_mask: 0x00000009
    Error: JTAG error while reading cpsr
    Warn : Cannot identify target as an AT91SAM
    Error: auto_probe failed
    Error: Connect failed. Consider setting up a gdb-attach event for the target to prepare target for GDB connect, or use 'gdb_memory_map disable'.
    Error: attempted 'gdb' connection rejected
    


    oraz GDB:

    
    symbol-file /media/DANE/PROJEKTY/PROGRAMY/VOICE_ARM/Debug/VOICE_ARM.elf
    monitor reset halt
    "monitor" command not supported by this target.
    monitor software_reset_halt
    "monitor" command not supported by this target.
    load /media/DANE/PROJEKTY/PROGRAMY/VOICE_ARM/Debug/VOICE_ARM.elf 
    You can't do that when your target is `None'
    tbreak main
    Cannot access memory at address 0x105198
    continue
    The program is not being run.
    


    Już naprawdę długo z tym walczyłem i niestety poległem dlatego proszę o pomoc.
    Jeszcze tylko screen z konfiguracją GDB:

    AT91SAM7XC256 - Eclipse+openocd+GDB+JTAG lock pick konfiguracja debugera
  • Computer Controls
  • #2
    Freddie Chopin
    MCUs specialist
    Spróbuj wykorzystać nowy driver, uruchom OpenOCD tak:

    openocd -f interface/ftdi/jtagkey.cfg ...

    W ten sposób (i z driverem libusb-1.0) powinno działać dużo lepiej.

    A co do Twojego konfiga, to w Eclipse odznacz "Halt" i raczej wywal "soft_reset_halt", wg mnie ta komenda powinna wywalać warninga na 3 ekrany i piszczeć głośnikiem w kompie...

    4\/3!!
  • Computer Controls
  • #3
    B0BI
    Level 11  
    Dzięki za szybką odpowiedź. Po uruchomieniu openocd z nowym sterownikiem otrzymuję taki komunikat:

    
    Open On-Chip Debugger 0.7.0-dev-00135-g76afade (2013-01-04-22:15)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Error: The specified debug interface was not found (ftdi)
    The following debug interfaces are available:
    1: ft2232
    Runtime Error: /usr/local/share/openocd/scripts/interface/ftdi/jtagkey.cfg:7: 
    in procedure 'script' 
    at file "embedded:startup.tcl", line 58
    in procedure 'interface' called at file "/usr/local/share/openocd/scripts/interface/ftdi/jtagkey.cfg", line 7
    


    i nie bardzo wiem co z tym zrobić, w linii 7 tego pliku mam tylko "interface ftdi". Nie jestem tylko pewien co do posiadanego drivera, w zasadzie instalowałem libusb-1.0, ale wcześniej miałem inną wersję i nie mam pewności czy się razem nie "gryzą".

    Po zmiana konfiguracji GDB niestety dostaje dokładnie taki sam komunikat.
  • #5
    B0BI
    Level 11  
    Wielkie dzięki za podpowiedź, openocd już działa prawidłowo, ale niestety z GDB dalej mam te same problemy.
  • #7
    B0BI
    Level 11  
    Wydawało mi się, że dokładnie ten sam komunikat ale jednak jest trochę inaczej:

    openocd:

    
    Open On-Chip Debugger 0.7.0-dev-00135-g76afade (2013-01-10-19:27)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst
    dcc downloads are enabled
    fast memory access is enabled
    adapter speed: 1000 kHz
    Info : clock speed 1000 kHz
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    Info : Embedded ICE version 1
    Info : sam7x256.cpu: hardware has 2 breakpoint/watchpoint units
    Info : accepting 'gdb' connection from 3333
    Error: Target not halted
    Error: auto_probe failed
    Error: Connect failed. Consider setting up a gdb-attach event for the target to prepare target for GDB connect, or use 'gdb_memory_map disable'.
    Error: attempted 'gdb' connection rejected
    


    i GDB:

    
    symbol-file /media/DANE/PROJEKTY/PROGRAMY/VOICE_ARM/Debug/VOICE_ARM.elf
    monitor soft_reset_halt
    "monitor" command not supported by this target.
    monitor reset halt
    "monitor" command not supported by this target.
    load /media/DANE/PROJEKTY/PROGRAMY/VOICE_ARM/Debug/VOICE_ARM.elf 
    You can't do that when your target is `None'
    tbreak main
    Cannot access memory at address 0x105198
    continue
    The program is not being run.
    
  • #9
    B0BI
    Level 11  
    Przez telnet sprawdzałem już wcześniej i wydawało mi się, że jest ok, ale teraz nie mam co do tego pewności. Na polecenia reset i halt reaguje prawidłowo ale jak wydam polecenie "reset init" dostaję taki komunikat:

    
    > reset init
    JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    srst pulls trst - can not reset into halted mode. Issuing halt after reset.
    target state: halted
    target halted in ARM state due to debug-request, current mode: Abort
    cpsr: 0x800000d7 pc: 0x00000620
    Bad value '00000101' captured during DR or IR scan:
     check_value: 0x00000009
     check_mask: 0x00000009
    JTAG error while reading cpsr
    in procedure 'mww'
    



    reset halt:

    
    > reset halt
    JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    srst pulls trst - can not reset into halted mode. Issuing halt after reset.
    target state: halted
    target halted in ARM state due to debug-request, current mode: Abort
    cpsr: 0x800000d7 pc: 0x00000720
    


    Dodam jeszcze, że próbowałem połączyć się z procesorem przez GDB z konsoli poleceniem "arm-none-eabi-gdb" a następnie "target remote localhost:3333" ale dostaję odpowiedź:

    
    Remote debugging using localhost:3333
    Remote connection closed
    


    a odpowiedź z openocd dokładnie taka jak w pierwszym poście
  • #10
    Freddie Chopin
    MCUs specialist
    Hmm... No to coś dziwnego się u Ciebie dzieje - u mnie uruchomienie GDB z konsoli (co prawda dla STM32) w sposób opisany przez Ciebie działa prawidłowo...

    A jakbyś zrezygnował z tego:
    -c "arm7_9 dcc_downloads enable" -c "arm7_9 fast_memory_access enable"
    ?

    4\/3!!
  • #11
    B0BI
    Level 11  
    No właśnie chwilę przed Twoją odpowiedzią to zrobiłem i coś się ruszyło. Teraz z GDB dostaję taką odpowiedź:

    
    symbol-file /media/DANE/PROJEKTY/PROGRAMY/VOICE_ARM/Debug/VOICE_ARM.elf
    load /media/DANE/PROJEKTY/PROGRAMY/VOICE_ARM/Debug/VOICE_ARM.elf 
    Loading section .text, size 0x638c lma 0x100000
    Loading section .rodata, size 0x30e lma 0x106390
    Loading section .data.Stat, size 0x4 lma 0x1066a0
    Loading section .data.lcd_instruction, size 0x3 lma 0x1066a4
    Loading section .data.write_data, size 0x3 lma 0x1066a7
    Loading section .data.file_write_buffer, size 0x14 lma 0x1066aa
    Loading section .data.fr_status, size 0x50 lma 0x1066c0
    Loading section .data.filename2, size 0x4 lma 0x106710
    Loading section .data.filename, size 0x4 lma 0x106714
    Loading section .data.tmp2, size 0x1 lma 0x106718
    Loading section .data.sdStatus, size 0x1 lma 0x106719
    Loading section .data.spiTransDelay, size 0x2 lma 0x10671a
    Start address 0x100000, load size 26388
    Transfer rate: 4 KB/sec, 2029 bytes/write.
    tbreak main
    Temporary breakpoint 1 at 0x105194: file ../main.c, line 134.
    continue
    Note: automatically using hardware breakpoints for read-only addresses.
    


    a z openocd:

    
    Open On-Chip Debugger 0.7.0-dev-00135-g76afade (2013-01-10-19:27)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    srst_only srst_pulls_trst srst_gates_jtag srst_open_drain connect_deassert_srst
    adapter speed: 1000 kHz
    Info : clock speed 1000 kHz
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    Info : Embedded ICE version 1
    Info : sam7x256.cpu: hardware has 2 breakpoint/watchpoint units
    Info : accepting 'gdb' connection from 3333
    Warn : acknowledgment received, but no packet pending
    Info : JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Abort
    cpsr: 0x800000d7 pc: 0x0001d128
    Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.
    Warn : NOTE! DCC downloads have not been enabled, defaulting to slow memory writes. Type 'help dcc'.
    Warn : NOTE! Severe performance degradation without fast memory access enabled. Type 'help fast'.
    Info : Padding image section 0 with 4 bytes
    Info : Padding image section 1 with 2 bytes
    Info : Padding image section 2 with 2 bytes
    


    tylko że program dalej nie działa, ale to może być wina samego programu i jutro będę z tym walczył.
  • #13
    B0BI
    Level 11  
    Jednak ciągle jest coś nie tak. Wyglądało na to, że zaczęło działać, ale wynikało to z tego, że podczas połączenia telnetowego wykonałem polecenie halt i zamknąłem telnet, po czym uruchomiłem GDB. Jeśli chcę nawiązać połączenie z procesorem na "surowo" to wszystko wygląda tak jak przed usunięciem tych dodatkowych argumentów w "external tool configuration". Dodatkowo, mimo że wygląda na to, że program jest załadowany to nie można go uruchomić ani debugować, więc już zupełnie nie wiem o co w tym chodzi.


    Edit:
    Jednak samo programowanie procesora działa dobrze tylko program nie chciał działać ze względu na błędną kompilację, ale też jeszcze nie wiem dlaczego źle kompiluje.
  • #15
    B0BI
    Level 11  
    Faktycznie to pomogło, tylko zastanawiam się czy na dłuższą metę jest to dobre rozwiązanie i z czego może wynikać konieczność dodania takiego argumentu.
  • #17
    B0BI
    Level 11  
    No dobra wszystko już mi działa, łącznie z prawidłową kompilacją, a też trochę z tym walczyłem, ale jest już OK. Konfigurację openocd zostawię tak jak jest, chyba że wyjdą później z tym jakieś problemy. Wielkie dzięki za pomoc, szkoda że wcześniej tego tematu nie założyłem bo walczyłem z tym kilka miesięcy.


    edit 14.01.2013

    Niestety moja radość nie trwała zbyt długo, okazało się, że wystarczyło cokolwiek zmienić w kodzie i program już nie kompiluje się prawidłowo, chociaż nie wywala żadnych błędów. Trochę trudno mi opisać ten problem, ale wygląda to tak, że mam zapisany projekt utworzony na "starym" środowisku. Zaimportowałem go do nowego i po kompilacji otrzymuję inny plik wyjściowy. Po porównaniu wszystkich plików z obu projektów wychodzi na to, że różnica jest głównie między plikami (umownie) out.lst (plik wyjściowy to out.elf). Moje pytanie to co jest odpowiedzialne za tworzenie tego pliku, bo nawet nie mam punktu zaczepienia gdzie mógł bym szukać problemu. Dodam jeszcze, że używam wtyczki GNU ARM Eclipse Plugin, ale ustawienia są raczej dokładnie takie same jak w "starym" środowisku.