Software Tools

SAM-BA

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

The SAM-BA In-system Programmer 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 Boot Assistant (SAM-BA) on http://www.atmel.com SAM-BA In-system Programmer for at91sam9xe (SAM-BA 2.8),
for at91sam9g20 (SAM-BA 2.8),
for at91sam9263 (SAM-BA 2.7)
SAM-BA for latest products (including SAMA5D4 family) SAM-BA 2.13-rc7  

Info Patches are needed for some products: check the documentation page on Atmel website.

Info You can also use .tcl scripts under a Linux-based operating system. This is useful if you want to run GettingStarted#DemoArchiveBinaries demos.

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.

Since SAM-BA is a 32 bits application, we can assume that it is ok on 32 bits version if it works on 64 bits version.

Ubuntu
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-generic (2.6.35-30.56)
10.10 (64 bits) 2.6.35.30-generic (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
Debian
Distribution version Kernel version
6.0 (64 bits) 2.6.32-5-amd64
Fedora
Distribution version Kernel version
14 (32 bits) 2.6.35.6-45.fc14.i686
14 (64 bits) 2.6.35.6-45.fc14.x86_64
15 (64 bits) 2.6.38.6-26.rc1.fc15.x86_64
OpenSuse
Distribution version Kernel version
11.3 (64 bits) 2.6.34.10-0.2-desktop
11.4 (64 bits) 2.6.37.1-1.2-desktop

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 with various linux distributions

Ubuntu

  • Update the kernel
# apt-get install linux-image-generic linux-headers-generic
  • On 64 bits version install 32 bits libraries:
# apt-get install ia32-libs
or on Ubuntu 13.10 and later versions:
# dpkg --add-architecture i386
# apt-get update
# apt-get install libxss1:i386 libxft2:i386
  • Give sam-ba execute permission if needed:
$ chmod +x sam-ba
  • Add yourself into dialout group
Edit the /etc/group file and add your username at the end of the line starting with dialout.
dialout:x:20:myusername
Logout and login.
  • Connect the board
  • Create a symlink on /dev/ttyACM0
# ln -s /dev/ttyACM0 /dev/ttyUSB0
  • Launch sam-ba

Debian

  • Update the kernel:
# apt-get install linux-image-generic linux-headers-generic
  • On 64 bits version install 32 bits libraries:
# apt-get install ia32-libs
  • Give sam-ba execute permission if needed:
$ chmod +x sam-ba
  • Add yourself into dialout group
Edit the /etc/group file and add your username at the end of the line starting with dialout.
dialout:x:20:myusername
Logout and login.
  • Connect the board
  • Create a symlink on /dev/ttyACM0
# ln -s /dev/ttyACM0 /dev/ttyUSB0
  • Launch sam-ba

Fedora

  • On 64 bits version install 32 bits libraries:
# yum install glibc libstdc++ libX11
# yum install glibc.i686 libstdc++.i686 libX11.i686
The first line update your 64 bits libraries in order to have the same version as 32 bits libraries. If you don't do this, Fedora may complain that you have multilib versions
  • Give sam-ba execute permission if needed:
chmod +x sam-ba
  • Add yourself into dialout group
Edit the /etc/group file and add your username at the end of the line starting with dialout.
dialout:x:18:myusername
Logout and login.
  • Connect the board
  • Create a symlink on /dev/ttyACM0
# ln -s /dev/ttyACM0 /dev/ttyUSB0
  • Launch sam-ba

OpenSuse

  • On 64 bits version install some 32 bits libraries:
glibc libstdc++ xorg-x11-libX11
  • Give sam-ba execute permission if needed:
chmod +x sam-ba
  • Add yourself into dialout group
Edit the /etc/group file and add your username at the end of the line starting with dialout.
dialout:x:16:myusername
Logout and login.
  • Connect the board
  • Create a symlink on /dev/ttyACM0
# ln -s /dev/ttyACM0 /dev/ttyUSB0
  • Launch 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 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
dmesg
    ...
    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

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 USART0 serial interface.

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

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

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
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:

  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:
    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"
    Finally restart udev:
    > sudo service udev restart
    udev stop/waiting
    udev start/running, process 9299

r42 - 01 Oct 2014 - 10:08:50 - 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