In this article is used the command line version of SAM-BA version 3.5 that support the latest generations of Microchip MPUs.
Download the package from Microchip site:
mkdir acqua
wget http://ww1.microchip.com/downloads/en/DeviceDoc/sam-ba_3.5-linux_x86_64.tar.gz
Uncompress the tar.gz file:
tar xvf sam-ba_3.5-linux_x86_64.tar.gz
Move inside the new directory created by tar
cd sam-ba_3.5
SAM-BA comunicates with MCU via the USB client port of Acqua. It can be used only when on the MPU is running RomBOOT. When the CPU is running Linux it is impossible to use SAM-BA to access the NAND memory.
RomBOOT is the first piece of code that runs on the SAMA5D3x MCU at startup. It is burned directly by the Microchip factory inside the ROM MPU.
At startup RomBOOT looks for a bootable code from any possible supported external memory, if nothing is available, it waits for any serial commands incoming from the USB device port or from the serial debug port. This is the way used by SAM-BA to talk with RomBOOT.
In case you want to program the NAND memory it is enought to remove the MicroSD from Acqua SOM and turn on the board.
Type this command on your Linux PC:
lsusb
...
Bus 003 Device 076: ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader
...
and a new serial device is available with the name /dev/ttyACM0:
dmesg
...
[1123395.428292] cdc_acm 3-9:1.0: ttyACM0: USB ACM device
[1123404.688098] usb 3-9: USB disconnect, device number 74
[1126710.259644] usb 3-9: new high-speed USB device number 76 using xhci_hcd
[1126710.408128] usb 3-9: New USB device found, idVendor=03eb, idProduct=6124, bcdDevice= 1.10
[1126710.408135] usb 3-9: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[1126710.411176] cdc_acm 3-9:1.0: ttyACM0: USB ACM device ...
ls -al /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 dic 6 18:02 /dev/ttyACM0
sudo ./sam-ba -p usb -b sama5d3-xplained -a nandflash -c erase
sudo ./sam-ba -p usb -b sama5d3-xplained -a nandflash -c writeboot:at91bootstrap.bin
When a bootloader is loaded inside the NANDFLASH to have access again to the NANDFLASH via SAM-BA close the BOOT pin of Berta Board to GND to avoid that At91bootstrap starts.
-c write:<filename>:[<addr>]
Examples: write and verify at91bootstrap.bin at begin of NANDFLASH
sudo ./sam-ba -p usb -b sama5d3-xplained -a nandflash -c write:at91bootstrap.bin
sudo ./sam-ba -p usb -b sama5d3-xplained -a nandflash -c verify:at91bootstrap.bin
Read the whole NANDFLASH content and save in in a file called firmware.bin
sudo ./sam-ba -p usb -b sama5d3-xplained -a nandflash -c read:firmware.bin
The general format of -c read command is:
-c read:<filename>:[<addr>]:[<length>]
for example:
-c read:firmware.bin read all to firmware.bin
-c read:firmware.bin:0x1000 read from 0x1000 to end into firmware.bin
-c read:firmware.bin:0x1000:1024 read 1024 bytes from 0x1000 into firmware.bin
-c read:firmware.bin::1024 read 1024 bytes from start of memory into firmware.bin
-c verify:<filename>:[<addr>]
examples:
verify:firmware.bin verify that start of memory matches firmware.bin
verify:firmware.bin:0x1000 verify that memory at offset 0x1000 matches firmware.bin
To generate different size sample files use these examples:
dd bs=1K count=64 < /dev/urandom > test64KB.bin
dd bs=1M count=16 < /dev/urandom > test16MB.bin
dd bs=1M count=64 < /dev/urandom > test64MB.bin
dd bs=1M count=128 < /dev/urandom > test128MB.bin
dd bs=1M count=256 < /dev/urandom > test256MB.bin
SAM-BA can execute scripts written in QML to do automaticaly complex functions.
With the following QML script for example it is possible to write and verify at91bootloader on the NANDFLASH.
import SAMBA 3.5
import SAMBA.Connection.Serial 3.5
import SAMBA.Device.SAMA5D3 3.5
SerialConnection {
device: SAMA5D3Xplained {
}
onConnectionOpened: {
// initialize Low-Level applet
initializeApplet("lowlevel")
// initialize NAND flash applet
initializeApplet("nandflash")
// erase all memory
applet.erase(0, applet.memorySize)
// write file
applet.write(0x000000, "at91bootstrap.bin", true)
// verify file
applet.verify(0x00000, "at91bootstrap.bin", true)
}
}
save it in a file called for example mytest.qml then lauch it by typing:
sudo ./sam-ba -x mytest.qml