All Seed Robotics actuators come with an opens source bootloader (TSB) installed.
TSB (an acronym for Tinysafeboot) was originally developed by Julien Thomas and has since been further developed by Seed Robotics. The latest versions and tools can be followed on the Seed Robotics account on Github.

The key advantage of this bootloader is that it operates over a serial connection (UART) and can be used on devices connected in a one-wire, half duplex, Daisy chain (the case of the EROS architecture).

This means all actuators can be addressed by the bootloader individually and have their firmware upgraded without having to open your unit or disconnect any device for individual programming.

Latest firmware files

For the latest firmware files, please email support (at) seedrobotics (dot) com.

Upgrade Procedure: Introduction

The Upgrade procedure is done with your unit connected to the PC over USB. You will also need to apply external power to the unit so that the actuators are powered up.

Next, you will need the TSBAdvanced Loader tool, which will individually update the intended servos.
This is a command line tool that will perform the update operations on the servos. It works in tandem with the EROS main board firmware to perform the upgrade.

Your EROS Main board must be running firmware version 28 or higher. This is an absolute requirement. If your unit is running an earlier version, you should Upgrade the Main Board Firmware first.

Connecting via USB and applying external power

Remove the small cover on the side of the unit to expose the USB connector.

Next, connect the USB cable and simultaneously apply power through the main connector to the unit.
This is shown in the diagram Connection via USB

NOTE: It is essential that you apply external power through the main connector port. Otherwise, the servos will not be powered and will not be responsive.

Prepare the TSB Advanced Loader tool

The TSBAdvanced Loader was developed by Seed Robotics with extensions to work together with the EROS Main board for the upgrade.

The tool is written in C# and compiled with Mono, a cross-platform implementation of the .Net framework making it compatible with Windows, Linux and MacOS.

1) Download the TSBAdvanced Loader binary directly from the Seed Robotics server.
Alternatively, you can clone the project from our Github account and compile it in your system.

2) If you are running Linux or Mac OS you will need to install Mono on your platform as well.

Enable Bridge mode in the EROS main board

In order to access the servos for the bootloader session, the EROS Main Board, since version 28, includes a bridge mode that works in tandem with the TSBAdvanced Loader to allow firmware upgrade.

To enable Bridge mode:

1) Find the Virtual Serial port number/id that was assigned, when you connected the board to your computer over USB.
(you need the Serial port number/id assigned to the USB connection from the EROS Main board to the PC).

On Windows you may use Device Manager to find COMxx;
on Linux and MacOS, it is typically /dev/ttyACMx, /dev/ttyUSBx or similar; run an ls /dev/tty* command to get the list of devices.

2) Now open a command prompt, browse to the directory where you have extracted the TSBAdvanced Loader and type:

[Linux and Mac users: prepend './' to the command]

tsbloader_adv.exe -port=[the Virtual Serial port number/id you determined in point 1] -seederos=bron

The executable file to run is the same whether you're on Windows, Linux or Mac OS, provided Mono is installed correctly.

  • If the executable refuses to run on Linux or Mac OS, you may need to give appropriate permissions to the file (chmod +x). Please check the FAQ section below for information on that.
  • Under Linux, if you get an error regarding the /dev/ttyX device, the first time you run the tool, also refer to the FAQ below.

At this point, the LED on your unit should have turned Blue. This signals the unit is in Bridge mode for a Bootloader session.

Test Bootloader Activation

By default, all the internal actuators ship with a unique, default password pre-configured. The unique passwords allows us to target each unit individually on the bus, for the update.

By default, the passwords are assigned from the lowest default ID to the highest default ID:

  • For the RH4D model, default bootloader passwords are A-D (“A” being the password for the actuator with default ID 21/22 and “D” being for the actuator with default ID 29/30)
  • For the RH5D model, default bootloader passwords are A and D-G (“A” being the password for the actuator with default ID 31/41 and “G” being for the actuator with default ID 37/47).\\(on the RH5D passwords B and C do not correspond to any actuator as this models lacks the Wrist Flexion and Adduction motors when compared to the RH7D)
  • For the RH7D model, default bootloader passwords are A-G (“A” being the password for the actuator with default ID 31/41 and “G” being for the actuator with default ID 37/47)
  • For the RH8D model, default bootloader passwords are A-H (“A” being the password for the actuator with default ID 31/41 and “H” being for the actuator with default ID 38/48)
  • For spare actuators (if your order included any), default bootloader passwords are “S” or “P”

These default passwords are the same for LEFT and RIGHT versions, meaning passwords go from A-…, on both LEFT and RIGHT units.

You can also find the ASCII code for bootloader password of each actuator, by reading memory position 82 (0x52) in the Control Table for the Seed Robotics Smart Actuators

Before we continue we must check that all devices have correct passwords:

[Linux and Mac users: prepend './' to the commands]

1) Test for any devices without password, which could interfere in the process.

At the console window, type:

tsbloader_adv.exe -port=[serial port] -I -prewait=2000
When asked for a password, simply press ENTER (without writing any password).

This command should fail with an error saying “> Could not activate bootloader for the selected device.”.
This is the expected result: it means all devices are assigned their given password and are ready.
If you received a response from a device when issuing the command, STOP NOW and contact our technical support.

2) We will now check that all servos are responding.

At the console window type the following sequence:

For the RH4D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -I -patchdaisychain -pwd=A,B,C,D

The tool should find and print the bootloader information for the 4 servos in the unit.

For the RH5D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -I -patchdaisychain -pwd=A,D,E,F,G

The tool should find and print the bootloader information for the 5 servos in the unit.

For the RH7D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -I -patchdaisychain -pwd=A,B,C,D,E,F,G

The tool should find and print the bootloader information for the 7 servos in the unit.

For the RH8D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -I -patchdaisychain -pwd=A,B,C,D,E,F,G,H

The tool should find and print the bootloader information for the 8 servos in the unit.

If you receive any error message while performing these procedures, you may retry the command. You can also scroll back through the window to determine which bootloader did not respond.
If the error persists, for example, if one or more units consistently don't respond, STOP NOW and contact Technical support.

Backup the EEPROM of the devices

The EEPROM contains information specific to your own unit, such as calibration data. Therefore it is HIGHLY recommended that you back it up before upgrading the firmware.

We must issue an individual command for each device/password. If an operation on a device fails, do not proceed to the next one; retry the operation.\\ To ensure a healthy system configuration, you should only move to the next actuator/password once the previous one finishes successfully:

At the console window run the following sequence of commands:
(remember: do not move on to the next command before the previous one finishes successfully; if you are unable to get a command to finish successfuly, please contact our Technical Support. DO NOT move on to the next command.)

[Linux and Mac users: prepend './' to the commands]

For the RH4D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=B -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=C -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -eop=rv -efile=micro_actuator_eeprom.eep -tagefile

For the RH5D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=E -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=F -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=G -eop=rv -efile=micro_actuator_eeprom.eep -tagefile

For the RH7D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=B -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=C -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=E -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=F -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=G -eop=rv -efile=micro_actuator_eeprom.eep -tagefile

For the RH8D:
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=B -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=C -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=E -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=F -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=G -eop=rv -efile=micro_actuator_eeprom.eep -tagefile
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=H -eop=rv -efile=micro_actuator_eeprom.eep -tagefile

This will generate one EEPROM dump file for each of the actuators in your unit. The files will be stored in your current working folder. The file names will be appended with the password of each unit and a timestamp.

When each command finishes successfully, you should see the following message on completion of the command: “> All operations complete.”

If even after repeating the command you are unable to get the EEPROM dumps of all the devices, STOP NOW and contact Seed Robotics technical support.

You should store the resulting files in a safe location, as they may be needed to restore operation of the unit, in the unlikely event that any unexpected issue occurs.

Install the new Firmware

Download the appropriate firmware file from the list at the beginning of the document.

Make sure the firmware file is the correct one for your actuators. The bootloader will not verify this.
Using an incorrect file may cause damage to the unit.

At the console window type:

[Linux and Mac users: prepend './' to the commands]

For the RH4D:
(remember: do not move on to the next command before the previous one finishes successfully; if you are unable to get a command to finish successfuly, please contact our Technical Support. DO NOT move on to the next command.)

TIP: The RH4D uses the seed56 actuators, so the firmware file to use, is the one for the seed56 actuators.

tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=B -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=C -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]

For the RH5D:
(remember: do not move on to the next command before the previous one finishes successfully; if you are unable to get a command to finish successfuly, please contact our Technical Support. DO NOT move on to the next command.)

TIP: The RH5D uses the seed28 actuators, so the firmware file to use, is the one for the seed28 actuators.

tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=E -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=F -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=G -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]

For the RH7D:
(remember: do not move on to the next command before the previous one finishes successfully; if you are unable to get a command to finish successfuly, please contact our Technical Support. DO NOT move on to the next command.)

TIP: The RH7D uses the seed28 actuators, so the firmware file to use, is the one for the seed28 actuators.

tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=B -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=C -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=E -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=F -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=G -fop=ewv -ffile=[Firmware file name (for seed28 actuators)]

For the RH8D:
(remember: do not move on to the next command before the previous one finishes successfully; if you are unable to get a command to finish successfuly, please contact our Technical Support. DO NOT move on to the next command.)

TIP: The RH8D uses the seed67 actuators for the devices with password A, B and C, and seed56 actuators for the devices with passwords D, E, F, G and H.

tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=A -fop=ewv -ffile=[Firmware file name (for seed67 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=B -fop=ewv -ffile=[Firmware file name (for seed67 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=C -fop=ewv -ffile=[Firmware file name (for seed67 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=D -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=E -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=F -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=G -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]
tsbloader_adv.exe -port=[serial port] -prewait=2000 -pwd=H -fop=ewv -ffile=[Firmware file name (for seed56 actuators)]

During the update process, the LED on the hand will blink, as a visual cue to the process.

When each command finishes successfully, you should see the following message on completion of the command: “> All operations complete.”

If you encounter an error, do not proceed to the next command until you resolve the error with the current command. You may repeat the command that is giving you the error.
If even after repeating the command you are unable to install the new firmware on all the devices, STOP NOW and contact Seed Robotics technical support.

Disable bridge mode

Now that the firmware update is complete, we can disable the Bride mode in the EROS Main board to resume normal operation.

[Linux and Mac users: prepend './' to the command]

tsbloader_adv.exe -port=[serial port] -seederos=broff

Once you enter this command, the LED on the unit should return to its regular colour.

Alternatively you my simply power cycle the unit (by disconnecting the USB cable AND disconnecting power from the main interface port). Upon reboot the unit will be back to the regular operating mode.

Testing the new version

Now that we've upgraded the firmware on the units, it is time to test it.

The new version number can be confirmed by reading memory position 2 in the Control Table for the Seed Robotics Smart Actuators

You can also run your code and verify that it is now working, hopefully with better performance delivered by the actuators.

FAQ and Troubleshooting

Even though we've tested and re-tested the procedure, we know things can go wrong; in particular, the firmware update for the actuators is a multi-step process where something may be missed along the way. Here are some common issues:

  • The binary won't run on Linux or MacOS

If the binary refuses to run on Linux, you may need to give appropriate permissions by typing chmod +x tsbloader_adv.exe

  • I get an error regarding the serial port on Linux

This is a common issue under Linux. The /dev/ttyXXXx devices are often added to dial-out group. If you are running as non-root, at the command prompt type:
sudo usermod -a -G dialout $USER
Next you need to log out and log back on.

Some older Linux distributions included a “modemmanager” module that may also occupy the port. While this is quite uncommon today, if the above still won't resolve the issue, you can try uninstalling “modemmanager” by typing sudo apt-get remove modemmanager (or the equivalent for your distribution)

  • When I try to install Mono on my system, the apt-get install … command returns and error.

Make sure you have followed the Installation instructions for your OS, on the Mono website. Even different versions of the same distribution have different instructions.
If the problem persists try running sudo apt-get clean followed by sudo apt-get update. Next retry insttaling the package with the apt-get install … commmand.
For further assistance on installing Mono, we recommend checking the Mono project website.

If you do run into any issue not covered here, or would simply like some additional guidance, please get in touch with our Technical Support (support@seedrobotics.com) and we'll be happy to assist you.

Copyright © 2015-2019 Seed Robotics Ltd

  • eros/seedactuators/upgrading_fw.txt
  • Last modified: 2019/02/20 11:10
  • by pedro.ramilo