Flashing

The teensy microcontroller is primarily supposed to be connected to and flashed via USB. Despite we support flashing the firmware via network (OTP), this mechanism for autonomous self-updates over ethernet are currently not yet well supported/documented.

How to flash a new (prebuilt) version of the firmware

This section is relevant for users who want to flash a given firmware image onto their Teensy. If you want to develop on the firmware code or build the firmware image from code, please read Building instead of this section.

You can download the latest stable firmware from the releases page at Github: https://github.com/anabrid/lucidac-firmware/releases . In this guide, you need the firmware.hex file from the most recent release.

Install the teensy flashing utility from https://www.pjrc.com/teensy/loader_cli.html to allow flashing the firmware image without prior building at your computer. If you are working on a Linux computer which was not connected to a Teensy before, please consider the section Neccessary udev rules on linux to connect Teensy via USB.

Connect your LUCIDAC via the USB port to your computer. In order to flash your microcontroller, execute

teensy_loader_cli --mcu=TEENSY41 firmware.hex``

Note

You might have to run the teensy_loader_cli multiple times (up to two or three times in a row) in order to work. Despite it says differently, you do not have to press the button on Teensy, which comes handy if you don’t have it at hand (because it is built in some enclosure).

Alternatives

You can use the graphical Teensy Loader Application at https://www.pjrc.com/teensy/loader.html, which is suitable when doing a manual update with a given flash file but not very practical within a command line workflow.

Instead, we have good experiences with alternative tools such as https://koromix.dev/tytools which is also part of the platformio.ini in the firmware repository.

Building a newer version of teensy_loarder_cli then included in PlatformIO

If you have the platformio teensy package installed (see platformio), you find the flashing utility in $HOME/.platformio/packages/tool-teensy/teensy_loader_cli. This executable is invoked when calling pio run -t upload.

However, the teensy_loader_cli bundled with the platformio teensy package is known to be broken, cf. https://lab.analogparadigm.com/lucidac/firmware/hybrid-controller/-/issues/76. The workaround is to build a more recent version of the code:

% wget https://github.com/PaulStoffregen/teensy_loader_cli/raw/master/teensy_loader_cli.c
% apt install gcc libusb-dev  # probably have to install some dependencies
% gcc -DUSE_LIBUSB teensy_loader_cli.c -oteensy_loader_cli-v2.3 -lusb
% grep upload platformio.ini  # change accordingly or add lines:
upload_protocol = custom
upload_command = ./teensy_loader_cli-v2.3 -mmcu=teensy41 -w -s -v .pio/build/teensy41/firmware.hex
% pio run -t upload # then this works again