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

STM32F407 - Błędy podczas programowania przykładu ze strony Frediego

CHKDSK 12 Maj 2013 18:14 2067 5
  • #1 12 Maj 2013 18:14
    CHKDSK
    Poziom 11  

    Witam,
    Stworzyłem płytkę z mikrokontrolerem STM32F407. Próbowałem ja zaprogramować przykładem "blink_led" ze strony Frediego i nie chciało działać. Oprogramowanie Eclipse + bleeding toolchain + openocd 0.7.0 zostało skonfigurowane wg tutoriala Frediego na Ubuntu.

    Nie chciało się poprawnie programować, więc próbowałem różnych porad z internetu, ale to nie pomagało. Dopiero później znalazłem dlaczego nie działa (wersja wtyczki do hardware gdb była do złego eclipse'a). Po postawieniu na nowo całego środowiska (już z odpowiednią wtyczką) i imporcie od nowa projektu mam następujące cuda podczas próby zaprogramowania (przez wtyczkę hardware gdb i ustawienia Frediego):

    Code:
    openocd -f /usr/local/share/openocd/scripts/interface/parport.cfg -f /usr/local/share/openocd/scripts/target/stm32f4x.cfg -c "reset_config trst_and_srst"
    
    Open On-Chip Debugger 0.7.0 (2013-05-12-14:51)
    Licensed under GNU GPL v2
    For bug reports, read
       http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Warn : Adapter driver 'parport' did not declare which transports it allows; assuming legacy JTAG-only
    Info : only one transport option; autoselect 'jtag'
    parport port = 0x0
    adapter speed: 1000 kHz
    adapter_nsrst_delay: 100
    jtag_ntrst_delay: 100
    cortex_m3 reset_config sysresetreq
    trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
    Info : clock speed 500 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
    Info : accepting 'gdb' connection from 3333
    Info : device id = 0x10016413
    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000051, MEM_AP_TAR 0x1fff7a24
    Warn : STM32 flash size failed, probe inaccurate - assuming 1024k flash
    Info : flash size = 1024kbytes
    Warn : acknowledgment received, but no packet pending
    undefined debug reason 6 - target needs reset
    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)
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    Error: stm32x device protected
    Error: failed erasing sectors 0 to 0
    Error: flash_erase returned -4
    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000051, MEM_AP_TAR 0x800038c




    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000051, MEM_AP_TAR 0x800038c
    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000051, MEM_AP_TAR 0x800038c
    Error: stm32f4x.cpu -- clearing lockup after double fault
    Polling target stm32f4x.cpu failed, GDB will be halted. Polling again in 100ms
    Polling target stm32f4x.cpu succeeded again


    Po połączeniu przez telnet dostaję takie rzeczy:


    Code:
    telnet localhost 4444
    
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Open On-Chip Debugger
    > reset halt
    JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
    JTAG tap: stm32f4x.bs tap/device found: 0x06413041 (mfg: 0x020, part: 0x6413, ver: 0x0)
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
    > poll
    background polling: on
    TAP: stm32f4x.cpu (enabled)
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0xffffffff msp: 0xfffffffc
    > flash info 0                                                                                             
    Device Security Bit Set
    #0 : stm32f2x at 0x08000000, size 0x00100000, buswidth 0, chipwidth 0
       #  0: 0x00000000 (0x4000 16kB) not protected
       #  1: 0x00004000 (0x4000 16kB) not protected
       #  2: 0x00008000 (0x4000 16kB) not protected
       #  3: 0x0000c000 (0x4000 16kB) not protected
       #  4: 0x00010000 (0x10000 64kB) not protected
       #  5: 0x00020000 (0x20000 128kB) not protected
       #  6: 0x00040000 (0x20000 128kB) not protected
       #  7: 0x00060000 (0x20000 128kB) not protected
       #  8: 0x00080000 (0x20000 128kB) not protected
       #  9: 0x000a0000 (0x20000 128kB) not protected
       # 10: 0x000c0000 (0x20000 128kB) not protected
       # 11: 0x000e0000 (0x20000 128kB) not protected
    stm32f4x - Rev: Z
    > flash probe 0                                                                                           
    device id = 0x10016413
    JTAG-DP STICKY ERROR
    MEM_AP_CSW 0x23000051, MEM_AP_TAR 0x1fff7a24
    STM32 flash size failed, probe inaccurate - assuming 1024k flash
    flash size = 1024kbytes
    flash 'stm32f2x' found at 0x08000000
    > flash write_image erase /home/krolik/eclipse-workspace/stm32f4_blink_led/out/stm32f4_blink_led.elf       
    auto erase enabled
    stm32x device protected
    failed erasing sectors 0 to 0
    in procedure 'flash'
    > flash write_image /home/krolik/eclipse-workspace/stm32f4_blink_led/out/stm32f4_blink_led.elf     
    wrote 1048 bytes from file /home/krolik/eclipse-workspace/stm32f4_blink_led/out/stm32f4_blink_led.elf in 0.164433s (6.224 KiB/s)
    > verify_image /home/krolik/eclipse-workspace/stm32f4_blink_led/out/stm32f4_blink_led.elf
    stm32f4x.cpu -- clearing lockup after double fault
    error executing cortex_m3 crc algorithm
    JTAG-DP STICKY ERROR
    MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x8000004
    JTAG-DP STICKY ERROR
    MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x8000004
    Block read error address 0x8000000
    in procedure 'verify_image'
    > flash write_image erase /home/krolik/eclipse-workspace/stm32f4_blink_led/out/stm32f4_blink_led.elf       
    auto erase enabled
    stm32x device protected
    failed erasing sectors 0 to 0
    in procedure 'flash'
    >


    Próbowałem już komend "stm32f2x unlock 0" oraz "stm32x mass_erase 0", ale dalej nic nie pomaga.

    Nie rozumiem dlaczego z jednej strony nie jest zablokowany a pojawiają się informacje, że jest.
    Czy jest jakiś sposób by to naprawić albo chociaż powrócić do stanu "jak z fabryki"?

    0 5
  • #2 12 Maj 2013 18:47
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Pierwsze i podstawowe pytanie - czy masz pewność, że płytka i układ które masz są sprawne? Czy podłączyłeś do niej zarówno TRST jak i SRST? Spróbuj ustawić niższą prędkość JTAGa (adapter_khz), np 100kHz albo i mniej.

    4\/3!!

    0
  • #3 12 Maj 2013 19:58
    CHKDSK
    Poziom 11  

    Freddie Chopin napisał:
    Pierwsze i podstawowe pytanie - czy masz pewność, że płytka i układ które masz są sprawne? Czy podłączyłeś do niej zarówno TRST jak i SRST? Spróbuj ustawić niższą prędkość JTAGa (adapter_khz), np 100kHz albo i mniej.

    4\/3!!


    Sprawdzałem wszystkie linie od programatora do nóżek uC oraz zasilania, masy i dojścia do kwarcu. BOOT0 mam przypięte do masy. Wcześniej się programował układ (jak próbowałem zrobić szablon projektu na własną rękę) i działała weryfikacja po telnecie. Ale miałem zwalony linker i plik startowy .S się nie dodawał chyba przez co sam program nie działał. A teraz nie da się nawet wgrać kodu czy wyczyścić pamięci.

    Podłączone mam oba resety, mój programator to klon wiglera pod LPT. Próbowałem zmniejszać prędkość i nic to nie pomogło. Ogólnie początkowo coś tam się programowało i weryfikowało, a po moich "zabiegach" przestało i nie wiem jak to odwrócić.

    0
  • Pomocny post
    #4 12 Maj 2013 20:03
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Zawsze możesz spróbować połączyć się z bootloaderem na UART i przy jego pomocy skasować pamięć i usunąć ewentualne zabezpieczenia...

    Przejrzyj manual OpenOCD pod kątem dziwnych komend dostępnych dla tego typu układu, może to coś z option bytes?

    4\/3!!

    0
  • #5 13 Maj 2013 00:14
    CHKDSK
    Poziom 11  

    I się wyjaśniło.

    Komenda "stm32f2x unlock 0" ustawia bajt Read protection (RDP) na "Level 1: read protection enabled".

    Udało mi się rozwiązać problem za pomocą pożyczonego STlinka i windowsowego narzędzia do niego: ustawiłem RDP z powrotem na level 0.

    Później dało się programować zarówno STlinkiem jak i Wiglerem. Dzięki wielkie Freddie! :)

    P.S.
    Kiedy już wiedziałem co się stało udało mi się to powtórzyć. Wydaje mi się, że to błąd tej komendy w openOCD.

    0
  • #6 13 Maj 2013 07:54
    Freddie Chopin
    Specjalista - Mikrokontrolery

    CHKDSK napisał:
    P.S.
    Kiedy już wiedziałem co się stało udało mi się to powtórzyć. Wydaje mi się, że to błąd tej komendy w openOCD.

    Wyślij opis problemu na listę dyskusyjną OpenOCD.

    4\/3!!

    0