s5tech.net • Poglej temo - Serial Wire Debug (SWD), kako uporabljati.

Serial Wire Debug (SWD), kako uporabljati.

programski jeziki in programiranje

Moderator: tilz0R

Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a xfce » 19 Apr 2018, 09:00

Pozdravljeni,

imam nekaj vprašanj glede SWD programiranja MCU. Polno povezan SWD ima torej VDD, VSS, RESET, SWCLK, SWDIO in SWO.

Slika

Koda: Izberi vse
RESET
SWCLK    Input    Clock signal to target CPU. It is recommended that this pin is pulled to a defined state of the target board. Shared with TMS on targets which support JTAG and SWD.
SWDIO    I/O    Bi-directional data pin. This pin should be pulled up on the target. Shared with TMS on targets which support JTAG and SWD.
SWO    Output (optional)    Serial wire output, allowing the CPU to output custom data like printf output, asynchronous to SWCLK and other debug pins. Usually shared with the TDO pin on devices which support JTAG and SWD. Not available on all devices which support SWD.


SWO pin je čisto specifičen in ga načeloma ne uporabljamo?
Če razumem prav lahko povežem na programator samo SWCLK, SWDIO (seveda poleg VDD in VSS) in lahko programiram in delam debug v polni funkcionalnosti. Kaj pridobim če povežem tudi reset pin?
Ali potrebujejo pini SWCLK, SWDIO zunanji pullup?
Reset pin lahko uporabim kot GPIO, če kasneje v kodi spremnim njegovo funkcionalnost?
Če izdelek serijsko programiram, lahko pin SWCLK, SWDIO uporabim tudi za GPIO in obdržim samo RESET pin, če ga hočem kdaj preprogramirati? Tukaj zgubim možnost za debug?
Je dovolj samo reset pin, če v kodi kasneje spremenim pin SWCLK, SWDIO v GPIO, ali moram dati po resetu kakšen delay?
Načeloma, če grem v ekstrem, bi se lahko zaklenil ven in uporabil vse pine (RESET, SWCLK, SWDIO) za GPIO?
xfce
 
Prispevkov: 542
Pridružen: 14 Feb 2015, 12:38
Kraj: Poljane nad Škofjo loko
Zahvalil se je: 69 krat
Prejel zahvalo: 136 krat
Uporabnika povabil: S52O
Število neizkoriščenih povabil: 27

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a zanka » 19 Apr 2018, 09:22

Meni deluje programiranje, če povežem SWCLK, SWDIO in NRST tako kot sem to počel na AVR. Torej brez kakršnih koli uporov na strani naprave, kaj ima uporabljen ST-Link kot programator pa lahko pogledaš v njegovo shemo.

Ali je pri tem RST potreben povezave, nisem prepričan.
Uporabniški avatar
zanka
 
Prispevkov: 1796
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a s54mtb » 19 Apr 2018, 09:31

SWD je le shift register, ki omogoča (ob prepoznavi utreznega vzorca) dostop do AHB. Lahko da do tam ne prideš, če je CPU npr. v sleep, bootloaderju, ... takrat moraš SWD uporabljat tako, da je reset vsaj ob priklopu aktiven (connect "under reset") - dokler ne sprejme komande halt. Za "prazen" mikrokontroler pa ne rabiš drugega kot data in clk.
s54mtb
 
Prispevkov: 8031
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1032 krat
Prejel zahvalo: 2560 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 54

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a xfce » 19 Apr 2018, 10:39

s54mtb je napisal/-a:SWD je le shift register, ki omogoča (ob prepoznavi utreznega vzorca) dostop do AHB. Lahko da do tam ne prideš, če je CPU npr. v sleep, bootloaderju, ... takrat moraš SWD uporabljat tako, da je reset vsaj ob priklopu aktiven (connect "under reset") - dokler ne sprejme komande halt. Za "prazen" mikrokontroler pa ne rabiš drugega kot data in clk.


Super, hvala. Torej, ker imam sleep mode, je obvezen reset.

Ti, zanima me še kako je v tej situaciji, kadar SWDIO in SWDCLK uporabljaš v SW za drug namen. Torej, jasno mi je, da ne moreš delati debugiranja, ampak, če programator stisne (in ima povezan) reset pin, lahko dostopa do SWD (če ni prevelikega bremena na pinih) in normalno sprogramira?
xfce
 
Prispevkov: 542
Pridružen: 14 Feb 2015, 12:38
Kraj: Poljane nad Škofjo loko
Zahvalil se je: 69 krat
Prejel zahvalo: 136 krat
Uporabnika povabil: S52O
Število neizkoriščenih povabil: 27

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a s54mtb » 19 Apr 2018, 13:04

Ja, saj SWD pini imajo po resetu funkcijo swd. V npr. GPIO jih spremeni tvoja koda. Če se ne izvede (reset in debug-halt pred jmp na main()) ostanejo v SWD konfiguraciji.
s54mtb
 
Prispevkov: 8031
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1032 krat
Prejel zahvalo: 2560 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 54

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a zanka » 19 Apr 2018, 13:22

Ampak, če koda v debug načinu naleti na rekonfiguracijo SWD pinov v GPIO, potem pomoje debug ne deluje več.
Uporabniški avatar
zanka
 
Prispevkov: 1796
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a s54mtb » 19 Apr 2018, 13:41

To pa zagotovo. Ne moreš imeti isti pin za dve funkciji hkrati. Dodati moraš pogojno prevajanje (npr. #define DEBUG_BREZ_GPIO) in potem v tistem delu, kjer imaš konfig za GPIO preskočiš ta del kode....
s54mtb
 
Prispevkov: 8031
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1032 krat
Prejel zahvalo: 2560 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 54

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a zanka » 24 Maj 2018, 11:38

Zdajle sem poskusil. S samo CLK in DIO brez RST se mi OCD ne zažene. Torej so za programiranje potrebne 3 žice.

Mimogrede, na STM32F0 se nogici, ki sta namenjeni zunanjemu kristalu: PF0 in PF1, nastavita kot GPIO tako kot vse ostale. Paziti je potrebno, da je HSEON izklopljen (kar po resetu je)

Koda: Izberi vse
  RCC->AHBENR |= RCC_AHBENR_GPIOFEN;

  GPIOF->MODER &= ~GPIO_MODER_MODER1;
  GPIOF->MODER |= GPIO_MODER_MODER1_0;
Uporabniški avatar
zanka
 
Prispevkov: 1796
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 154 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 29

Re: Serial Wire Debug (SWD), kako uporabljati.

OdgovorNapisal/-a tilz0R » 24 Maj 2018, 14:57

SWCLK in SWDIO sta dovolj za programiranje core-a. To je polno podprto v STM32F0 družini.
SWO ni podprt pri Cortex-M0, tako da je za F0 to brezpredmetno.

Reset pin potrebuješ če:
- Misliš uporabljati Low-Power načine in hočeš programirati MCU medtem ko je le-ta v LP načinu
- Če boš SWCLK/SWDIO pina kakorkoli spremenil v GPIO konfiguraciji in jih imel za kaj drugega
- Če se hočeš povezat na MCU z "connect under reset".
- Če bi rad overclock MCU-ja naredil in potem delal debug/program

Če boš v debugu in boš SWCLK in SWDIO pinom spremenil konfiguracijo, boš zaključil debug takoj.

V vednost: Kadar uporabljaš LP mode, spremeni default nastavitve SWD pinov, saj je poraba z vklopljenimi internimi pull-upi višja kot brez njih. To naredi seveda, kadar MCU ni v debugu (pri final SW verziji).
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1441
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 187 krat
Prejel zahvalo: 350 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255


Vrni se na Software

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 0 gostov

cron