Koen has provided Zubax with a patch to the BlackMagicProbe firmware, which adds support for SAMC21, used on EPM/FluxGrip.
Before we can start we need to flash our probe with the latest firmware. We will be using the Dronecode Probe.
To patch the probe:
- Clone sources and compile:
git clone https://github.com/blackmagic-debug/blackmagic/
cd blackmagic
make PROBE_HOST=native #compiles into src subfolder
- Connect probe and Flash new firmware (see instructions):
lsusb #verify that new usb device detected
sudo dfu-util -d 1d50:6017 -s 0x08002000:leave -R -D src/blackmagic.bin #flashes
Now we should be able to use the probe to flash our EPM board. The pinout of the wires is as follows:
(This is from Pixhawk DS-009 standard)
After connecting this to the corresponding pins on the board, we can do the following:
- Make the following change in
epm/boards/arm/epm/board.cmake
:
- Flash the board:
west flash --runner blackmagicprobe
The last remaining issue: semihosting.
This is how it is done when using the Atmel debugger:
$workspace_path/scripts/openocd.cfg &
# record the PID of the background process
openocd_pid=$!
sleep 4s
# loads the image, runs the tests
arm-zephyr-eabi-gdb ./build/zephyr/zephyr.elf \
-batch \
-silent \
-ex "tar ext:3333" \
-ex "load" \
-ex "monitor arm semihosting enable" \
-ex "monitor arm semihosting_fileio enable" \
-ex "run"
kill $openocd_pid
As far as I understand, the BlackMagicProbe does not require running openocd
ourselves, so I’m doing the following steps:
west build -b epm ./verification/on_target/200_command_handler #this builds a test which uses semihosting
arm-zephyr-eabi-gdb-py ./build/zephyr/zephyr.elf #launch GDB
(gdb) target extended-remote /dev/ttyACM0
(gdb) attach 1
(gdb) load
(gdb) monitor arm semihosting enable #these don't seem to work
Target does not support this command.
(gdb) monitor arm semihosting_fileio enable #these don't seem to work
Target does not support this command.
(gdb) set remote system-call-allowed 1 #Pavel suggested this
If I then start running, it seems to “hang”, and if I check test_log.bin
(the file where semihosting should be writing its output): it’s empty.
After pressing CTRL+C
, I get the following: