Tuesday, December 14, 2010

building arm toolchain, compiling, and loading into flash on stm32 discovery

you need macports for this to work

to build the arm toolchain go here:
https://github.com/esden/summon-arm-toolchain

in a terminal do:
git clone https://github.com/esden/summon-arm-toolchain.git

edit summon-arm-toolchain
set SUDO=sudo
set LIBSTM32_EN=1
save and go back to terminal

follow the instructions in the README

this will take a long time and you have to type in your password a few times

add ~/sat/bin to PATH in your .bash_profile

download this: http://www.robsons.org.uk/blinky.zip

unzip it, edit Makefile and everywhere it says arm-elf change it to arm-none-eabi
make
now run openocd and telnet localhost 4444

run these commands in telnet:
halt
stm32x unlock
reset
halt
flash erase_sector 0 0 last
flash write_bank 0 ~/Downloads/blinky/blinky.bin 0
reset init

the green led should blink, the blue led should blink twice as fast, and when you hold the usr button the green led should stop blinking.

hooray!

OpenOCD on OS X using flyswatter and stm32 discovery

Making OpenOCD talk to my flyswatter and stm32 discovery using jtag was kind of a pain. I'm going to write up some instructions on how i made it work in case someone else needs it in the future (or i have to do it again).

You need:
a breadboard
an stm32 discovery
a tin can tools flyswatter
OpenOCD from git (0.4.0 doesn't work)
most recent commit on version i'm using is on 12/10/2010, cbf48bed6a26279900ad00e6d6462a7f29676175
libftdi (0.18)
libusb-compat

Instructions:
0) i removed solder bridges 11, 16, 17, and 18 but i'm not sure if that's necessary. i wasn't sure what the ST Link does when you power the board so i just disconnected sb11, sb17, and sb18. i shouldn't have removed sb16 so now i have to put a 510 ohm resistor between BOOT and ground.

1) libusb-compat:
./configure
make
sudo make install

2) libftdi:
./configure
make
sudo make install

3) edit openocd/tcl/target/stm32.cfg
after the line that says:
set _BSTAPID5 0x06418041
add a new line that says:
set _BSTAPID6 0x06420041
change the line that says:
-expected-id $_BSTAPID4 -expected-id $_BSTAPID5
to:
-expected-id $_BSTAPID4 -expected-id $_BSTAPID5 -expected-id $_BSTAPID6

4) OpenOCD:
./bootstrap
./autoreconf -i -f
./configure --enable-maintainer-mode --enable-ft2232_libftdi --enable-usbprog
make
sudo make install

5) create a file called openocd.cfg with these contents:

#daemon configuration
telnet_port 4444
gdb_port 3333

source [find interface/flyswatter.cfg]
set WORKAREASIZE 0x1000
source [find target/stm32.cfg]

#i'm not sure if setting WORKAREASIZE is essential, but the
#default is 16k (0x4000) which is more ram than the stm32
#discovery has so i lowered it

6) to run (in same directory as openocd.cfg):
openocd

7) to telnet in:
telnet localhost 4444

8) to probe flash:
flash probe 0


i haven't changed what's on the flash yet but i'll update once i get gcc compiled and have something to flash it with.

here's a picture of my flyswatter setup/breadboard/power supply


here's a picture of my crazy jtag octopus connection