I recently got a low-cost ARM Cortex M0 based ( Atmel SAMD21G18A ) board , a clone of the Robotdyn SAMD21 M0-mini board and wanted to make a custom Arduino IDE compatible bootloader using the Atmel Studio IDE – it has the GNU-ARM toolchain built in.
The user L-LED was not mounted, so the RX- and TX-LEDs could be used as bootloading progress indicators. It turned out that a fresh installed Arduino IDE is able to add GNU ARM Cortex M0+ toolchain for various Arduino boards that uses the Atmel SAMD21 microcontroller.
Steps involved to make the custom bootloader are these, assuming Windows 10 is used:
- Download the Arduino IDE v. 1.18.13 from here: Arduino IDE , do not use Microsoft App Store to inatall the Arduino IDE.!
- Install to the default installation path: C:\Program Files (x86)\Arduino
- Select Tools -> Board -> Boards Manager . Scroll down to find and install the Arduino package: Arduino SAMD Boards ( 32 bits ARM Cortex M0+ ). After installation , goto Tools -> Board and select the Arduino MKRZero board :
- Close the Arduino IDE. Bootloader source code for the bootloaders shown for the Arduino SAMD boards are found in the path: C:\Users\foo\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.8.9\bootloaders , replace foo with your Win 10 user name , and enable “show hidden files” in Explorer View. Contents of the bootloaders folder:
- Download and install the Atmel Studio IDE ( I used version 7.0.2397 ) from here: Atmel Studio download
- The zero folder holds the source files for the Arduino SAMD21 bootloaders. Copy the zero folder to: C:\Users\foo\Documents\Atmel Studio\7.0 , foo is your user name.
- Open the zero folder in C:\Users\foo\Documents\Atmel Studio\7.0 , foo is your user name. In the zero folder find and click the samd21_sam_ba.atsln Atmel Studio project file:
- Atmel Studio starts the project . Press F7 to build the bootloader:
- Some Warnings will show, but the “Build succeeded.” is OK. The bootloader .hex file from the compilation is found in the folder from step 7 and can be flashed to the SAMD21G18A microcontroller via the on-board SWD connector. At this point a customized Arduino compatible SAMD21 bootloader can be made by modifying the files in the Atmel Studio project to fulfill the actual needs. I made a bootloader version that used the RX- and TX-LEDs to indicate, that the bootloader is running. This version of the bootloader is here: SAMD21 custom bootloader. A small demo video is to be seen here: Youtube ldr
- To flash the bootloader, refer to the blog: Atmel Studio 7 and SAMD21 – ARM Cortex M0+
- A small demo program to blink the LEDs is shown here:The Segger Jlink EDU mini is used to flash the program directly to the SAMD21 board. In case the Segger software is not installed in the C:\Program Files (x86) folder, it can be downloaded and installed from: https://www.segger.com/downloads/jlink/ .After compiling the program below with Atmel Studio 7, an .bin output file is ready in the Debug folder of the Atmel Studio project./*
* SamD21_blink.c
*
* Created: 14-10-2020 12:27:43
* Author : Erik
* toogles the TX_LED and RX_LED
*/#include <samd21.h>void delay(int n)
{
int i;for (;n >0; n–)
{
for (i=0;i<100;i++)
__asm(“nop”);
}
}int main()
{
REG_PORT_DIR0 |= (1<<27); // TX_LED = PA27 as output
REG_PORT_DIR1 |= (1<<3); // RX_LED = PB03 as output
while (1)
{
REG_PORT_OUT0 &= ~(1<<27); // TX_LED = 0
REG_PORT_OUT1 |= (1<<3); // RX_LED = 1
delay(500);
REG_PORT_OUT0 |= (1<<27); // TX_LED = 1
REG_PORT_OUT1 &= ~(1<<3); // RX_LED = 0
delay(500);
}
} - At the Segger install folder , start the JFlashLite.exe program: