logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32F4xx - OpenOCD łączy się tylko kiedy fizycznie procesor jest w stanie RESET

hardtmuth 13 Gru 2013 08:21 1947 8
REKLAMA
  • #1 13055360
    hardtmuth
    Poziom 20  
    Posty: 464
    Pomógł: 5
    Ocena: 30
    Używam KT-LINK, OpenOCD 0.7.0, libusb.

    Środowisko działa prawidłowo, kilka identycznych płyt z STM32F4xx działa prawidłowo, debug, flash itp.

    Jedna idzie opornie. Po podłączeniu się OpenOCD:

    Open On-Chip Debugger 0.7.0 (2013-05-05-10:41)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    adapter speed: 1000 kHz
    adapter_nsrst_delay: 100
    jtag_ntrst_delay: 100
    cortex_m3 reset_config sysresetreq
    Info : max TCK change to: 30000 kHz
    Info : clock speed 1000 kHz
    Error: JTAG scan chain interrogation failed: all ones
    Error: Check JTAG interface, timings, target power, etc.
    Error: Trying to use configured scan chain anyway...
    Error: stm32f4x.cpu: IR capture error; saw 0x0f not 0x01
    Warn : Bypassing JTAG setup events due to errors
    Warn : Invalid ACK 0x7 in JTAG-DP transaction
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 100ms
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 300ms
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 700ms
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 1500ms
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 3100ms


    Standardzik, coś jest nie tak (np. zwarcie). Przypadkiem zauważyłem, że jak nacisnę RESET na płycie i będę go trzymał cały czas, i wtedy połączę się z jtagiem to mam tak:


    
    <-- [b]trzymam cały czas RESET naciśnięty[/b]
    Open On-Chip Debugger 0.7.0 (2013-05-05-10:41)
    Licensed under GNU GPL v2
    For bug reports, read
    	http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Info : only one transport option; autoselect 'jtag'
    adapter speed: 1000 kHz
    adapter_nsrst_delay: 100
    jtag_ntrst_delay: 100
    cortex_m3 reset_config sysresetreq
    Info : max TCK change to: 30000 kHz
    Info : clock speed 1000 kHz
    Info : JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
    Info : JTAG tap: stm32f4x.bs tap/device found: 0x06413041 (mfg: 0x020, part: 0x6413, ver: 0x0)
    Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
    Warn : Invalid ACK 0x7 in JTAG-DP transaction   <--- [b]Puściłem RESET[/b]
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 100ms
    Warn : Invalid ACK 0x7 in JTAG-DP transaction
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 300ms
    Warn : Invalid ACK 0x7 in JTAG-DP transaction
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 700ms
    Polling target stm32f4x.cpu succeeded again <-- [b]Nacisnąłem RESET[/b]


    Jeśli procka wprowadzę w BOOTMODE to bez trzymania resetu można też połączyć się z jtagiem.

    Jeśli trzymając RESET zacznę programować, to nic z tego nie wyjdzie:
    i gdb zwraca:
    symbol-file D:\\sciezka_do_pliku_elf.elf
    load D:\\sciezka_do_pliku_elf.elf 
    Error erasing flash with vFlashErase packet
    continue
    Note: automatically using hardware breakpoints for read-only addresses.
    Warning:
    Cannot insert hardware breakpoint 1.
    Could not insert hardware breakpoints:
    You may have requested too many hardware breakpoints/watchpoints.
    

    i po sprawie.

    Jeśli wprowadzę w bootmode, to gdb zwraca to samo, ew. trochę inna kolejność komunikatów.

    Sprawdzałem przejścia pomiędzy CPU, a złączem JTAG, na zwarcia pinów do masy, czy do VCC, zwarcia między pinami. Nic nie wykryłem.

    Jeszcze zostały mi do sprawdzenia rezystory polaryzujące linie jtag, może one są problemem, np. błędny montaż.
  • REKLAMA
  • #3 13055536
    hardtmuth
    Poziom 20  
    Posty: 464
    Pomógł: 5
    Ocena: 30
    Poszukiwań ciąg dalszy.

    Procka mam w obudowie 176pin (LQFP)

    Znalazłem, że brakuje rezystora pulldown przy linii BOOT0, dolutowałem - brak zmian.
    Wyrzuciłem wszystkie pull-up/down i kondensatory filtrujące na linii RST przy złączu JTAG - brak zmian.
    Sprawdziłem stany pinów na płycie działającej i tej felernej: PDR_ON (hi), BYPASS_REG (low).
    Odpiąłem na wypadek wszystko od pinu PA0, ale zgodnie z notą i tym co wyżej mam ustawione, PA0 nie ma funkcji alternatywnej.

    Blokowanie JTAGa znam dobrze, bo kiedyś się z tym trochę bawiłem. Wczoraj udało mi się płytę odpalić, wgrać program i potem procek już pracował normalnie. Płytą potem ktoś inny się bawił i dziś znowu to samo.

    Też wczoraj uznałem, że programowo został JTAG wyłączony, jak po kombinowaniu z RST i próbą ładowania w końcu poszło. Dziś nie chce tak lekko pójść.
  • REKLAMA
  • Pomocny post
    #4 13055548
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Zastanawiam się, jak masz podłączone piny RESET (TRST i SRST) interfejsu JTAG do MCU i czy próbowałeś programować przez SWD?
  • REKLAMA
  • #5 13055678
    hardtmuth
    Poziom 20  
    Posty: 464
    Pomógł: 5
    Ocena: 30
    Sprzęt ożył. Odpaliłem płytę w BOOTLOADERZE, połączyłem się z nią OpenOCD (wydając polecenie z poziomu Eclipse).

    Połączył się bez błędów tak, jak wyżej, przy wciśniętym reset, tylko tutaj na stałe w boot, więc JTAG nie zdążył się wyłączyć (zakładając, że tak jest).

    Telnet localhost 4444.

    reset halt

    Z poziomu eclispe rozpocząłem load i program się wgrał. Całość chodzi i już mam normalny dostęp do procka przez jtaga.

    W Eclipse w startup mam monitor reset halt. Dwie górne pozycje nie są zaznaczone, powinno być OK, a w czasie wgrywania takie cyrki były.

    Co do pytania:

    Linie TRST i RST są podłączone do złącza JTAG i dalej lecą do KT-linka, trochę polaryzujących rezystorów przy liniach jest + 100nF przy RST przy samym złączu JTAG. Z SWD nie próbowałem, nie chce mi się konfigurować kolejnego jtaga w kompie, bo wiem jaka to jest męka.
  • #6 13055821
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Jest kilka innych powodów podobnego zachowania poza wyłączaniem interfejsu JTAG - jednym z nich jest np. usypianie układu (tryb oszczędzania energii + instrukcja typu WFI/WFE).

    4\/3!!
  • #7 13055827
    hardtmuth
    Poziom 20  
    Posty: 464
    Pomógł: 5
    Ocena: 30
    Teoretycznie procek się tak zachowywał od początku - świeża sztuka z tacki od dystrybutora.
    Potem na chwilę programiści dorwali się do płyty i znowu podobnie.
    Teraz płyta już jest użytkowana i póki co nic się nie dzieje. Dziwne.

    Co do usypiania, na 99% nie było włączane, bo z tego nie korzystamy.
  • REKLAMA
  • #8 13057293
    Jado_one
    Poziom 22  
    Posty: 650
    Pomógł: 43
    Ocena: 12
    Wystarczy przeprogramować funkcje pinów od JTAG'a na inne i już będzie kłopot z połączeniem. Swojego czasu akurat to zrobiłem i potem miałem sporo zabawy, żeby poustawiać z powrotem tak jak było - a że nie opisane w pełni, to musiałem metodą prób i błędów niektóre piny ustawiać, aż trafiłem na właściwe parametry.
    Na szczęście programowanie "pod resetem" ratuje w takich sprawach sytuację ;-)
  • #9 13057565
    mickpr
    Poziom 39  
    Posty: 4630
    Pomógł: 579
    Ocena: 295
    Jado_one napisał:
    Na szczęście programowanie "pod resetem" ratuje w takich sprawach sytuację
    Mhm.... Taka np. ATMEGA - można powiedzieć, że też jest programowana "pod reset'em".

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napotkał problemy z połączeniem OpenOCD do mikrokontrolera STM32F4xx, który działał poprawnie w innych płytach. Po analizie, stwierdzono, że problem może być związany z brakiem rezystora pulldown na linii BOOT0 oraz z możliwością zablokowania interfejsu JTAG. Użytkownik zdołał nawiązać połączenie, uruchamiając płytę w trybie bootloadera, co pozwoliło na programowanie bez błędów. Wskazano również, że inne przyczyny problemów mogą obejmować usypianie układu lub nieprawidłowe ustawienia pinów JTAG. Użytkownik zauważył, że programowanie "pod resetem" może być skutecznym rozwiązaniem w takich sytuacjach.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA