A few months ago I went to upgrade my OpenPilot CC3D board an something went amiss and I ended up trashing the bootloader. I didn’t have a SWD dongle to reprogram it with so its been collecting dust. I just purchased a v3 bus blaster for a different project I’m working on and it has a SWD firmware so I thought I’d try and recover the CC3D. Below are the steps I used.
Download and install the latest OpenOCD
cd openocd/
./bootstrap
./configure --prefix=/usr
make
sudo make install
Re-flash the Bus Blaster v3 for KT-link buffer
The instructions below came from here
cd busblaster/synthesis
openocd -f board/dp_busblaster_v3.cfg -c "adapter_khz 1000; init; svf system.svf; shutdown"
Getting/Building the bootloader
Now you need to get a bootloader to flash into the CC3D. You might be able to download bl_coptercontrol.hex but I’ve already got the OpenPilot development environment installed so I just built it using
If you don’t have the dev environment setup there are build instructions.
Here is the file I used bl_coptercontrol.hex but the regular disclaimers apply, if this file damages or bricks your CC3D I am not responsible.
OpenOCD config file
You need create a flashing script “cc3d-swd.cfg” to pass to OpenOCD.
transport select swd
source [find target/stm32f1x.cfg]
proc program_device () {
reset init
sleep 50
flash probe 0
sleep 50
flash protect 0 0 last off
sleep 50
flash write_image erase unlock "path_to_hex_file/bl_coptercontrol.hex"
sleep 50
reset run
}
init
program_device ()
exit
Obiously replace “path_to_hex_file” to where you built or downloaded bl_coptercontrol.hex
Connect the bus blaster to the CC3d
I got the cable connections from here.
┊
GND ──────────────────────── GND
┊
TCK ──────────────────────── SWCK
┊
TMS ──────────────────────── SWDAT
┊
Finally reflashing the CC3D bootloader
Hi,
Nice work; I also like the BusBlaster (great for flash/debug), but I’m pretty sure you could have saved you some efforts using the serial bootloader of the STM32F103; I don’t think you can brick that one, it’s integrated in the chip.
> Bridge the BOOT0 pads
> Connect a USB-Serial adapter to the Main port
> Flash your bootloader using a tool like stm32flash:
stm32flash -w bl_coptercontrol.bin -v -g 0x0 /dev/ttyUSB0
> Remove the bridge, and you should be good to go.
At least, that’s the easiest way to flash the OpenPilot/TauLabs bootloader on a blank chip.
-RedoX