Firmware Update¶
The SRS-3 uses two firmware images: a primary image containing factory firmware that can only be updated on ground, and an alternate image that can also be updated on-orbit using CSP.
Primary Image¶
The SRS-3 primary image can be updated on ground using the provided Satlab JTAG/serial adapater. The update procedure requires a Linux development machine and OpenOCD version 0.11.0 or later, which can be installed from http://openocd.org/ or most distribution package managers. Please ensure that the udev
permissions are also configured as described in Getting Started.
Firmware packages are distributed as a tar.xz
archive. The package includes a script, flash.py
, which wraps the OpenOCD commands and flashes the board:
satlab@satlab:~$ tar xvf srs3-v2.3.0.tar.xz
srs3-v2.3.0/flash.py
srs3-v2.3.0/srs3-v2.3.0.bin
srs3-v2.3.0/srs3-v2.3.0-alt.bin
srs3-v2.3.0/CHANGELOG.rst
satlab@satlab:~$ cd srs3-2.3.0
satlab@satlab:~/srs3-v2.3.0$ ./flash.py srs3-v2.3.0.bin
[+] Satlab firmware flash tool v1.2.0
[+] Flashing image using OpenOCD srs3-v2.3.0.bin
[+] Succesfully flashed the firmare to the board
Alternate Image¶
The alternate image can be updated via CSP, by first uploading the srs3-alt.bin
image file using BTP, and then flashing it to the alternate partition. For BTP, the SRS-3 uses a basic flash file system backend with 4 files named flash0
to flash3
to hold images. Uploads to these files must use a block size of 128, which can specified using the -s 128
argument to the btp
command. After the image has been uploaded to one of the 4 flash files, it can be written to the alternate partition with the srs3 boot flash
command and verified using srs3 boot verify
. The alternate image can then be booted for a number of subsequent boots, using the srs3 boot set
command.
The listing below shows the steps when executed using satctl
. Note that the checksum returned by srs3 boot flash
is the CRC32C of the binary image file, while the checksum returned by srs3 boot verify
is a checksum embedded in the image itself. They are thus not expected to be the same.
[satctl] btp -n21 -f -s128 push srs3-alt.bin flash0
100% [########################################] 208360
27.6 kbit/s (205184 bytes in 58.097s)
[satctl] srs3 timeout 20000
[satctl] srs3 boot flash flash0
Flashing "flash0" to alternate boot partition
Flashed image, checksum = 48674bc7
[satctl] srs3 boot verify
Alternate image is OK! (size 208356, checksum 6E7C093C)
[satctl] srs3 boot set 1
Setting alternate firmware boot for 1 boots
Success - Reboot to boot alternate image
[satctl] srs3 reboot