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

STM32F072RB - Debugowanie w Eclipse i OpenOCD 0.8.0

31 Paź 2014 12:18 2268 17
  • Poziom 23  
    Mam problem z zestawem Eclipse Kepler + GDB + CS + openOCD 0.8.0 + STM32F072BDISCOVERY z procesorem STM32F072RB (Cortex-M0) i programatorem Stlink.

    Środowisko jest poprawnie skonfigurowane i działa poprawnie na procesorze STM32F103, tyle że z openOCD 0.7.0. Jako że nowy model procka, musiałem użyć openOCD 0.8.0. Jednak po skompilowaniu programu (poprawne) i włączeniu serwera OCD (również poprawne) po wybraniu Debug nie następuje wgranie programu do procesora i wyskakuje błąd, że program nie jest uruchomiony. Kombinowałem na różne sposoby i za nic nie mogę uruchomić debugowania.

    Zaznaczę, że na CoCox wsystko działa, na Atollic (po zmianie firmware stlinka) również. Co ciekawe Atollic zmienia firmware na wersję 20, która nie działa na CoCox i openOCD, ale z powrotem wgrywam 16 za pomocą ST-Link Utility.

    To co wypluwa OpenOCD:
    Code:
    Open On-Chip Debugger 0.8.0 (2014-04-28-08:42)
    
    Licensed under GNU GPL v2
    For bug reports, read
       http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : This adapter doesn't support configurable speed
    Info : STLINK v2 JTAG v16 API v2 SWIM v0 VID 0x0483 PID 0x3748
    Info : using stlink api v2
    Info : Target voltage: 2.928086
    Info : stm32f0x.cpu: hardware has 4 breakpoints, 2 watchpoints
    Info : accepting 'gdb' connection from 3333
    Info : device id = 0x20016448
    Info : flash size = 128kbytes
    undefined debug reason 7 - target needs reset
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0xc1000000 pc: 0x080029b0 msp: 0x20005000
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0xc1000000 pc: 0x080029b0 msp: 0x20005000
    target state: halted
    target halted due to breakpoint, current mode: Thread
    xPSR: 0x61000000 pc: 0x2000003a msp: 0x20005000
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0xc1000000 pc: 0x080029b0 msp: 0x20005000
    Error: gdb requested a non-existing register
    Info : dropped 'gdb' connection


    A to co GDB:
    Code:
    symbol-file C:\\workspace\\STM32_USB_dzwonek_stm32F072\\Debug\\zl30arm_usb_hid_dev_103.elf
    
    warning: Architecture rejected target-supplied description
    monitor reset init
    load C:\\workspace\\STM32_USB_dzwonek_stm32F072\\Debug\\zl30arm_usb_hid_dev_103.elf
    Loading section .text, size 0x317c lma 0x8000000
    Loading section .data, size 0x34 lma 0x800317c
    Start address 0x8000000, load size 12720
    Remote connection closed
    tbreak main
    Temporary breakpoint 1 at 0x8002014: file ../../common/src/usbd_main.c, line 15.
    continue
    The program is not being run.


    Wywołanie openOCD:
    Code:
    -f interface/stlink-v2.cfg -f target/stm32f0x_stlink.cfg "adapter_khz 1000; reset_config trst_and_srst"

    Używam openOCD x64

    oraz Debug z monitor reset init oraz Load image, symbols, ustawienie breakpoint na main i Resume

    Walczę z tym dłuższy czas i nie mam pojęcia co dalej. Wydaje mi się, że kiedyś to działało. Chyba też miałem z tym problem ale poradziłem sobie. Było to jakiś czas temu. Konfiguracji nie zmieniałam, powróciłem do tematu i jest źle.
  • Computer Controls
  • Specjalista - Mikrokontrolery
    Czemu nie Eclipse Luna? Jaką masz DOKŁADNIE wersję wtyczki GDB Hardware Debugging? Usuń opcję "reset_config" lub zmień ją na "reset_config srst_only" - przecież w SWD nie ma TRST, a pewnie STM32F07x nie ma pełnego JTAGa.

    4\/3!!
  • Poziom 23  
    Freddie Chopin napisał:
    Czemu nie Eclipse Luna? Jaką masz DOKŁADNIE wersję wtyczki GDB Hardware Debugging? Usuń opcję "reset_config" lub zmień ją na "reset_config srst_only" - przecież w SWD nie ma TRST, a pewnie STM32F07x nie ma pełnego JTAGa.

    4\/3!!


    Wersja na obrazku niżej. Dlaczego nie Luna? Bo na Kepler działało z inną płytką. Miałem się przesiąść jak zacznie działać na pewnym Keplerze.

    Po usunięciu opcji reset lub zmianie na samo srst openOCD się nie uruchamia:
    Code:
    Open On-Chip Debugger 0.8.0 (2014-04-28-08:42)
    
    Licensed under GNU GPL v2
    For bug reports, read
       http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : This adapter doesn't support configurable speed
    Info : STLINK v2 JTAG v16 API v2 SWIM v0 VID 0x0483 PID 0x3748
    Info : using stlink api v2
    Info : Target voltage: 2.924598
    Error: hl_interface_init_target: target not found: idcode: 0x0bb11477
    in procedure 'transport'
    in procedure 'init'


    STM32F072RB - Debugowanie w Eclipse i OpenOCD 0.8.0

    Dzięki.
  • Specjalista - Mikrokontrolery
    Spróbuj użyć pliku konfiguracyjnego board/stm32f0discovery.cfg - wiem że jest dla STM32F05x, ale z 07x też powinien zadziałać. Użyj tego pliku jako JEDYNEJ opcji dla OpenOCD - resztę usuń.

    4\/3!!
  • Computer Controls
  • Poziom 33  
    Podepnę się do tematu. Parę dni temu próbowałem uruchomić STM32F071. Niestety udało mi się go zaprogramować przez RS232 tylko i wyłącznie programem stm32flash (konsolowy program na linuksa) oraz jakimś dziwnym "chińskim" wynalazkiem na WIN7. Kupiony oryginalny STLink-V2 nie rozpoznał w ogóle tego uC (ani na win7 ani pod ubuntu ani ST-Link Utility ani OpenOCD w najnowszej wersji). Nawet Flash Loader Demonstrator pomimo że wykrywał układ nie wyświetlał nic :(. Po lekkim zmodyfikowaniu źródeł OpenOCD 0.7.0 mój zrobiony versaloon wykrył go prawidłowo na lini SWD, lecz próba zaprogramowania skończyła się fiaskiem.
  • Specjalista - Mikrokontrolery
    Może coś jest w patchach lub już w repozytorium - jakby na to nie patrzeć STM32F07x to nowe układy, a wersja 0.8.0 ma już pół roku... 0.7.0 to już w ogóle <:

    4\/3!!
  • Poziom 23  
    Freddie Chopin napisał:
    Spróbuj użyć pliku konfiguracyjnego board/stm32f0discovery.cfg - wiem że jest dla STM32F05x, ale z 07x też powinien zadziałać. Użyj tego pliku jako JEDYNEJ opcji dla OpenOCD - resztę usuń.

    4\/3!!



    Zrobiłem tak i dalej to damo :(

    Szukałem w Internecie i też nic nie znalazłem. Nie mam kompletnie pojęcia dlaczego się tak dzieje.

    Na innym komputerze na Eclipse Luna włączyłem debug i to samo (przeniosłem na niego plik elf, bez kompilacji projektu na Lunie).
  • Specjalista - Mikrokontrolery
    Sprawdź czy ten sam problem występuje przy jakiejś nowszej wersji OpenOCD - ściągnij z mojej stronki najnowszą wersję "rozwojową".

    Wg tego patcha, który jest też w wersji 0.8.0 - http://openocd.zylin.com/#/c/1921/ - Twój układ powinien działać.

    4\/3!!
  • Poziom 23  
    Dalej to samo na openOCD0.9.0-dev.

    Interesujące jest, że w openOCD wyskakuje na końcu:

    Code:
    Error: gdb requested a non-existing register 
    
    Info : dropped 'gdb' connection


    I dlaczego nie ma nic o wgraniu, nawet jakiegoś błędu. Zmieniłem też firmware stlinka na 24 i też nic.
  • Poziom 38  
    Nie wisi ci gdzieś breakpoint? Usuń wszystkie jakby co.
  • Specjalista - Mikrokontrolery
    Spróbuj może też debuggowania przez samo OpenOCD i telnet - sprawdź czy wszystkie typowe operacje (podgląd pamięci, instrukcji, rejestrów, step, halt, resume, reset, programowanie, ...) działają jak należy.

    4\/3!!
  • Poziom 38  
    Wyczyściłbym procesor przed tak dla pewności.
  • Poziom 23  
    Freddie Chopin napisał:
    Spróbuj może też debuggowania przez samo OpenOCD i telnet - sprawdź czy wszystkie typowe operacje (podgląd pamięci, instrukcji, rejestrów, step, halt, resume, reset, programowanie, ...) działają jak należy.

    4\/3!!


    Sprawdziłem już wcześniej kilka komend i wszystko działa. Teraz spróbiwałem zaprogramować i oto co dostałem (przez telnet):

    Code:
    Open On-Chip Debugger
    
    > program
    wrong # args: should be "program filename ?arg...?"
    > reset halt
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0xc1000000 pc: 0x08002134 msp: 0x20003ffc
    > reset
    > reset halt
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0xc1000000 pc: 0x08002134 msp: 0x20003ffc
    > flash write_image erase c:\prog.elf
    auto erase enabled
    device id = 0x20016448
    flash size = 128kbytes
    target state: halted
    target halted due to breakpoint, current mode: Thread
    xPSR: 0x61000000 pc: 0x2000003a msp: 0x20003ffc
    wrote 20480 bytes from file c:prog.elf in 0.920052s (21.738 KiB/s)
    > reset


    Widać, że przez openOCD działa, więc co jest? Coś na połączeniu GDB-openOCD?

    Breakpointy wywalone, wielokrotnie kasowałem układ przed wgrywaniem - zawsze to samo.
  • Specjalista - Mikrokontrolery
    Ten mikrokontroler ma jakieś piny typu BOOT, na pewno masz założone odpowiednie zworki? Niby wszystko działa, ale odpowiedzi jakie dostajesz są bardzo mocno podejrzane - np. to:
    target halted due to breakpoint, current mode: Thread
    xPSR: 0x61000000 pc: 0x2000003a msp: 0x20003ffc
    Nie dość, że "halted" z powodu breakpoina (może w Twoim kodzie jakiś breakpoint jest? jest taka instrukcja assemblerowa BKPT), to jeszcze adres jakiś w pamięci RAM... Próbowałeś z różnymi kodami przykładowymi? Może po prostu coś jest nie tak z programem który próbujesz uruchomić?

    4\/3!!
  • Poziom 23  
    Freddie Chopin napisał:
    Ten mikrokontroler ma jakieś piny typu BOOT, na pewno masz założone odpowiednie zworki? Niby wszystko działa, ale odpowiedzi jakie dostajesz są bardzo mocno podejrzane - np. to:
    target halted due to breakpoint, current mode: Thread
    xPSR: 0x61000000 pc: 0x2000003a msp: 0x20003ffc
    Nie dość, że "halted" z powodu breakpoina (może w Twoim kodzie jakiś breakpoint jest? jest taka instrukcja assemblerowa BKPT), to jeszcze adres jakiś w pamięci RAM... Próbowałeś z różnymi kodami przykładowymi? Może po prostu coś jest nie tak z programem który próbujesz uruchomić?

    4\/3!!


    Płytka discovery i ma BOOT na jednej nodze. Ale na Atollic czy CoCox wszystko działa bez zmiany zworek ze standardowych.
    Nie ma breakpointów. Skompilowałem też przykład z CoCox, który tam działa, przeniosłem plik elf do debagowania w Eclipse (wskazałem go w C\C++ Application w Debug configuration) i dalej to samo.

    Pisałem wcześniej, że wcześniej to działało na Eclipse. Jednak nie. Okazało się teraz, że wcześniej debagowałem tą płytkę na CoCox, bo też miałem takie problemy jak teraz. Więc od początku są takie problemy.
    Ciekawe to jest...
  • Specjalista - Mikrokontrolery
  • Poziom 23  
    Tak jak piałem wcześniej, sprawdziłem na innym komputerze na Lunie wtyczką do niej i to samo :(
  • Specjalista - Mikrokontrolery
    Mhm... no to nie wiem co więcej może być nie tak... Może jest jednak jakiś problem w samym OpenOCD - warto by przejrzeć czy w kolejce nie czekają jakieś patche związane z tymi mikrokontrolerami, a jeśli nie, to napisać posta na listę dyskusyjną...

    4\/3!!