SAMD21 Bootloader


... with a Raspberry Pi

One has to install OpenOCD on a Raspberry Pi (RaspbianBuster):
Update and install some tools:

$ sudo apt-get update
§ sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev htop

Download OpenOCD from http://openocd.zylin.com/#/admin/projects/openocd:

$ git clone http://openocd.zylin.com/openocd

Compile:

$ cd openocd-code
$ ./bootstrap
$ ./configure --enable-sysfsgpio --enable-bcm2835gpio
$ make
$ sudo make install

List all Interfaces:

$ cd /usr/local/share/openocd/scripts/interface
$ ls

Make a Folder and Download the Bootloader:

$ cd ~
$ mkdir bootloader
$ cd bootloader
$ wget https://github.com/arduino/ArduinoCore-samd/raw/master/bootloaders/zero/samd21_sam_ba.bin

Make a Configuration File:

$ nano openocd.cfg

and add:

source [find interface/raspberrypi2-native.cfg]
transport select swd
   
set CHIPNAME at91samd21g18
source [find target/at91samdXX.cfg]

reset_config  srst_nogate

adapter srst delay 400
adapter srst pulse_width 100

bcm2835gpio_swd_nums 25 24
bcm2835gpio_trst_num 7
bcm2835gpio_srst_num 18
 
init
targets
reset halt

t91samd bootloader 0
program samd21_sam_ba.bin verify
at91samd bootloader 8192
reset
shutdown

The GPIO pin numbers can be set here or in the raspberrypi2-native.cfg file. To do so change in:

$ sudo nano /usr/local/share/openocd/scripts/interface/raspberrypi2-native.cfg

the following lines:

bcm2835gpio_swd_nums 25 24
bcm2835gpio_trst_num 7
bcm2835gpio_srst_num 18

Connecting the SAMD21 Board:

 RasPi-GPIO  SAMD21
    18        Reset
    24        SWD IO
    25        SWD CLK
    GND       GND
    3V3       3V3

UNDER CONSTRUCTION !

and Adalink ARM CPU Tool

Download the software from:
https://www.segger.com/downloads/jlink/

Install OpenOCP


Bootloader

Here one finds some SAMD21 bootloader:

Arduino Zero Bootloader

Arduino MKR ZERO

Seeeduino XIAO Bootloader
This bootloader bever worked for me!


Acknowledge