Software Tools


SAM-BA (SAM Boot Assistant In-system Programmer) can run on:

SAM-BA is able to program flash media through the following communication links:

  • debug port (DBGU) whether they connect through RS232 or USB-serial links
  • USB device (aka USB gadget)
  • on Windows systems, JTAG SAM-ICE or J-Link

Description Binary FAQ applicable
SAM-BA 2 (SAM Boot Assistant) on SAM-BA In-system Programmer Use at91sama5d4x-ek as the board entry for sama5d4 Xplained (SAM-BA 2.14 & 2.15)
SAM-BA 3.1 (SAM Boot Assistant) on SAM-BA 3.1  
SAM-BA 3.2 (SAM Boot Assistant) SAM-BA 3.2 BETA4 SAM-BA 3.2 will soon be published on Microchip website

SAM-BA Linux uses the USB connection through CDC to communicate with the device.

Tested Linux distributions

This table indicates the distributions on which we have tested SAM-BA 2 (32bits or 64bits versions).

SAM-BA 3 is also tested on the most recent distributions.

Distribution version Kernel version
10.04 (64 bits) 2.6.32-33-generic (2.6.32-33.70)
10.10 (32 bits) (2.6.35-30.56)
10.10 (64 bits) (2.6.35-30.56)
11.04 (64 bits) 2.6.38-10-generic (2.6.38-10.25)
11.10 (64 bits) 3.0.0
12.04 (64 bits) 3.2.0
12.10 (64 bits) 3.5.0
13.04 (64 bits) 3.8.0
13.10 (64 bits) 3.12.4
14.04 (64 bits) 3.13
16.04 (64 bits) 4.4
17.04 (64 bits) 4.10
Distribution version Kernel version
6.0 (64 bits) 2.6.32-5-amd64
sid (64 bits) 4.0.0-2-amd64
Distribution version Kernel version
14 (32 bits)
14 (64 bits)
15 (64 bits)
Distribution version Kernel version
11.3 (64 bits)
11.4 (64 bits)

Pointing hand Note that SAM-BA will certainly work on other distributions as well. Checking following indications will give you clues on how to proceed.

Using SAM-BA 2

  • Give sam-ba execute permission if needed:
$ chmod +x sam-ba
$ chmod +x sam-ba_64


  • Add yourself into dialout group
Edit the /etc/group file and add your username at the end of the line starting with dialout.
Logout and login.


  • Connect the board


  • Launch the sam-ba variant that fits your distribution:
$ sam-ba
or for a 64 bit distribution:
$ sam-ba_64


Pointing hand On a 64 bit distribution, it's advised to replace the sam-ba binary by sam-ba_64 :

$ mv sam-ba sam-ba_32
$ ln -s sam-ba_64 sam-ba

Tips & tricks

How to check if my kernel version is compatible with sam-ba?

Connect the board to your computer and type:

$ dmesg
If you have something like that it's ok:
[227274.230016] usb 5-1: new full speed USB device using uhci_hcd and address 5
[227274.395739] cdc_acm 5-1:1.0: This device cannot do calls on its own. It is not a modem.
[227274.395768] cdc_acm 5-1:1.0: ttyACM0: USB ACM device
If you have no log about cdc_acm driver, your kernel may not be up to date.

My kernel version is 2.6.37 or 2.6.38 and I have no ttyACMx node.

This kernel version may contains two drivers for atmel boards: the sam-ba driver and the cdc_acm driver.

Since you have two drivers for the same device, randomly the sam-ba driver or the cdc_acm driver can be used. Both allow you to launch sam-ba tool and to program your board. The only issue it involves is the device node name. If it is the sam-ba driver which is used, you will have a /dev/ttyUSBx node. If it is the cdc_acm which is used, you will have a /dev/ttyACMx. In this case you will have to create a link to /dev/ttyUSBx.

It is mainly the cdc_acm driver which is selected. To know which one has been selected, you can use the dmesg command.

If you see something like this:

[   72.092495] usb 2-1.3: new high speed USB device using ehci_hcd and address 6
[   72.191022] USB Serial support registered for sam-ba
[   72.191169] sam-ba 2-1.3:1.1: sam-ba converter detected
[   72.191364] usb 2-1.3: sam-ba converter now attached to ttyUSB1
[   72.191762] usbcore: registered new interface driver sam-ba
[   72.191765] sam_ba: v1.0: Atmel SAM Boot Assistant (SAM-BA) driver
[   72.519248] cdc_acm 2-1.3:1.0: This device cannot do calls on its own. It is not a modem.
[   72.519258] cdc_acm: probe of 2-1.3:1.0 failed with error -16
[   72.519272] usbcore: registered new interface driver cdc_acm
[   72.519273] cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
It is the sam-ba driver which is used and you can see that a /dev/ttyUSB1 node has been created.

In the other case, the cdc_acm driver, you will have:

[  766.492942] usb 2-1.1: new high speed USB device using ehci_hcd and address 8
[  766.585934] cdc_acm 2-1.1:1.0: This device cannot do calls on its own. It is not a modem.
[  766.586033] cdc_acm 2-1.1:1.0: ttyACM0: USB ACM device
It is the CDC driver which is used and you can see that a /dev/ttyACM0 node has been created.

Checking the usb link between the board and the computer.

lsusb -d 03eb:6124
    Bus 004 Device 006: ID 03eb:6124 Atmel Corp

03eb is the vendor number and 6124 is the product number.

How to use SAM-BA 2 with old kernels (< 2.6.32)?

USB CDC Serial driver mount procedure :

  • Login with administrator rights

  • Unload usbserial module if it is already running
rmmod usbserial

  • Load usbserial kernel module
modprobe usbserial vendor=0x03eb product=0x6124

  • Verify that the USB connection is established
lsusb -d 03eb:6124
    Bus 004 Device 006: ID 03eb:6124 Atmel Corp

  • Know which USB connection is established
    kernel: usb 4-2: new full speed USB device using uhci_hcd and address 5
    kernel: usb 4-2: configuration #1 chosen from 1 choice
    kernel: usbserial_generic 4-2:1.0: generic converter detected
    kernel: usbserial_generic: probe of 4-2:1.0 failed with error -5
    kernel: usbserial_generic 4-2:1.1: generic converter detected
    kernel: usb 4-2: generic converter now attached to ttyUSBx

=> you will have to use /dev/ttyUSBx instead of \usb\ARM0 to connect to your board

Burn images to SD cards with Etcher

For burning demo images to SD cards, we recommend the handy tool: Ethcher.
Among other great features, it is multi-platform and secured (which meant that it won't trash your HDD for no reason!). Please connect to for more information and, as this project is Open Source, check the source code here:

Serial terminal configuration

Using a terminal software on your host system, you can connect to the application running on the SoC through the DBGU or a USART serial interface.


  • sama5d2 revision A, only to access the ROMCode through serial interface and see the RomBOOT message appearing, configure your serial line to 57600.
    Change it back to 115200 for normal operation.
    All components and demo binaries are now configured to work at 115200 8-N-1.

The usual serial communication parameters are 115200 8-N-1 :

Baud rate 115200
Data 8 bits
Parity None
Stop 1 bit
Flow control None

Yocto Project SDK

To ease software development on top or the root filesystems that we provide, we generated Yocto Project SDK that you can use to cross-compile your C/C++ project.

Common specifications of each toolchain listed below:

  • is built for Linux x86 64bits architecture (x86_64)
  • uses eglibc C library
  • embeds a version of the QT library and allow to build QT applications
  • is built from sources and can be re-built following the documentation provided on this website: PokyBuild#Atmel_Poky_Qt_Embedded_SDK
  • is a self-extracting shell script that installs the toolchain in the /opt directory
  • Download the self-extracting archive below by clicking with right button on the link and using the "Save Link As" contextual menu option

Description Binary Recipe used to
generate the SDK
Distribution used
Yocto Project 2.1.1 - Krogoth
Cortex-A5 Hard float NEON with QT 5 bitbake -c populate_sdk atmel-qt5-demo-image poky-atmel
Cortex-A5 Hard float with QT 5 bitbake -c populate_sdk atmel-qt5-demo-image poky-atmel
ARMv5 (for ARM926) bitbake -c populate_sdk atmel-xplained-demo-image poky-atmel
Yocto Project 2.0.1 - Jethro
Cortex-A5 Hard float NEON with QT 5 meta-toolchain-qt5 poky-atmel
Cortex-A5 Hard float with QT 5 meta-toolchain-qt5 poky-atmel
Yocto Project 1.7.1 - Dizzy
Cortex-A5 Hard float NEON with QT 5 meta-toolchain-qt5 poky-atmel
Cortex-A5 Hard float with QT 5 meta-toolchain-qt5 poky-atmel
ARMv5 (for ARM926) with QT 5 meta-toolchain-qt5 poky-atmel
ARMv5 (for ARM926) with QT 4 (QT Embedded) meta-toolchain-qte poky-atmel
Yocto Project 1.6.2 - Daisy
Cortex-A5 Hard float NEON with QT5 meta-toolchain-qt5 poky
Yocto Project 1.5.1 - Dora
Cortex-A5 Hard float with QT 4 (QT Embedded) meta-toolchain-qte poky

Info All toolchains listed above are compiled to run in a x86_64 environment. You can re-build them if you need to run them on another architecture (i686, the x86 32bits variant for example).

Pointing hand For other examples of original Yocto Project toolchains, your can browse the toolchain directory of each Yocto Project release (here 2.1 as an example).

In addition to the PokyBuild#Atmel_Poky_Qt_Embedded_SDK chapter, you can use the comprehensive Yocto Project documentation that give details on how to setup a Yocto Project SDK.

Device or resource busy: '/dev/ttyACM0'

When using the serial CDC interface for SAM-BA or terminal console from some Linux hosts, from time to time, you can experience long delays before connecting. You can also experience the following error:

could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'

It usually happens just after having re-booted the board or issuing a reset.

In fact, an USB modem detector the process modem-manager is taking the device as soon as it is appearing. You can find it using the lsof command:

> sudo lsof /dev/ttyACM0
modem-man 10256 root   28u   CHR  166,0      0t0 190530 /dev/ttyACM0
> ps aux | grep modem
root     10256  0.1  0.0  83408  3420 ?        S    11:57   0:00 /usr/sbin/modem-manager

So, you have several options to solve this problem:

  1. stop the modem-manager process before connecting the USB cable:
    > sudo killall modem-manager
  2. search the corresponding packed installed with your distribution's packet management tool and remove this "modem management" application:
    For example, on recent Ubuntu distributions:
    > sudo dpkg-query -S  /usr/sbin/modem-manager
    modemmanager: /usr/sbin/modem-manager
    > sudo apt-get remove modemmanager
  3. edit the udev rules to exclude the serial CDC interfaces from Modem Manager handling:
    Thumbs-up It is the preferred solution.
    For example, on recent Ubuntu distributions:
    > sudoedit /lib/udev/rules.d/10-atmel-usb-device-blacklist.rules
    Then insert the following lines:
    # Atmel CDC interfaces: Not handled by ModemManager
    # SEGGER console interface
    ATTRS{idVendor}=="1366", ENV{ID_MM_DEVICE_IGNORE}="1"
    # SAM-BA CDC interface with SAM-BA monitor
    ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MM_DEVICE_IGNORE}="1"
    # Atmel EDBG CDC interface
    ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2111", ENV{ID_MM_DEVICE_IGNORE}="1"
    Finally restart udev:
    > sudo service udev restart
    udev stop/waiting
    udev start/running, process 9299

r58 - 13 Jun 2017 - 16:00:30 - NicolasFerre
Linux & Open Source related information for AT91 Smart ARM Microcontrollers

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.

Linux® is the registered trademark of Linus Torvalds in the U.S. and other countries.

Atmel® and others, are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. This site is powered by the TWiki collaboration platform

ARM® and others are registered trademarks or trademarks of ARM Ltd. Other terms and product names may be trademarks of others.

Ideas, requests, contributions ? Connect to LinksToCommunities page.

Syndicate this siteRSS ATOM