Skip to content

700 series Controller Firmware Updates (Linux)

kpine edited this page Feb 4, 2022 · 117 revisions

Overview

This guide describes how to perform Over-The-Wire (OTW) firmware upgrades for Z-Wave 700-series controllers, in a Linux environment.

If you already have the Silicon Labs PC-Controller software, and don't mind temporarily relocating the USB stick into a Windows PC, that is another solution.

If you have access to, and are familiar with building the Z/IP Gateway, then another option is to use the zw_programmer application. This CLI application is capable of upgrading firmware, which makes it the easiest option for Linux users, if you have the ability. This method is out of scope for this article.

Read on if you want to update from a Linux installation using freely available tools.

Equipment Used

  • Platform: Raspberry Pi4
  • OS: Raspberry Pi OS 64-bit (Debian 10)
  • Silicon Labs SLUSB001A USB controller
  • minicom version 2.7.1

Also confirmed to work with:

  • Raspberry Pi4 and Ubuntu 20.04 64-bit
  • Raspberry Pi2 Model B and Raspberry Pi OS 32-bit

Credits, References, and Other How-Tos

Firmware Files

Firmware files are distributed by Silicon Labs via the Z-Wave SDKs, and they are also provided by Aeotec. Currently no other vendors are known to be distributing the files.

There are currently two types of 700-series Z-Wave modules for gateways and controllers: EFR32ZG14 and ZGM130S. You will need to determine which of these modules your controller uses, because the firmware files are different for each. The update process will fail if the wrong file is used.

These controllers are known to use the EFR32ZG14 module:

  • Aeotec Z-Pi 7
  • Aeotec Z-Stick 7
  • Silicon Labs UZB7 (SLUSB001A)

These controllers are known to use the ZGM130S module:

  • Zooz ZST10 700

The firmware files have a .gbl file extension (Gecko Bootloader) and are named with the following formats:

  • ZW_SerialAPI_Controller_*_ZGM130S_REGION_*.gbl for ZGM130S modules
  • ZW_SerialAPI_Controller_*_EFR32ZG14_REGION_*.gbl for EFR32ZG14 modules.

As of SDK v7.17.00, Silicon Labs is distributing the firmware files as part of the Gecko SDK on GitHub. These public files can be downloaded without requiring a developer account or using the Silicon Labs Simplicity Studio application.

Some vendors will distribute firmware files on their own, for example Aeotec. In this case, you may want to prefer the vendor release.

The Gecko SDK GitHub project is very large to clone or download. If all you need is to download the controller firmware, use GitHub's "Go to file" button to find the file you need. The entire list of files, which will be truncated, is here.

For convenience, here are the latest US and EU region files:

The entire SDK, including firmware files, can also be downloaded as a zip file, from the official releases page.

Preparation

All commands listed here are being executed as the root user, to avoid any problems with permissions.

  1. Install minicom and file transfer utilities.
$ apt install -y minicom lrzsz
  1. Determine the path to the Z-Wave controller's serial device. For a UZB7 and other 700-series USB controllers, this will typically be /dev/ttyUSB0.

  2. Set an environment variable for the USB path. This is used in commands below for easy copy and paste.

$ export USBPATH=/dev/ttyUSB0
  1. Create a minicom profile named zwave that configures the serial port for FW upload. This configures the following settings:
  • Configures serial port speed.
  • Disables hardware flow control.
  • Removes all file transfer options except xmodem upload.
$ cat << EOF > /etc/minicom/minirc.zwave
# Machine-generated file - use "minicom -s" to change parameters.
pu pname1           YUNYY
pu pname2           YUNYY
pu pname4           NDNYY
pu pname5           NDNYY
pu pname6           YDNYN
pu pname7           YUYNN
pu pname8           NDYNN
pu pname9           YUNYN
pu updir            /tmp
pu port             $USBPATH
pu baudrate         115200
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No
EOF

This is a one time setting and isn't necessary for future upgrades. The profile settings are stored in /etc/minicom/minirc.zwave.

  1. Download or copy the controller firmware file to /tmp.

  2. Stop zwavejs2mqtt or other zwave-js application so it doesn't interfere. Some users have reported that this step isn't necessary.

Installation

All commands listed here are being executed as the root user, to avoid any problems with permissions.

  1. Configure the serial port speed. minicom would normally do this, but we issue a couple commands from the shell.
$ stty 115200 cs8 -cstopb -F $USBPATH
  1. Soft-reset the controller and wait long enough for it to recover.
$ printf '\x01\x03\x00\x08\xf4' > $USBPATH && sleep 10
  1. Drop the controller into the bootloader.
$ printf '\x01\x03\x00\x27\xDB' > $USBPATH && sleep 1
  1. Start minicom to connect to the device console. Be sure to use the profile configured previously.
$ minicom -o zwave
  1. Press ENTER (one or more times) and you'll see the bootloader prompt. Enter 1 to upload the firmware. The letter C will be printed repeatedly to indicate that the controller is waiting for an upload.
Gecko Bootloader v1.5.1
1. upload gbl
2. run
3. ebl info
BL >
begin upload
CCCC
  1. Enter CTRL-A s to open the file upload dialog. xmodem will be the only option, so select it. Navigate the menu so the firmware file is highlighted and select it with Spacebar, then press Enter to upload.

  2. When the upload finishes, select option 2 in the bootloader menu to run the new firmware. Some garbage characters will appear, meaning the firmware is running. Exit minicom with CTRL-A q and select Yes to exit.

  3. Start zwavejs2mqtt or other zwave-js application. If for some reason you have soft-reset disabled in zwave-js (you shouldn't), be sure to issue a soft-reset prior to starting the application. Confirm the controller firmware has changed to the expected version.

Clone this wiki locally