ARM: debuginimas per SWD

Posted: 2015-01-07 in Darbeliai
Žymos:

Kadangi vienas naglas robotų konstruktorius prie mano įrašo apie flashinimą per USART užsiminė apie SWD (Serial Wire Debug) populiarėjimą ir privalumus, tai su savo kinišku devboarduku ir kinišku J-Link nusprendžiau šitą reikalą išbandyti. Kokie SWD privalumai? Ogi tokie:

  1. Flashinimas be jokių ten trumpiklių kaitaliojimų ir resetinimų.
  2. Pilnas debuginimas, kas yra labai naudinga.
  3. Tik keturi laideliai vietoj net ir sumažintos iki minimumo (8 elektrodų) JTAG kaladės.
  4. Suprojektuotos smulkios plokštės gali būti visai bet BOOT0 ir BOOT1 trumpiklių, o atitinkami elektrodai „įžeminti“ ir tiek. Sutaupoma vietos.

Taigi su šiais privalumais verta skaitytis.

Man buvo kažkiek abejonių, kaip OpenOCD veiks su J-Link ir SWD režimu. Pasirodė, kad viskas ten пашет и пляшет kuo sėkmingiausiai.

Pastabėlė: SWD yra ARM architektūros dalis, o ne konkrečiai STM32. Tad šis protokolas yra prieinamas visuose Cortex™ procesoriuose (A, R ir M).

Taigi pirmasis dalykas, ką padariau, tai išsiaiškinau kokios kojos yra SWD kojos. Mano devboardukai turi pilną 20 kojų JTAG kaladę, o ten SWD elektrodus atitinka va šie:

JTAG ir SWD elektrodai su J-Link zondu | Darau, blė

 

O štai kadangi projektuoju su procesoriuku gan smulkią plokštę, tai ir prireikė galvoti, kaip aš ją programuosiu: per bootloaderį ar per SWD. SWD pasirodė žymiai parankiau, juo labiau, kad JTAG zondą jau turiu.

Pirmas bandymas va toks. Kaip matote pagal paveiksliuką aukščiau, atsirinkau būtinus elektrodus. Įskaitant ir „žemę“, jos taip pat reikia. VCC elektrodas JTAG zondui parodo, kad plokštė veikia ir joje yra įtampą, o ne tiekia maitinimą plokštei. Tad maitinimo reikia atskirai.

Štai ir sukaišioti laidukai atitinkamai:

ARM plokštė su STM32F103C8T6 procesoriumi prijungta per SWD (Serial Wire Debug) | Darau, blė

Dabar reikia suderinti OpenOCD, kad galėtų veikti per SWD. Kiek rašo internetai, normaliai SWD veikia nuo 0.7.0 versijos.

Reikia susirasti interfaces/jlink.cfg failą. Jei naudojate Linux, jis gulės čia: /usr/local/share/openocd/scripts/interface/jlink.cfg. Aš pasidarau šito failo kopiją ir pervadinau į jlink-swd.cfg. Šio failo turinys labai paprastas, jame tėra viena eilutė:

interface jlink

Kad zondas veiktų naudodamas SWD protokolą, po šia eilute reikia įterpti dar vieną ir failo turinys atrodys šitaip:

interface jlink
transport select swd

Viskas, failą užsaugom ir paleidžiam OpenOCD:

s@x:~$ sudo openocd -f interface/jlink-swd.cfg -c 'gdb_memory_map enable' -c 'gdb_flash_program enable' -f target/stm32f1x.cfg
Open On-Chip Debugger 0.9.0-dev-00131-gbd0409a (2014-09-06-09:05)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : JLink SWD mode enabled
swd
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
Info : J-Link ARM V8 compiled May 27 2009 17:31:22
Info : J-Link caps 0xb9ff7bbf
Info : J-Link hw version 80000
Info : J-Link hw type J-Link
Info : J-Link max mem block 9752
Info : J-Link configuration
Info : USB-Address: 0xff
Info : Kickstart power on JTAG-pin 19: 0xffffffff
Info : Vref = 3.371 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 1 TRST = 1
Info : J-Link JTAG Interface ready
Info : clock speed 1000 kHz
Info : SWD IDCODE 0x1ba01477
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints

Atkreipkite dėmesį į eilutę: SWD IDCODE 0x1ba01477. Viskas tvarkoj, naudojamas SWD protokolas. Debuginimas per Eclipse veikia be jokių pakeitimų, nieko nereikia nurodyti. Jei ką, apie Eclipse derinimą jau rašiau.

Reklama

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s