Installation

Dependencies

You need the toolchain for cross compiling for arm-none-eabi. On Debian systems, these are provided by the two packages gcc-arm-none-eabi and binutils-arm-none-eabi. Check your system documentation for getting these software.

Compiling

The package uses the autoconf framework to build and install itself. Simply run the bundled configure script to compile and install the software. For instance:

% ./configure --prefix=$HOME/devel
% make install

You can check the autoconf online documentation for more help.

Note To generate the configure script, you have to run autoreconf in the source tree if you got the sources from the git repository instead of a tarball.

Files

The package installs the firmware files in your installation prefix:

  • <prefix>/lib/tk3-firmware/chimera, for the Chimera board.

  • <prefix>/lib/tk3-firmware/tawaki, for the Tawaki board.

Bootstrapping

In order to program for the first time a brand new board, you first need to install the bootloader, so that subsequent updates are made easier. This has to be done only once. After that, even the bootloader itself can be updated by following the 'Flashing' procedure below.

The exact bootstrapping procedure depends on the hardware.

Chimera

TBD

Tawaki

You need to manually install the bootloader on the microcontroller. The program is located in <prefix>/lib/tk3-firmware/boot-tawaki. To do so, you need to convert the ELF file into a raw binary file that can be uploaded to the board’s flash memory. This is done with the objcopy binutils command for the arm-none-eabi architecture:

% arm-none-eabi-objcopy -O binary <prefix>/lib/tk3-firmware/boot-tawaki boot.bin

Then, put the board in DFU mode, by pressing the BOOT button and then powering the board via USB. You should see your board in the output of the lsusb command:

% lsusb
[...]
Bus bbb Device ddd: ID 0483:df11 STMicroelectronics STM Device in DFU Mode
[...]

To upload the boot.bin file, you need the dfu-util command. On Debian systems, this is provided by the dfu-util package. Check that the board is recognized:

% dfu-util -l
[...]
Found DFU: [0483:df11] ver=0200, devnum=19, cfg=1, intf=0, path="nnn", alt=1, name="@Option Bytes   /0x5200201C/01*128 e", serial="200364500000"
Found DFU: [0483:df11] ver=0200, devnum=19, cfg=1, intf=0, path="nnn", alt=0, name="@Internal Flash   /0x08000000/16*128Kg", serial="200364500000"

Match the Internal Flash interface and use the corresponding 'alt' number in the command below to upload the bootloader (normally `0'):

% dfu-util --alt 0 -s 0x08000000 -D boot.bin

Once done, you can power cycle the board to reboot it normally. The four leds should light, indicating that the boot loader sucessfully loaded. You can also check and tune the bootloader parameters with tk3-flash, see next section.

Flashing

In order to program the board, you have to upload the programs in the microcontroller flash memory. This can be done with the tk3-flash program, available at https://git.openrobots.org/projects/tk3-flash.

Even before programming a firmware, you should be able to check the current bootloader parameters. After powering the board, a new cdc_acm should be created. This can be checked from the dmesg kernel output:

% dmesg -T
[...]
usb b-n.m: Product: tk3-paparazzi
usb b-n.m: Manufacturer: LAAS/CNRS
usb b-n.m: SerialNumber: nnnnnnnnnnnnnnnnnnnnn
cdc_acm b-n.m:1.0: ttyACM0: USB ACM device

Note the device path and use the following tk3-flash command:

% tk3-flash set /dev/ttyACM0
Please power on or reset the device.....
Probed STM32 bootloader
STM32H742xxx/743xxx/753xxx/750xxx bootloader version 9.3
Searching for existing settings
Reading data from 0x8000000-0x8000003, 4 bytes
Reading data from 0x8020000-0x8020003, 4 bytes
Reading data from 0x8020000-0x803ffff, 131072 bytes
Found settings data at 0x8020000-0x8020067, 104 bytes

--- Settings --------------------------------------

serial          : nnnnnnnnnnnnnnnnnn.0
boot-timeout    : 5                (bootloader timeout (s))
boot-lock       : 0                (set to 1234567890 to update bootloader)

Flashing a new firware can be done with the following command:

Note When uploading a program for the first time, make sure to use the -i flag of tk3-flash to properly initialize the runtime parameters. You can skip the -i for further updates, thus keeping you previous settings.
% tk3-flash -i flash /dev/ttyACM0 <prefix>/lib/tk3-firmware/tawaki
Please power on or reset the device...
Probed STM32 bootloader
STM32H742xxx/743xxx/753xxx/750xxx bootloader version 9.3
Retrieving load data from <prefix>/lib/tk3-firmware/tawaki
Found data segment 0, paddr 0x8040000-0x80402df, 736 bytes
Found data segment 1, paddr 0x80402e0-0x8048e7f, 35744 bytes
Found data segment 2, paddr 0x8048e80-0x804954f, 1744 bytes
Found tk3 settings segment 3, paddr 0x8020000-0x8020213, 532 bytes
Erasing flash page 2.
Writing data to 0x8040000-0x804954f, 38224 bytes
Erasing flash page 1.
Writing data to 0x8020000-0x8020213, 532 bytes

--- Settings --------------------------------------

serial          : nnnnnnnnnnnnnnnnnn.0
boot-timeout    : 5                (bootloader timeout (s))
boot-lock       : 0                (set to 1234567890 to update bootloader)
mkbl-motors     : 6                (number of mkbl motors, 0=off)
poles           : 14               (number of motor poles)
servo-mode      : 0                (0=off, 1=PWM, 2=DSHOT, 3=BI-DSHOT)
servo-3d        : 0                (0=off, 1=reversible)
servo-freq      : 150              (PWM=50-490Hz, DSHOT=100-900kHz)
idle-throttle   : 6                (idle throttle (0%-20%))
rc-kill-chan    : -1               (RC kill channel [0-7], -1=disable)
rc-kill-mode    : 0                (kill trigger: -1=low, 0=edge, +1=high)
acc-range       : 8                (±2, 4, 8, 16 (g))
gyr-range       : 1000             (±250, 500, 1000, 2000 (°/s))

The board is ready!

Setting a custom serial number

On the tawaki boards, you have the possibility to program a custom serial number, that makes it easier to connect to the boards ttys.

By default, the serial number is computed from the UID of the microcontroller (unique for each manufactured device). To program a new serial, you must first unlock the boot-lock parameter by setting it to the magic number 1234567890:

% tk3-flash set /dev/ttyACM0 boot-lock 1234567890

Then, you must reboot the board and while the board is in the bootloader (all 4 LEDs are lit), you can issue the request for programming a new serial:

% tk3-flash set /dev/ttyACM0 serial myboard

For safety, you can then reset the boot-lock parameter to 0:

% tk3-flash set /dev/ttyACM0 boot-lock 0

The board’s ttys can now be accessed as myboard.0 or myboard.1 instead of /dev/ttyACM0 or /dev/ttyACM1.