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.

STM32W108 - Konfiguracja debugowania i programowania flash w OpenOCD.

mickpr 24 Lut 2013 01:23 2292 16
  • #1 24 Lut 2013 01:23
    mickpr
    Poziom 39  

    Witam
    Mam sobie taki mikrokontroler: STM32W108CBU64 (i 63).
    Używam OpenOCD w wersji 0.5.0.
    Używam programatora Versaloon.

    Po paru próbach skleiłem sobie wykrywającą ten MCU konfigurację OpenOCD:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Oto dowód, że (coś) działa:
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Ponieważ korzystam ze standardowego interfejsu JTAG (chciałem użyć SWD, ale poległem) - chciałbym zrobić 2 proste rzeczy.
    (Już wiem dlaczego poległem - RM0008 mówi: 31.3.1 Mechanism to select the JTAG-DP or the SW-DP. By default, the JTAG-Debug Port is active. If the debugger host wants to switch to the SW-DP, it must provide a dedicated JTAG sequence on TMS/TCK (respectively mapped to SWDIO and SWCLK) which disables the JTAG-DP and enables the SW-DP. This way it is possible to activate the SWDP using only the SWCLK and SWDIO pins.).

    1. Tymczasowo - programowanie Flash z prostego pliku batch z wykorzystaniem OpenOCD.
    2. Debugowanie pod Eclipse (później)
    Przyznam się, że docelowo będzie debugowanie w środowisku KEIL (po zakupie środowiska przez szefa).
    Na obecną chwilę program jest napisany w IAR 6.30 i wgrywany przez wbudowany bootloader (UART).

    Mój nieszczęsny programator Versaloon (mini) działa elegancko czy to z SWD, czy z JTAG z mikrokontrolerami LPC17xx.
    Niestety, z STM32 spotykam się w tym temacie po raz pierwszy.

    Pytania:
    1. W jaki sposób wywołać OpenOCD (używając powyższej konfiguracji) w celu programowania STM32W108.
    (W przypadku LPC1758 wystarczyło wpisać:
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    2. Co w konfiguracji może być źle.
    Po gruntownym przestudiowaniu tej strony: https://forum.sparkfun.com/viewtopic.php?f=18&t=23411
    i po testach zauważyłem, że Tap ID BoundaryScan'a jest diametralnie różny (0x269A862b zamiast proponowanego 0x06418041).
    Również próba wykonania wgrania flash'a (nieco w ciemno - przyznam się) w sposób analogiczny do LPC'ka czyli :
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    spaliła na panewce:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Piny TRST i SRST mam oczywiście podłączone.

    Czy ktoś z forumowiczów spotkał się z takim problemem, gdzie szukać rozwiązania?

    0 16
  • #2 24 Lut 2013 08:52
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #3 24 Lut 2013 12:20
    mickpr
    Poziom 39  

    Freddie Chopin napisał:
    Czemu nie użyjesz nowszego OpenOCD i domyślnych plików konfiguracyjnych?
    Odpowiedź jest prosta - bo i tak nie ma tam plików konfiguracyjnych od STM32W108xx, a te od STm32F10xxxx nie działają.
    Wersja OpenOCD, którą mam - działała na pewno przez SWD (ale z MCU NXP).
    Niestety - jeśli próbowałem się połączyć przez samo SWD - efekt był żaden.
    Dopiero dopięcie dodatkowych pinów - spowodowało, że z grubsza to ogarnąłem.

    STM32W108 ma w sobie rdzeń Cortex M3. Nie sądzę, aby były jakieś diametralne różnice między nimi - a STM32F10xx.
    Już nawet myślę, o zakupie jakiejś płytki STM32Fx DISCOVERY z STLINK'iem, być może wtedy uda mi się połączyć z nim (mam jakiś przykładowy projekt w Keil'u).

    Zastanawiam się jeszcze - czy posiadając programator Amontec JtagKey-2 - jestem w stanie używać go jako programatora SWD? Co należało by zrobić?
    Programator Amontec (dzięki Twojej radzie) uruchomiłem pod Keil'em przez RDI.
    Działa elegancko np. z LPC1756.

    Wracając do tematu. Matrwi mnie ostrzeżenie: Warn : stm32.bs: nonstandard IR value
    oraz niestandardowy (nigdzie nie opisany) TAP ID.
    Niestety w Manual (RM0008) nie znalazłem sposobu jak to ruszyć.
    Mikrokontrolery STM32W108 to trochę takie po macoszemu traktowane dziecko ST.
    Wersje ze stosem RF (SimpleMAC) i RF4CE są oficjalnie produkowane.
    Wersja ze stosem ZigBee (EmberZnet) (np. STM32W108CBU61) została oficjalnie wycofana z rynku - z powodu zatargu ST z firmą Ember.
    ST miał wypuścić nową wersję w roku 2013, ale to takie "patykiem na wodzie pisane" dyrdymały.

    Tymczasem utknąłem w dalszych próbach.

    Pobrałem z Twojej strony OpenOCD 0.6.1. Po paru zmianach (m. innymi dodaniu owego niestandardowego TAP ID) do jednego z plików (stm32f1x.cfg) Efekt jest taki:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    0
  • #4 24 Lut 2013 12:29
    Freddie Chopin
    Specjalista - Mikrokontrolery

    mickpr napisał:
    Zastanawiam się jeszcze - czy posiadając programator Amontec JtagKey-2 - jestem w stanie używać go jako programatora SWD? Co należało by zrobić?
    Programator Amontec (dzięki Twojej radzie) uruchomiłem pod Keil'em przez RDI.
    Działa elegancko np. z LPC1756.

    Musiałbyś mieć adapter (bo JTAGkey2 nie jest przystosowany do SWD, w przeciwieństwie do "innych" opcji <; ), a do tego jeszcze musiałbyś używać programu który owe SWD wspiera z tego typu JTAGiem - na tą chwilę jedyny jaki znam to CrossWorks...

    mickpr napisał:
    Pobrałem z Twojej strony OpenOCD 0.6.1. Po paru zmianach (m. innymi dodaniu owego niestandardowego TAP ID) do jednego z plików (stm32f1x.cfg) Efekt jest taki:

    Jak wywołujesz OpenOCD? Dorzuć do wywołania coś takiego:
    -c "reset_config trst_and_srst; adapter_khz 10"
    (EDIT - zginęło mi podkreślenie)
    (zakładając, że masz dwa resety, prędkość możesz potem próbować zwiększać jak już zadziała)

    Te układy mogą być po prostu (jeszcze) nie wspierane przez OpenOCD, stąd problem np z warningiem który widzisz.

    4\/3!!

    0
  • #5 24 Lut 2013 12:37
    mickpr
    Poziom 39  

    Efekt:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Zauważyłem, ze w pliku jest już wspomniany reset.
    Aby nie "czarować" pokazuje cały plik:
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Freddie Chopin napisał:
    Te układy mogą być po prostu (jeszcze) nie wspierane przez OpenOCD, stąd problem np z warningiem który widzisz.
    I to niestety może być "gwóźdź do trumny".

    0
  • #6 24 Lut 2013 12:43
    Freddie Chopin
    Specjalista - Mikrokontrolery

    mickpr napisał:
    Zauważyłem, ze w pliku jest już wspomniany reset.
    Aby nie "czarować" pokazuje cały plik:

    Konfiguracji TEGO resetu nie ma, a do tego jest przestawienie prędkości, dlatego naprawdę dodaj to co wrzuciłem do wywołania OpenOCD, wtedy NA PEWNO zostanie to wykonane OSTATNIE.

    4\/3!!

    0
  • #7 24 Lut 2013 12:46
    mickpr
    Poziom 39  

    Freddie Chopin napisał:
    dlatego naprawdę dodaj to co wrzuciłem do wywołania OpenOCD, wtedy NA PEWNO zostanie to wykonane OSTATNIE.

    Moje wywołanie z tą konfiguracją właśnie takie było., tj.:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #8 24 Lut 2013 12:47
    alagner
    Poziom 25  

    chyba ma być reset_config zamiast reset config

    0
  • #9 24 Lut 2013 12:52
    mickpr
    Poziom 39  

    Freddie Chopin napisał:
    Musiałbyś mieć adapter (bo JTAGkey2 nie jest przystosowany do SWD, w przeciwieństwie do "innych" opcji <; ), a do tego jeszcze musiałbyś używać programu który owe SWD wspiera z tego typu JTAGiem - na tą chwilę jedyny jaki znam to CrossWorks...
    Czy mówisz o twoim "JTAG-lock-pick Tiny 2", jaka jest jego cena?
    Czy da się go uruchomić w trybie SWD pod Keilem - czy tylko pod wspomnianym Crossworks'em?

    alagner napisał:
    chyba ma być reset_config zamiast reset config
    Efekt niewiele lepszy:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    Tyle, że faktycznie błędu nie ma.

    0
  • Pomocny post
    #10 24 Lut 2013 12:59
    Freddie Chopin
    Specjalista - Mikrokontrolery

    mickpr napisał:
    Tyle, że faktycznie błędu nie ma.

    No, ale jesteś o ten jeden krok bardziej "zgodny" z właściwymi ustawieniami (; Faktycznie zapomniałem wcześniej o podkreśleniu.

    Anyway - użyj "mało zmodyfikowanego" pliku dla stm32f1x. Na początku nie zmieniaj w nim NIC (zostaw zupełnie standardowy) i daj znać co z tego wyszło.

    4\/3!!

    0
  • #11 24 Lut 2013 13:10
    mickpr
    Poziom 39  

    Freddie Chopin napisał:
    Anyway - użyj "mało zmodyfikowanego" pliku dla stm32f1x. Na początku nie zmieniaj w nim NIC (zostaw zupełnie standardowy) i daj znać co z tego wyszło.

    Na począdtku pliku dopisałem jedynie:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    oraz przy definicjach _BSTAPID
    dodałem jedynie przykrywającą poprzedni wpis linijkę
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    (z nowym TAP ID).

    To jedyne zmiany.

    0
  • #12 24 Lut 2013 13:27
    Freddie Chopin
    Specjalista - Mikrokontrolery

    No ale jak tylko te dwie rzeczy zmieniłeś, to skąd warning "Warn : stm32f1x.bs: nonstandard IR value"... /; No chyba że naprawdę dla tych układów irlen, ircapture i irmask muszą być inne, bo to jest napewno źle:

    Info : JTAG tap: stm32f1x.bs tap/device found: 0x269a862b (mfg: 0x315, part: 0x69a8, ver: 0x2)

    choćby mfg (producent) powinien być taki sam jak linijkę wyżej, czyli 0x23b...

    W wolnej chwili możesz napisać na listę dyskusyjną OpenOCD, może ktoś rozszyfrował te układy już [; Wg mnie powinny działać przynajmniej do tego stopnia, że się połączysz.

    4\/3!!

    0
  • #13 24 Lut 2013 14:18
    mickpr
    Poziom 39  

    Freddie Chopin napisał:
    W wolnej chwili możesz napisać na listę dyskusyjną OpenOCD, może ktoś rozszyfrował te układy już [; Wg mnie powinny działać przynajmniej do tego stopnia, że się połączysz.
    Jak bym się połączył poprawnie - to pewnie flash nie byłby problemem, a to obecnie moje główne moje zmartwienie.
    Wrzucanie wszystkiego przez bootloader to trochę szczeniackie rozwiązanie, nie wspominając o debugowaniu.
    Zapytam oczywiście na forum openocd.
    W międzyczasie czekam na swój Ulink-2 - może całość ruszy pod Keil-em, który w wersji którą obecnie testuje - (4.60) wspiera te układy. Oczywiście jak szef zakupi 4.70a - będzie mam nadzieję już w 100% funkcjonalne - no i obiecane podpowiadanie kodu w najnowszym uVision :). Nie wiem jeszcze jak to wygląda, ale mam nadzieję, że tego nie skopali.
    Myślę także o zakupie STM32FxDISCOVERY - tam jest STLINK - który jest wspierany (również przez Keil).

    Freddie Chopin napisał:
    choćby mfg (producent) powinien być taki sam jak linijkę wyżej, czyli 0x23b...

    Tu już nie jestem pewny.
    W sposobie połączenia się z linku https://forum.sparkfun.com/viewtopic.php?f=18&t=23411 te kody też są różne.
    Częściowo - wszystko jest podobne.

    Dodano po 36 [minuty]:

    Forum Sparkfun = forum OpenOCD.
    Nic poza linkiem, który podałem ciekawego o STM32W108 nie ma.
    Wysłałem post do autora tematu - zobaczymy. Temat był 3 lata temu, więc nie oczekuję na cud.
    W sumie - 3 lata - to dość długi okres aby ująć "STM32W..." w planach rozwojowych OpenOCD.
    Tyle, że to szalenie niedoceniana wersja STM32.
    Wkładasz scalak, dwa filtry SMD, antena na PCB - i już masz komunikację (stos sieciowy) bezprzewodowy.
    Scalak na Farnell'u kosztuje 13 zł. (Cortex M3 / 128kFash).

    0
  • #14 24 Lut 2013 14:50
    Freddie Chopin
    Specjalista - Mikrokontrolery

    A jakbyś dopisał do konfiguracji BS ten ircapture 0xe0?

    mickpr napisał:
    Forum Sparkfun = forum OpenOCD.

    Forum sparkfun to forum sparkfun i nic więcej (;

    4\/3!!

    0
  • #16 24 Lut 2013 16:39
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #17 27 Lut 2013 22:11
    mickpr
    Poziom 39  

    Freddie Chopin napisał:
    To jak już znajdziesz tam jakieś DOBRE porady to daj znać (;
    Chyba znalazłem. :)
    Pomocny okazał się STLINK/V2 z kupionej okazyjnie przeze mnie płytki STM32F4DISCOVERY (niejako dla samego STLINK-a).

    Po paru próbach z konfiguracjami udało mi się ustalić pierwszą rzecz - czyli programowanie i kasowanie pamięci Flash.
    Najpierw plik konfiguracyjny :
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i efekt wywołania:
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    Jak widać coś mu jeszcze nie pasuje, ale to nie przeszkadza mu w działaniu.
    Co więcej - gdb i telnet są wyremowane - a jednak (telnet) działa :)

    Komenda kasuje flash, ale coś jest jeszcze nie tak
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    druga - służy do programowania do programowania plikiem binarnym (również coś jest źle):
    Kod: bash
    Zaloguj się, aby zobaczyć kod

    Jak widać. używam Openocd-0.6.0-rc1.exe. Działa w trybie SWD.
    Te wywołania naprawdę zapisują i kasują flash (sprawdzone programem ST-LINK Utility), ale tylko do adresu 0x08001FD7. Dalej - nic.
    Dlaczego?

    To tyle - na początek.
    Postaram się doprowadzić całość do poprawnej konfiguracji również dla innych programatorów (ST/LINK jest dość specyficzny, ma w OpenOCD odrębne pliki konfiguracji i inną składnie wywołania).
    Doczytałem, że STM32W108 korzysta ze sposobu programowania takiego jak EM357 (kiedyś była to firma Ember, teraz kupił ją Silicon Labs), ale pewności nie mam - niestety.

    0