Software Tools
SAM-BA (SAM Boot Assistant In-system Programmer) can run on:
- Windows 32-bit and 64-bit
- Linux x86 and x86_64
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)
- SAM-BA on Linux uses the USB connection through CDC to communicate with the device
- on Windows systems, JTAG SAM-ICE or J-Link
Note that SAM-BA 2.x is for maintenance only.
SAM-BA 3.x is recommended for new projects.
You have relevant FAQ entries to convert SAM-BA scripts from one version of the tool to the other:
- Convert your SAM-BA 3.1 scripts to SAM-BA 3.2 onwards with the help of ConvertSAMBAScript page
- Convert your SAM-BA 3.2 scripts to SAM-BA 3.5 onwards with the help of ConvertSAMBAScript page
- Convert your SAM-BA 3.5 scripts to SAM-BA 3.7 onwards with the help of ConvertSAMBAScript page
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.
I have issues while running SAM-BA 3 scripts (module SAMBA version x.y is not installed).
If you encounter the following issues while running your SAM-BA 3 scripts, it must mean that your SAM-BA revision and the SAM-BA script used are not aligned.
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
https://etcher.io for more information and, as this project is Open Source, check the source code here:
https://github.com/resin-io/etcher.
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.
Exceptions:
- 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 |
|
|
|
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 glibc C library
- embeds a version of the QT library and allow to build QT applications (QT replaced with EGT starting with Linux4SAM 2020.04)
- is built from sources and can be re-built following the documentation provided on this website: PokyBuild#Atmel_Poky_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
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).
For other examples of original Yocto Project toolchains, your can browse the
toolchain directory of each Yocto Project release (here 2.4.2 as an example).
In addition to the
PokyBuild#Atmel_Poky_SDK chapter, you can use the comprehensive Yocto Project documentation that give details on how to
setup a Yocto Project SDK.
To ease software development on top or the root filesystems that we provide, we generated Buildroot 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)
- is built from sources and can be re-built issuing a simple 'make sdk' command inside your buildroot directory after you build your image
- it's an archive that it's created from a specific board defconfig, and includes all the required toolchains for building and libs for linking
These other ready-made cross-compilation toolchains for Linux x86 64bits architecture (x86_64) are built using
Buildroot and also address several architectures.
They can be selected and downloaded on the website:
toolchains.bootlin.com (
Bootlin, formerly Free Electrons).
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
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
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:
- stop the
modem-manager
process before connecting the USB cable:
> sudo killall modem-manager
- search the corresponding packed installed with your distribution's packet management tool and remove this "modem management" application:
For example, on Ubuntu distributions:
> sudo dpkg-query -S /usr/sbin/modem-manager
modemmanager: /usr/sbin/modem-manager
or on more recent Ubuntu distributions:
> sudo dpkg-query -S /usr/sbin/ModemManager
modemmanager: /usr/sbin/ModemManager
then run:
> sudo apt-get remove modemmanager
- edit the udev rules to exclude the serial CDC interfaces from Modem Manager handling:
It is the preferred solution.
For example, on Ubuntu distributions:
> sudoedit /lib/udev/rules.d/10-microchip-usb-device-blacklist.rules
Then insert the following lines:
# Microchip boards CDC interfaces: Not handled by ModemManager
# SAM-BA CDC interface with SAM-BA monitor
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MM_DEVICE_IGNORE}="1"
# EDBG CDC interface
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2111", ENV{ID_MM_DEVICE_IGNORE}="1"
# SEGGER console interface
ATTRS{idVendor}=="1366", ENV{ID_MM_DEVICE_IGNORE}="1"
Finally restart udev
:
> sudo service udev restart
udev stop/waiting
udev start/running, process 9299
warning: on newer revision of ModemManager, the blacklist udev rules as modified above are not supported anymore if the daemon is configured in strict
mode. The discussion is still ongoing on the ModemManager project, but for now, you can change the mode to paranoid
.
This is done editing the file /lib/systemd/system/ModemManager.service
like exposed below:
> sudoedit /lib/systemd/system/ModemManager.service
[..]
ExecStart=/usr/sbin/ModemManager --filter-policy=paranoid
[..]
> sudo systemctl daemon-reload
> sudo systemctl restart ModemManager
More information on this can be found on this ModemManager bug entry