The Acme Systems shipping office will be closed for holidays from 14 august to 22 august

Yarm technical documentation

Atmel SAML21 ASF compiling and FLASH programming on Linux

This article illustrates how to install the GNU Toolchain for SAML21, install the ASF libraries, compile a default example and write on the SAML21 FLASH under Linux

Tested with Ubuntu Linux 16.04.02

Install the gnu-arm-none-eabi toolchain

sudo apt-get install gnu-arm-none-eabi

Install the Microchip ASF library

Download the Microchip Advanced Software Framework from the following link to your home directory:

and uncopress it:


Compile a blinking led example

Wire a led to the Yadm SDK as shown below:

Move inside the led-toggle default example:

cd xdk-asf-3.39.0/sam0/applications/led_toggle

Edit the file led_toggle.c and change all the LED_0_PIN strings with string PIN_PA16:

Move inside the make directory:

cd saml21_xplained_pro_b/gcc

the type:


The result will be something like this:

MKDIR   common/utils/interrupt/
CC      common/utils/interrupt/interrupt_sam_nvic.o
MKDIR   sam0/applications/led_toggle/
CC      sam0/applications/led_toggle/led_toggle.o
MKDIR   sam0/boards/saml21_xplained_pro_b/
CC      sam0/boards/saml21_xplained_pro_b/board_init.o
MKDIR   sam0/drivers/port/
CC      sam0/drivers/port/port.o
MKDIR   sam0/drivers/system/clock/clock_saml21/
CC      sam0/drivers/system/clock/clock_saml21/clock.o
CC      sam0/drivers/system/clock/clock_saml21/gclk.o
MKDIR   sam0/drivers/system/interrupt/
CC      sam0/drivers/system/interrupt/system_interrupt.o
MKDIR   sam0/drivers/system/pinmux/
CC      sam0/drivers/system/pinmux/pinmux.o
CC      sam0/drivers/system/system.o
MKDIR   sam0/utils/cmsis/saml21/source/gcc/
CC      sam0/utils/cmsis/saml21/source/gcc/startup_saml21.o
CC      sam0/utils/cmsis/saml21/source/system_saml21.o
MKDIR   sam0/utils/syscalls/gcc/
CC      sam0/utils/syscalls/gcc/syscalls.o
LN      led_toggle_flash.elf
SIZE    led_toggle_flash.elf
led_toggle_flash.elf  :
section              size         addr
.text               0x85c          0x0
.relocate             0x4   0x20000000
.lpram                0x0   0x30000000
.bss                 0x3c   0x20000004
.stack             0x2000   0x20000040
.ARM.attributes      0x28          0x0
.comment             0x59          0x0
.debug_info        0xd501          0x0
.debug_abbrev      0x1a70          0x0
.debug_aranges      0x228          0x0
.debug_ranges       0x1b0          0x0
.debug_macro      0x1a4a0          0x0
.debug_line        0x5a6d          0x0
.debug_str        0x98505          0x0
.debug_frame        0x4d4          0x0
.debug_loc         0x17f0          0x0
Total             0xcbd3c

   text    data     bss     dec     hex filename
  0x85c     0x4  0x203c   10396    289c led_toggle_flash.elf
OBJDUMP led_toggle_flash.lss
NM      led_toggle_flash.sym
OBJCOPY led_toggle_flash.hex
OBJCOPY led_toggle_flash.bin

The file led_toggle_flash.bin is the binary file to save inside the Yarm CPU using the edbg programmer as described below.

Install the Microchip EDBG programmer

We will use the Atmel-ICE to transfer our code on the Yarm module.

Clone in your home directory the EDBG programmer git repository by typing:

git clone
cd edbg
sudo cp 90-atmel-edbg.rules /etc/udev/rules.d/
sudo udevadm control --reload

Install the libudev library

sudo apt-get install libudev-dev

launch make:


Using the Microchip EDBG programmer

Write the led_toggle example by typing:

cp ../xdk-asf-3.39.0/sam0/applications/led_toggle/saml21_xplained_pro_b/gcc/led_toggle_flash.bin .
./edbg -b -p -v -f led_toggle_flash.bin -t atmel_cm0p


Many thanks to Antonio Galea his contribute to this article

Sergio Tanzilli
System designer, webmaster and Acme Systems co-founder

Personal email:
Github repositories: and
Telegram group dedicated to the Acme Systems boards:

Yarm technical documentation