Project

General

Profile

Flashing » History » Version 5

Version 4 (tsaitgaist, 08/13/2018 04:44 PM) → Version 5/8 (tsaitgaist, 08/13/2019 02:39 PM)

{{>toc}}

h1. Flashing

There are several ways to flash [[Wiki#Firmware|firmware images]], firmware images, depending on your board, the image you want can to flash, and the state of your device. flash.

h1. SIMtrace2 board

This section will cover the flashing methods for the [[Wiki#SIMtrace v2|SIMtrace board]].

h2. DFU

*precondition*: a functioning application firmware or DFU bootloader must already be installed.

SIMtrace2
SIMtrace 2 comes with a USB DFU bootloader pre-installed which allows to flash the application firmware over USB using the @dfu-util@ utility.

To check if you have a functioning application firmware or DFU bootloader, power get @dfu-util@:
<pre>
sudo apt-get install dfu-util
</pre>

To flash
the board: firmware:
<pre>
sudo dfu-util --device 1d50:PID --cfg 1 --alt 1 --reset --download BOARD-APP-dfu.bin
</pre>

*PID* is the USB product ID for the corresponding [[Wiki#Hardware|hardware platform]]:
* if both green and red LEDs are on, you should have a functioning application firmware @60e3@ for the [[Wiki#SIMtrace v2|SIMtrace board]]
* if only @4004@ for the green LED [[Wiki#sysmoQMOD|sysmoQMOD board]]

*BOARD*
is on, the application name of the target board for which the firmware is missing, but image has been built:
* @simtrace@ for
the DFU bootloader is present [[Wiki#SIMtrace v2|SIMtrace board]]
* @qmod@ for the [[Wiki#sysmoQMOD|sysmoQMOD board]]

*APP* is the firmware application name as listed
in case the application firmware is buggy, [[Wiki#Firmware|firmware section]].

You can find pre-built images on the [[Wiki#Firmware|firmware section]].

To prevent having to use @sudo@ in order to use @dfu-util@ on SIMtrace 2, grant access permission to the USB device to the current user:
<pre>
# add current user to plugdev group (user needs to re-login for this change to take effect)
sudo adduser $USERNAME plugdev
# grant access permission to SIMtrace 2 for plugdev group
sudo wget --output-file=/etc/udev/rules.d/99-simtrace2.rules https://git.osmocom.org/simtrace2/plain/host/99-simtrace2.rules
# reload udev rules
sudo udevadm control --reload-rules
sudo udevadm trigger
</pre>

h3. Forcing DFU

@dfu-util@ should reset the board and start the DFU bootloader.
Try the command a second time if it did not work at first.
If this still does not work,
you can force the board to boot the DFU bootloader:
*
on the board [[Wiki#SIMtrace v2|SIMtrace boards]] keep the *BOOTLOADER* button pressed while re-plugging shortly pressing on the USB connector (pressing the *RESET* might not be sufficient) button
!{width:20%}simtrace-board-buttons.jpg!
* if on [[Wiki#sysmoQMOD|sysmoQMOD boards]] short the TX and RX pins next to the micro-controller while powering the board.
!{width:20%}sysmoqmod-dfu.jpg!

If the
USB DFU bootloader is missing, defective, or needs to be updated, use the JTAG or SAM-BA SAMBA methods to flash the DFU bootloader.

To update the application firmware over the DFU bootloader, we will use @dfu-util@:
# get @dfu-util@:
<pre>
sudo apt-get install dfu-util
</pre>
# check if the board and DFU
bootloader are detected:
<pre>
sudo dfu-util --list
...
Found Runtime: [1d50:60e3] ver=0002, devnum=20, cfg=1, intf=1, path="2-3.1", alt=0, name="UNKNOWN", serial="..."
</pre>
# get the "latest firmware":http://ftp.osmocom.org/binaries/simtrace2/firmware/latest or [[Wiki#Development|build it]]. Here we will use the _trace_ application firmware as example:
<pre>
wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/simtrace-trace-dfu-latest.bin
</pre>
# flash the firmware using @dfu-util@:
<pre>
dfu-util --device 1d50:60e3 --cfg 1 --alt 1 --reset --download simtrace-trace-dfu-latest.bin
</pre>
# the green and red LED should turn on, showing the application firmware is flashed and started
firmware.

h2. SAM-BA SAMBA

The SAM3S micro-controller comes with an embedded bootloader called SAM-BA, SAMBA, allowing to flash firmware firmwares over USB.
The SAM-BA SAMBA bootloader can be used to flash the DFU bootloader.

This method should be used if:
* no firmware is flashed on the device, or it has been erased (no LED turns on when the board is powered)
* the DFU bootloader is buggy
* you want to update the DFU bootloader

You can also
To activate the SAM-BA SAMBA bootloader by erasing the flash content (this is not reversible): on [[Wiki#SIMtrace v2|SIMtrace boards]]:
# short the *ERASE* pin on the top of the board with the nearby 3V3 pin using a jumper or tweezers
!{width:20%}simtrace-jumper-mini.jpg!
# re-plug the connect SIMtrace over USB connector to power it up (no LED will light up) and wait 1 second (pressing the *RESET* button is not sufficient)
# remove the jumper shorting *ERASE* to 3V3

To activate the SAMBA bootloader on [[Wiki#sysmoQMOD|sysmoQMOD boards]]:

# no LED should turn connect using an USB to UART adapter to the serial port on the SAM3S micro-controller *opposite* of the one you want to reflash
!{width:20%}sysmoqmod-dfu.jpg!
# to verify the serial configuration is 115200 8N1
# enter 'y'
# wait 1 second
# enter 'Y'

To verifry
if the SAM-BA SAMBA bootloader has been started:
** # using @lsusb@ you should find the following entry:
<pre>
ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader
</pre>
** # using @journalctl -f@ ensure the board has been recognized as USB ACM device:
<pre>
kernel: usb 2-2: new full-speed USB device number 4 using xhci_hcd
kernel: usb 2-2: New USB device found, idVendor=03eb, idProduct=6124
kernel: usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
kernel: cdc_acm 2-2:1.0: ttyACM0: USB ACM device
kernel: usbcore: registered new interface driver cdc_acm
kernel: cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
</pre>

To flash using the SAM-BA SAMBA bootloader:
# install the @bossac@ utility to flash using the SAMBA protocol
<pre>
sudo apt install bossac
</pre>
# download the DFU bootloader: bootloader firmware image corresponding to your board:
<pre> ** "simtrace-dfu-flash.bin":http://ftp.osmocom.org/binaries/simtrace2/firmware/simtrace-dfu-flash.bin for [[Wiki#SIMtrace v2|SIMtrace boards]]
wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/simtrace-dfu-flash-latest.bin ** "qmod-dfu-flash.bin":http://ftp.osmocom.org/binaries/simtrace2/firmware/owhw-dfu-flash.bin for [[Wiki#sysmoQMOD|sysmoQMOD boards]]
</pre>
# flash the USB DFU bootloader firmware using @bossac@ (note: @erase@ ensures no main application remains so to force booting the USB DFU bootloader; @boot=1@ ensures the micro-controller will boot from the internal flash instead of the embedded bootloader next time it is powered up)
<pre>
sudo bossac --port=/dev/ttyACM0 --usb-port=1 --port /dev/ttyACM0 --erase --write BOARD-dfu-flash.bin --verify --boot=1 --write simtrace-dfu-flash-latest.bin
</pre>
# re-plug ## using the USB connector (be sure the *ERASE* pin is not shorted). If the DFU bootloader has been flashed correctly:
** only the green LED should be on
** the USB device should be listed as SIMtrace instead od SAMBA
<pre>
lsusb
...
Bus 002 Device 024: ID 1d50:60e3 OpenMoko, Inc. Osmocom SIMtrace 2
</pre>
** the DFU bootloader should be recognized:
<pre>
sudo dfu-util --list
...
Found DFU: [1d50:60e3] ver=0000, devnum=24, cfg=1, intf=0, path="2-3.1", alt=1, name="Flash (Application Partition)", serial="UNKNOWN"
Found DFU: [1d50:60e3] ver=0000, devnum=24, cfg=1, intf=0, path="2-3.1", alt=0, name="RAM", serial="UNKNOWN"
</pre>

Once the USB DFU bootloader is flashed, you can flash the application
following firmware using the [[Flashing#DFU|DFU]] method. image:

To # to prevent using @sudo@, grant to current user the permission to access USB serial devices (e.g. @/dev/ttyACM0@). Note: this change only takes effect after re-logging-in
<pre>
sudo adduser $USERNAME dialout
</pre>

Once the USB DFU bootloader is flashed, when re-pluging the SIMtrace 2 device over USB, you can flash the main application firmware using the [[Flashing#DFU|DFU]] method.

h2. JTAG

It is also possible to flash he firmware or debug [[Wiki#SIMtrace v2|SIMtrace boards]] over JTAG/SWD JTAG using the ARM 20-pin JTAG header on the top of the board.

This is mainly meant for [[Wiki#Development|development]] since it also allows to debug the firmware.

To flash the USB DFU firmware using JTAG:
# install the JTAG utility @openOCD@
<pre>
sudo apt install openocd
</pre>
# download the DFU bootloader:
<pre>
wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/simtrace-dfu-flash-latest.bin
</pre>
#
flash the USB DFU bootloader firmware
<pre>
openocd --file interface/jlink.cfg --file target/at91sam3sXX.cfg --command "init" --command "halt" --command "flash write_bank 0 simtrace-dfu-flash-latest.bin simtrace-dfu-flash.bin 0" --command "at91sam3 gpnvm set 1" --command "reset" --command "shutdown"
</pre>
#* replace @interface/jlink.cfg@ with the configuration file for your JTAG debugging adapter
#* @at91sam3 gpnvm set 1@ ensures the micro-controller will boot from the internal flash (i.e. not from the embedded SAM-BA SAMBA bootloader)

The SAM3S also offers the low pin-count SWD alternative to JTAG, allowing to use an inexpensive ST-Link V2 (clone) to flash (and debug):
<pre>
openocd --file interface/stlink-v2.cfg --command "set CPUTAPID 0x2ba01477" --file target/at91sam3sXX.cfg --command "init" --command "halt" --command "flash write_bank 0 simtrace-dfu-flash-latest.bin simtrace-dfu-flash.bin 0" --command "at91sam3 gpnvm set 1" --command "reset" --command "shutdown"
</pre>

SWD pinout:
!{width:20%}simtrace_swd.jpg!

Once the USB DFU bootloader is flashed, after re-plugging the USB connector, when re-pluging SIMtrace 2 over USB, you can flash the main application firmware using the DFU method.

h1. sysmoQMOD

This section will cover the flashing methods for the [[Wiki#sysmoQMOD|sysmoQMOD board]].

The sysmoQMOD has two SAM3S micro-controllers, each emulating the card for two modems:

* ST12 is the micro-controller on the right (when the power jack is on top), and emulates cards for the two right-most modems
* ST34 is the micro-controller on the left (when the power jack is on top), and emulates cards for the two left-most modems
* each card slot has one red LED nearby (e.g. two per micro-controllers) to show the status of the firmware

All the following procedures can be independently performed on each of the SAM3S micro-controllers, providing you use the corresponding USB path/device names.

h2. DFU

*precondition*: a functioning application firmware or DFU bootloader must already be installed.

sysmoQMOD comes with a USB DFU bootloader pre-installed which allows to flash the application firmware over USB using the @dfu-util@ utility.

To check if you have a functioning application firmware or DFU bootloader (per micro-controller and set of two modems/card slot), power the board:
* if both red LEDs are on, you should have a functioning application firmware
* if only one red LED is on, the application firmware is missing, but the DFU bootloader is present
* in case the application firmware is buggy, you can force the board to boot the DFU bootloader: short the TX and RX pins next to the micro-controller while powering the board.
!{width:20%}sysmoqmod-dfu.jpg!
* if the USB DFU bootloader is missing, use the SAM-BA method to flash the DFU bootloader.

To update the application firmware over the DFU bootloader, we will use @dfu-util@:
# get @dfu-util@:
<pre>
sudo apt-get install dfu-util
</pre>
# check if the board and DFU bootloader are detected (here for both micro-controllers):
<pre>
sudo dfu-util --list
...
Found Runtime: [1d50:4004] ver=0002, devnum=36, cfg=1, intf=2, path="2-2.1", alt=0, name="UNKNOWN", serial="UNKNOWN"
Found Runtime: [1d50:4004] ver=0002, devnum=37, cfg=1, intf=2, path="2-2.4", alt=0, name="UNKNOWN", serial="UNKNOWN"
</pre>
# get the "latest firmware":http://ftp.osmocom.org/binaries/simtrace2/firmware/latest or [[Wiki#Development|build it]].
<pre>
wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/qmod-cardem-dfu-latest.bin
</pre>
# flash the firmware using @dfu-util@:
<pre>
dfu-util --device 1d50:4004 --cfg 1 --alt 1 --path "2-2.1" --reset --download qmod-cardem-dfu-latest.bin
</pre>
# both red LEDs should turn on, showing the application firmware is flashed and started

h2. SAM-BA

If none of the LEDs are on, the flash of the micro-controller might have been erased.
In this case, the SAM3S micro-controller should start the embedded bootloader called SAM-BA, allowing to flash firmware over USB.
The SAM-BA bootloader can be used to flash the DFU bootloader.

To verify if the SAM-BA bootloader has been started:
* using @lsusb@ you should find the following entry:
<pre>
ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader
</pre>
* using @journalctl -f@ ensure the board has been recognized as USB ACM device:
<pre>
kernel: usb 2-2: new full-speed USB device number 4 using xhci_hcd
kernel: usb 2-2: New USB device found, idVendor=03eb, idProduct=6124
kernel: usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
kernel: cdc_acm 2-2:1.0: ttyACM0: USB ACM device
kernel: usbcore: registered new interface driver cdc_acm
kernel: cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
</pre>

To flash using the SAM-BA bootloader:
# install the @bossac@ utility to flash using the SAMBA protocol
<pre>
sudo apt install bossac
</pre>
# download the DFU bootloader:
<pre>
wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/qmod-dfu-flash-latest.bin
</pre>
# flash the USB DFU bootloader using @bossac@ (note: @erase@ ensures no main application remains so to force booting the USB DFU bootloader; @boot=1@ ensures the micro-controller will boot from the internal flash instead of the embedded bootloader next time it is powered up)
<pre>
sudo bossac --port=/dev/ttyACM0 --usb-port=1 --erase --verify --boot=1 --write qmod-dfu-flash-latest.bin
</pre>
# Re-power the board. If the DFU bootloader has been flashed correctly:
** only one red LED should be on
** the USB device should be listed as OpenMoko/"quad modem" instead of SAMBA
<pre>
lsusb
...
Bus 002 Device 024: ID 1d50:4004 OpenMoko, Inc.
</pre>
** the DFU bootloader should be recognized:
<pre>
sudo dfu-util --list
...
Found DFU: [1d50:4004] ver=0010, devnum=58, cfg=1, intf=0, path="2-2.4", alt=1, name="Flash (Application Partition)", serial="UNKNOWN"
Found DFU: [1d50:4004] ver=0010, devnum=58, cfg=1, intf=0, path="2-2.4", alt=0, name="RAM", serial="UNKNOWN"
</pre>

Once the USB DFU bootloader is flashed, you can flash the application firmware using the [[Flashing#DFU-2|DFU]] method.

To prevent using @sudo@, grant to current user the permission to access USB serial devices (e.g. @/dev/ttyACM0@). Note: this change only takes effect after re-logging-in
<pre>
sudo adduser $USERNAME dialout
</pre>

If no LED is on and the SAM-BA bootloader is not present, or you require to update the DFU bootloader, please contact the customer support of sysmocom.
Add picture from clipboard (Maximum size: 48.8 MB)