Software Tools
SAM-BA
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:
If you have something like that it's ok:
[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.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.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.
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.
- New revision of SAM-BA running an old script :
SAM-BA Command Line Tool v3.2.0
Copyright 2015-2017 ATMEL Corporation
sam-ba -x demo_linux_serialflash_usb.qml
"file:demo_linux_serialflash_usb.qml:1 module \"SAMBA\" version 3.1 is not installed\n"
In such case, we advice you to keep your newer revision of SAM-BA but convert your SAM-BA script to a newer SAM-BA module revision by following the ConvertSAMBAScript FAQ page.
- Old revision of SAM-BA running an new script :
SAM-BA Command Line Tool v3.1.4
Copyright 2015-2016 ATMEL Corporation
sam-ba -x demo_linux_serialflash_usb.qml
"file:demo_linux_serialflash_usb.qml:1 module \"SAMBA\" version 3.2 is not installed\n""
In such case we advice you to download a newer revision of SAM-BA.
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 https://etcher.io for more information and, as this project is Open Source, check the source code here: https://github.com/resin-io/etcher.
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.
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 |
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 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
- 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 5.0.4 - scarthgap (Linux4MICROCHIP 2024.10) | |||
---|---|---|---|
Cortex-A5 Hard float NEON with EGT (like sama5d2 or sama5d4 for instance) | https://ww1.microchip.com/downloads/aemdocuments/documents/mpu32-direct/pub/demo/yocto-sdk/linux4sam-poky-Cortex-A5-sdk-2024.10.sh | bitbake -c populate_sdk microchip-graphics-image | poky-atmel |
ARMv5 (for ARM926) with EGT - sam9 family (like at91sam9x60 for instance) | https://ww1.microchip.com/downloads/aemdocuments/documents/mpu32-direct/pub/demo/yocto-sdk/linux4sam-poky-ARMv5-sdk-2024.10.sh | bitbake -c populate_sdk microchip-graphics-image | poky-atmel |
Cortex-A7 Hard float NEON (like sama7g5ek for instance) | https://ww1.microchip.com/downloads/aemdocuments/documents/mpu32-direct/pub/demo/yocto-sdk/linux4sam-poky-Cortex-A7-sdk-2024.10.sh | bitbake -c populate_sdk microchip-headless-image | poky-atmel |
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.
Buildroot 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
Other ready-made cross-compilation toolchains
These other ready-made cross-compilation toolchains for Linux x86 64bits architecture (x86_64) are built using Buildroot and also address several architectures.
TARGET ARCHITECTURE | CROSS-COMPILATION TOOLCHAIN TO CHOOSE |
---|---|
ARMv5 (for ARM926) - sam9 family (like at91sam9x5 for instance) | armv5-eabi |
Cortex-A Hard float - sama5 family (like sama5d3 or sama5d2 for instance) | armv7-eabihf |
They can be selected and downloaded on the website: toolchains.bootlin.com (Bootlin, formerly Free Electrons).
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:
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:
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:
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-manageror on more recent Ubuntu distributions:
> sudo dpkg-query -S /usr/sbin/ModemManager modemmanager: /usr/sbin/ModemManagerthen run:
> sudo apt-get remove modemmanageredit 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.rulesThen 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 9299This 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 ModemManagerMore information on this can be found on this ModemManager bug entry