Versaloon fw + OpenOCD STM32VLDISCOVERY-laudalla

[size=150]Versaloon firmwaren asennus sekä yhteensopivan OpenOCD:n kääntäminen STM32VL Discovery-laudalle[/size]

Kirjoitan tähän pikaisen ohjeen askelista, joiden avulla sain avoimen lähdekoodin Versaloon-projektin firmwaren sekä sen kanssa yhteen toimivan OpenOCD:n asennettua itselleni toimimaan STM32VL Discovery evaluation-alustan kanssa.

Versaloon on täysin avoin monitoiminen alusta esim JTAG-, SWD- ja SPI-väyläisiin ohjelmointi ja vianhakutehtäviin. Projekti sisältää mm. Kicad:lla toteutettuja kytkentöjä/piirilevyjä muutaman erilaisen adapterin tekemiseen, sekä kyseisillä adaptereilla sijaitsevalle mikrokontrollerille tarvittavat ohjelmiston (firmwaren) lähdekoodit.

[size=150]Miksi Versaloon?[/size]
Joskus kesällä/syksyllä 2011 kun sain käsiini ensimmäisen STM32VLDISCOVERY-lautani, en ollut vielä tietoinen tai törmännyt avoimen lähdekoodin stlink-ohjelmistoprojektiin (https://github.com/texane/stlink/), ja kyseinen projekti oli vielä kohtuu uusi ja mahdollisesti keskeneräinenkin. Sen sijaan googlailu hakusanoilla tyyliin “stm32vldiscovery linux openocd” tuotti kasan tuloksia, joissa kyseisen laudan st-link-osa oli korvattu avoimen lähdekoodin Versaloon-projektin firmwarella, ja tuon avulla lautaa käytettiin OpenOCD:n kera. Tästä innostuneena itsekin fläshäsin Versaloon-firmiksen omaan lautaani st-linkin tilalle, mutta en tuolloin kuitenkaan vielä saanut koko hommaa pelaamaan.

Nyt vihdoin otin projektiksi saattaa kyseisen laudan jollakin tapaa toimintaan ilman erillistä debuggaus-adapteria (ulkoinen ST-Link/V1 ollut tähän saakka käytössä). Koska st-link firmiksen palauttaminen ei onnistu (suljettu lähdekoodi, firmistä ei ST:ltä saatavilla, ja laitteet joissa kyseinen firmis on, ovat lukusuojattuja), oli seuraava vaihtoehto saattaa kyseinen Versaloon-versio oikeasti toimintaan. Alunperin ongelmana tässä oli se, että en saanut oikeaa versioita joko firmiksestä tai OpenOCD:stä pätsättynä toimimaan, jotta koko ketju olisi toiminut.

[size=150]Versaloon-firmiksen asennus STM32VL Discovery laudan st-link osaan[/size]
[size=120]HUOM: Jos ylikirjoitat alkuperäisen ST-link ohjelman, ei sen palauttaminen ole enää mahdollista, johtuen yllämainituista syistä![/size] (Jostain venäläiseltä foorumilta löytyy joku haksattu versio joka on kai sniffailtu ja salaus purettu päivitysprosessin aikana päivitysohjelmasta, mutta en ehkä hirveästi luottaisi moiseen…)

[size=130]Versaloon firmwaren kääntäminen[/size]
Alkuvaatimukset:

  • subversion versionhallintaohjelma
  • toimiva toolchain, jolla onnistuu softan kääntäminen ARM Cortex-M3 prossuille

Itse käytin ST-Link/V1 laitetta sekä texanen stlink softapaketin st-flash-työkalua. Itselläni käyttisympäristönä on Funtoo Linux, ohjeet ovat siis Linuxille, mutta sovellettavissa myös muille ympäristöille, olettaen että alkuvaatimukset täyttyvät.

Ja itse asiaan:

Lataa Versaloon-projektin Subversion-reposta tarvittava lähdekoodi:

svn co  http://vsprog.googlecode.com/svn/trunk ~/versaloon.svn

(Kirjoitushetkellä itselläni se oli r1505, näkee esim “svn info” tai “svn log | less” komennoilla, kun olet kyseisessä ~/versaloon.svn hakemistossa)

Seuraavaksi on muutettava softa käännettäväksi STM32VL Discovery laudalle sopivaksi, joten muokataan makefile-tiedostosta HW_BOARD-muuttujan arvoksi HW_BOARD = STM32VL_Discovery:

cd ~/versaloon.svn/dongle/firmware/Projects/Versaloon/GCC/ nano makefile

Seuraavaksi käännetään firmis:

make

Toivottavasti kääntö sujui virheittä, itselläni onnistui hyvin. Jos se onnistui, pitäisi kyseiseen GCC-hakemistoon olla syntynyt muutama tiedosto seuraavasti:

-rwxr-xr-x 1 masa koti 37656 2014-02-26 12:51 Versaloon_GCC-STM32VL_Discovery-0x0000.bin -rwxr-xr-x 1 masa koti 438187 2014-02-26 12:51 Versaloon_GCC-STM32VL_Discovery-0x0000.elf -rw-r--r-- 1 masa koti 105970 2014-02-26 12:51 Versaloon_GCC-STM32VL_Discovery-0x0000.hex -rw-r--r-- 1 masa koti 231797 2014-02-26 12:51 Versaloon_GCC-STM32VL_Discovery-0x0000.map

[size=130]Versaloon firmiksen fläshäys laudalle[/size]
Alkuvaatimukset:

  • Jokin erillinen ohjelmointi/debuggauslaite, joka tukee SWD-väyläistä liityntää
  • Kyseisen laitteen kanssa toimiva ohjelmointisofta

Seuraavaksi pitää kyseinen firmis ladata laudalle. Ohessa ohjeet miten se onnistuu erillisellä ST-Link V1 laitteella (esim. toisella STM32VL Discovery laudalla, jossa vielä st-link firmis sisällä, tai ihan varsinaisella ST-Link/V1 laitteella), sekä texanen stlink ohjelmistolla:
Alkuvaatimukset, jos käytetään texanen stlink ohjelmistoa:

  • git versionhallintaohjelma
  • toimiva kääntöympäristö käyttöjärjestelmällesi

Lataa texanen stlink-ohjelmiston lähdekoodit:

git clone https://github.com/texane/stlink.git ~/stlink.git

Käännä stlink-ohjelmisto:

cd ~/stlink.git ./autogen.sh ./configure make

Aseta udev-säännöt (mikäli käytössä ST-Link/V1), ks. texanen stlink:n README:

  • Lisää rivi
    options usb-storage quirks=483:3744:i
    tiedostoon /etc/modprobe.conf tai /etc/modprobe.d hakemiston alle esim tiedostoon stlink_v1.conf
  • Uudelleenlataa usb-storage kernel-moduuli:
modprobe -r usb-storage && modprobe usb-storage

Seuraavaksi tulisi kytkeytyä ohjelmointilaitteellasi STM32VL Discovery laudan st-link osan kontrolleriin, käyttäen SWD-liitäntää. Valitettavasti kyseisiä signaaleja ei ole saatavilla reunan headereilla. Tarvittavat kaksi signaalia ovat laudan pohjasta löytyvät SB6 ja SB10 solder bridget, bridgen se puoli joka ei ole CN3:n puolella, vaan kontrollerin puolella. Voit joko juottaa pienet johtimet niihin, tai jos omaat riittävän vakaat kädet ja mahdollisesti kolmannen käden apuna, voit myös käsin pitää paria hyppylankaa solder bridgejen päällä ohjelmoinnin ajan, joka onneksi vie vain jokusen sekunnin. Tämän lisäksi tulee olla ohjelmointilaitteen GND vielä kytkettynä laudan GND:iin, mutta se onnistuu helpommin, kun GND on headereilta kytkettävissä.

Tarvittavat kolme signaalia ovat siis:
signaali | ARM/ST-Link JTAG (20-pin) pinni nro. | STM32VL Discovery laudan signaali
GND | 18 | GND (jokin reunan headereiden GND-pinni)
SWCLK | 9 | SB6 (ei CN3:n puoli)
SWIO | 7 | SB10 (ei CN3:n puoli)

Kun tämä kytkentä on tehty, voit fläshätä versaloon-firmiksen sisään st-flash työkalulla:

cd ~/stlink.git ./st-flash write ~/versaloon.svn/dongle/firmware/Projects/Versaloon/GCC/Versaloon_GCC-STM32VL_Discovery-0x0000.bin 0x8000000

Valmis! Tämän jälkeen voit irrottaa erillisen ohjelmointilaitteen, sekä irroita ja kytke discovery lautasi uudelleen kiinni koneeseen, jotta se tunnistuu uusilla asetuksillaan.

[size=150]OpenOCD:n asennus[/size]
Kirjoitushetkellä OpenOCD:n julkaisuversiossa ei valitetavasti ole vielä tukea Versaloon:lle SWD-yhteyttä käytettäessä (SWD eli tuo kahden signaalin debug-liitäntä, jolla tuo debuggeriosa kytkeytyy varsinaiseen demomikrokontrolleriin CN3-liittimen kahden jumpperin kautta). Tämä versaloon-SWD-tuki löytyy tällä hetkellä OpenOCD-projektin Gerrit code review-portaalista pätsinä: openocd.zylin.com/#/c/1952

Elikkä OpenOCD:n asennus tuon pätsin kera (huom: muuta configuren parametreja tarvitsemiesi muiden laitteistotukien mukaan):
(–disable-internal-jimtcl:n käyttö tarkoittaa, että sinulla pitää olla käyttiksesi puolesta asennettuna jimtcl, itselläni on versio 0.74, joka ainakin vaikuttaisi kelpaavan)

mkdir ~/openocd_zylin.git cd ~/openocd_zylin.git git init git fetch http://openocd.zylin.com/openocd refs/changes/52/1952/1 && git checkout FETCH_HEAD ./bootstrap ./configure --enable-buspirate --enable-ioutil --disable-werror --disable-internal-jimtcl --enable-opendous --enable-usbprog --enable-jlink --enable-rlink --enable-vsllink --enable-arm-jtag-ew --enable-ftdi --enable-stlink make sudo make install

Tämän jälkeen OpenOCD:n pitäisi nyt toimia STM32VL Discovery lautasi kanssa, jossa pyörii ST-Link firmiksen sijaan Versaloon firmis debugadapteriosassa. Ohessa vielä OpenOCD:n konffi, jolla se itselläni toimii:

[code]# Interface (using versaloon)
interface vsllink
transport select swd
#swd_mode 2
#swd_delay 2

This is a board with an STM32F100RBT6

Use 2 kB instead of the default 16 kB

set WORKAREASIZE 0x800
source [find target/stm32f1x.cfg][/code]

[size=150]Loppusanat[/size]
Oheinen ohje on enemmänkin muistilistana itselleni, jos ikinä haluan tehdä kyseista hommaa uudelleen toiselle samanmoiselle laudalle, tai jos joku muu ei jostain syystä pidä st-link firmiksestä vaan haluaa avoimen lähdekoodin (ja täten siis itse muokattavan) firmiksen tuohon debuggeriosaan.

Toisaalta taitaapa tuo discoveryn debuggeri Versaloonin kera toimia myös muiden kuin STM32-kontrollerien kanssa, toisin kuin ST-Link, joka on käsittääkseni lukittu ST:n tuotteille. En ole tätä vielä päässyt varmistamaan, mutta olettaisin, että kunhan kohdelaite tukee SWD-väyläistä debuggausta niin luulisi toimivan.

[size=150]Versiohistoria[/size]
2014-02-27 09:22 Ensimmäinen versio