Archive for STM32F4

Black Magic

Jeg kom over en genial liten JTAG programmerer/debugger for bl.a. STM32F4 som heter BlackMagic. Først og fremst er både hardware og firmware open source, men man kan også kjøpe den ferdig bygd for en ganske rimelig penge. Det som er så genialt med denne i forhold til de fleste andre er at den ikke bare er en JTAG boks, men også en hardware GDB server. Man slipper med andre ord OpenOCD og liknende. Bare å plugge inn i USB porten og fyre opp debuggeren.

Men så kommer det som er ekstra genialt. Man kan bytte ut ST-Link firmwaren på STM32F4Discovery med Black Magic firmware. På Discovery-kortet sitter det som kjent en STM32F4 kontroller, men det er også en liten STM32F103 som kun kjører ST-Link (ST sitt JTAG/SWD grensesnitt). Denne kontrolleren er tilfeldigvis akkurat den samme som BlackMagic bruker. Og skulle du ikke sett om noen har laget en tilpasning slik at det bare er å kompilere med en annen paremeter. Det må litt lodding og fomling til, men når det virker er det overlegent.

Her er link til Black Magic

Og her til siden som beskriver hvordan man flasher Discovery.

Beskrivelsen er ikke helt patent. De har kuttet noen hjørner og tatt noe for gitt, så hvis du har lyst til å gjøre dette så gi meg en lyd så skal jeg fortelle hvordan jeg fikk det til.

Det som er viktig å huske er at det er ingen vei tilbake. Den orginale firmwaren er borte for alltid, og ST lar deg ikke laste den ned.

Motoren snurrer

Motoren snurrer. Riktignok har jeg ikke ennå implementert detektering av nullgjennomganger, så feltet roterer bare med et fast turtall, og så håper jeg at motoren henger med. Men, turtallet lar seg justere, og strømmen lar seg justere, så det er i hvertfall ganske mye funksjonalitet som er på plass. Det er mye på elektronikken som virker også. Så langt er jeg veldig fornøyd.

BLDC motorkontroller

Av og til trenger livet et prosjekt der man kan sitte ved kjøkkenbordet, eller i stua å pusle. Derfor dro jeg en av mine gamle ideer opp av hatten. Dette er jo egentlig ikke noe nyskapende i det hele tatt. Fartskontrollere for børsteløse motorer finnes det jo 13 av på dusinet, og mange lager seg egne med større eller mindre hell. Så hvorfor gjør jeg dette.

  1. Jeg har lyst til å lære meg ARM kotrollere (STM32F4)
  2. Jeg har lyst til å lære meg Chibios (www.chibios.org)
  3. Jeg vil ha en motorkontroller som kan integreres med annen funksjonalitet, og som kan snakke skikkelige grensesnitt
  4. Også er det sånn passe vrient, men ikke for vanskelig.

Jeg har allerede laget en PCB for å plugge inn på et STM32F4Discovery kort. Denne PCB-en har drivere og all nødvendig elektronikk for å bruke Discovery kortet som en BLDC. Det er ikke for praktisk bruk, kun for utvikling, da det er kjempestort. Jeg har ikke bestykket kortet enda, men jeg har allerede funnet en rekke feil i designet. Ingen showstoppere. Alle feilene kan fikses med en skalpell, en loddebolt og litt tynn ledning.

Hovedtrøkket har ligget på utvikling av firmware. Her har jeg laget et system som kan ta imot kommandoer fra USB og gjøre forskjellige ting med det. USB biten ble riktig smukk, og kan enkelt gjenbrukes. Jeg har kommet ganske langt på BLDC funksjonen. Men Chibios i bunn, så er det masse flotte drivere for hardwaren på chippen, så applikasjonskoden blir veldig liten. Jeg har nok funksjon til å teste litt med motor allerede, og komponentene kommer i posten hvert øyeblikk.

Skjema og utlegg har jeg ikke publisert enda, men firmware ligger her.

https://github.com/kjellhar/chibi-bldc

Jeg har ikke lagt inn Chibios der, så den må lastes ned separat.

OpenESC

Tenkte bare å henlede oppmerksomheten på et ganske interessant prosjekt som startet for noen få uker siden.

https://groups.google.com/forum/?fromgroups#!forum/openesc

Det er ikke akkurat overskudd av fartsregulatorer til børsteløse motorer som snakker serieinterface (I2C, CAN, SPI o.l). Dette har en fyr ved navn Jason lyst til å gjøre noe med. Første prototype er rett rundt hjørnet. Bare å hive seg på hvis man er interessert i å bidra.

Så tester vi litt.

Aller først er det greit å teste at systemet fungerer fra kommandolinjen. Last ned mitt lille Blink-LED-program, så har du noe som skal virke (på STM32F4Discovery vel og merke).

  1. Last ned ch.elf
  2. Plugg inn STM32F4Discovery kortet med USB mini kontakten (Den største). Dette er USB kontakten til ST-Link delen på kortet.
  3. Start to terminalvinduer.
  4. I den ene terminalen:
    > st-util
  5. Det skal da dukke opp noe slikt som:2012-06-19T23:23:25 INFO src/stlink-usb.c: — exit_dfu_mode
    2012-06-19T23:23:25 INFO src/stlink-common.c: Loading device parameters….
    2012-06-19T23:23:25 INFO src/stlink-common.c: Device connected is: F4 device, id 0x10016413
    2012-06-19T23:23:25 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
    Chip ID is 00000413, Core ID is  2ba01477.
    KARL – should read back as 0x03, not 60 02 00 00
    init watchpoints
    Listening at *:4242…
  6. I det andre terminalvinduet
    > arm-none-eabi-gdb
    Prompten vil da endre seg til (gdb)
  7. Koble debuggeren til gdb-serveren (st-util)
    (gdb)  target extended-remote *:4242
    Remote debugging using :4242
    0x08000340 in ?? ()
  8. Reset debuggeren
    (gdb) monitor reset_halt
  9. Last inn EFL fila
    (gdb) load ch.elf
    Loading section startup, size 0x188 lma 0x8000000
    Loading section .text, size 0x11d8 lma 0x8000190
    Start address 0x8000190, load size 4960
    Transfer rate: 4 KB/sec, 2480 bytes/write.
  10. Start programmet
    (gdb) run
    Svar ja på spørsmål.
  11. Nå skal den oransje, grønne og blå lysdioden blinke.

STM32 utvikling på Mac (og forsåvidt Linux)

Da prøver jeg meg på å beskrive oppsettet mitt for å skrive kode og debugge STM32F4 vha en Mac. Det kan hende jeg har glemt noe, eller at jeg allerede hadde installert noen av avhengighetene, men da er det fint om dere sier i fra, så kan jeg rette opp.

Denne beskrivelsen vil også fungere på Linux, med den lille forskjellen at systemet for å installere pakker heter noe annet. Alle stedene jeg bruker kommandoen «port», så må den byttes ut med passende kommando på ditt system (f.eks. «apt-get»). Og bare så det er nevnt, hvis du ikke klarer å bruke terminal har du tapt allerede før start, så fyr det opp med en gang. Det er forresten også greit å sjekke om pakkene allerede er installert før man kjører en «port install … »

  1. ** Kun Mac ** Det aller første som må gjøres installere XCode fra apple. Gå inn i App store og søk. Det tar laaang tid.
  2. ** Kun Mac ** Det neste er å legge inn Macports. Uten den blir dette en uvirkelig slitsom jobb.
  3. Installer GIT
    >  sudo port install git-core
  4. Installer autoconf
    >  sudo port install autoconf
  5. Installer libusb 1.0
    >  sudo port install libusb
    >  sudo port install libusb-devel
  6. Hent programvaren som snakker med ST-Link debuggeren
    >  git clone https://github.com/texane/stlink stlink.git
  7. Kompiler denne programvaren
    >  cd stlink.git
    >  ./autogen.sh
    >  ./configure
    >  make
    >  sudo make install
  8. Sjekk om applikasjonene «st-flash» og «st-util» finnes på systemet ditt.
  9. ** kun Linux **  Sett opp udev rules. Dette gør at du slipper å kjøre st-util som admin
    >  cp 49-stlinkv*.rules /etc/udev/rules.d/
    >  sudo udevadm control –reload-rules
  10. Last ned GNU ARM toolchain fra Yagarto (Mac og Win), eller Codesourcery Lite (Linux, velg bin fil).
  11. ** Kun Mac **  Installer Yagarto. Dette er i praksis å plassere den nedlastede filen der du ønsker å installere, og så dobbelklikke på den. Den pakker bare ut alle filene. Jeg har valgt å legge den på
    /Developer/yagarto
  12. ** Kun Linux ** Installer Codesourcery fra bin fil. Last ned «getting-started.pdf» og følg instruksjonene.
  13. Sett opp PATH variablen ved å editere et passende oppstart-script. På min Mac har jeg valgt å legge det til i .profile, så åpne denne med en vanlig teksteditor (f.eks emacs) og legg til
    export PATH=/Developer/yagarto/yagarto-4.6.2/bin:$PATH
    export PATH=/Developer/yagarto/yagarto-4.6.2/tools:$PATH
  14. Åpne en ny terminal og sjekk om du kan starte en haug med programmer som starter med «arm-none-eabi-«, f.eks «arm-none-eabi-gcc»
  15. Last ned Eclipse, eller mer presist, den som heter «Eclipse IDE for C/C++ Developers (includes Incubating components)»
  16. Legg Eclipse på et passende sted, f.eks i Application katalogen (kopier hele katalogen du lastet ned inn dit)
  17. Start Eclipse og gå inn på menyen «Help->Install new software …»  (Dette må du gjenta noen ganger da Eclipse insisterer på omstart hver gang du installerer noe)
  18. Installer GNU ARM Eclipse-plugin.
    Trykk på «Add» knappen og skriv inn
    Name:  GNU ARM Eclipse-plugin
    Location:  http://gnuarmeclipse.sourceforge.net/updates
    Velg så «CDT GNU Cross Development Tools» og trykk Next go Finish
  19. Installer Zylin debugger (Eclipse:  Help->Install new software …) ved å fylle inn dette
    Work with:  http://opensource.zylin.com/zylincdt
    Velg «Zylin Embedded CDT» og gå runden med Next, Finish og omstart av Eclipse.

Se så, da tror jeg faktisk alt  som skal installeres er inne. For Windows er installasjonen litt annerledes. Jeg skal ta den i en egen post senere.

Det neste på programmet er å teste at hele oppsettet virker, samt sette opp Eclipse slik at man kan debugge programmer.