Skip to content

700 series Controller Firmware Updates (Linux)

Keith Pine edited this page Jul 9, 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 (and MacOS) environment.

Other options:

  • Temporarily relocate your USB controller to a Windows PC and use the Silicon Labs PC-Controller software
  • zw_programmer: The Z/IP Gateway software includes this CLI utility to program the controller firmware. This requires obtaining access to the Z/IP Gateway SDK download and the ability to compile it, which will be difficult for most.
  • zpc: The zpc service provided by the Silicon Labs Unify SDK has the ability to program the controller firmware. This requires obtaining access to a private GitHub project and the ability to compile it, which will be difficult for most.

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

Equipment Used

The following hardware and software were used in the creation of this guide:

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

Any Unix-like OS (Linux, MacOS) that supports USB serial devices, minicom and lrzsz should work with this guide, although some tweaks may be necessary.

Confirmed to work with:

  • Raspberry Pi4 and Ubuntu 20.04 64-bit [*]
  • Raspberry Pi2 Model B and Raspberry Pi OS 32-bit
  • Apple Silicon and MacOS, using homebrew installed lrzsz and minicom [*]
  • Synology NAS with a Debian 10.9 Docker container [*]

References and Other How-Tos

Firmware Downloads

Most controllers use stock firmware images distributed by Silicon Labs via the Z-Wave SDKs. Vendors may also distribute the same files.

⚠️ An exception to this is the RaZberry devices, which use a custom firmware. This guide should not be followed for those devices. Contact the vendor for support.

Locate your controller and region in this table and click the Download link to download the latest firmware file. Downloads for both the stock (Silicon Labs) and vendor images are provided, which at this time are identical files. An MD5 value has been provided for verification.

Product Chipset Region Stock Firmware 7.17.2.406 Vendor Firmware 7.17.2.406 Checksum (MD5)
Aeotec Z-Pi 7 / Z-Stick 7 EFR32ZG14 EU Download Download 46ce88e5e61db37b9e96d906dcbc48a8
Aeotec Z-Pi 7 / Z-Stick 7 EFR32ZG14 US Download Download d88e9e94d3df62c0c4d5c591fd88f5b6
Silicon Labs UZB7 (SLUSB001A) EFR32ZG14 EU Download 46ce88e5e61db37b9e96d906dcbc48a8
Silicon Labs UZB7 (SLUSB001A) EFR32ZG14 US Download d88e9e94d3df62c0c4d5c591fd88f5b6
Everspring SA370 ZGM130S US Download 6cc0961168d209221869bdfd64d5a138
Zooz ZST10 700 ZGM130S US Download Download 6cc0961168d209221869bdfd64d5a138

The two current chipsets for 700-series Z-Wave modules for gateways and controllers are the EFR32ZG14 and ZGM130S. The firmware file must match the chipset, otherwise the update will fail, so choose the file that is listed for your device.

The stock files have a .gbl file extension (Gecko Bootloader) and are named using the following format: ZW_SerialAPI_Controller_<VERSION>_<EFR32ZG14|ZGM130S>_REGION_<REGION>.gbl.

⚠️ The file naming convention for v7.18.0.0 (SDK v4.1.0) has changed, so the above information will not be correct. This version is "Pre-Certified GA", so it is not yet recommended. See this discussion for details.

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

If you are in a different region not listed above, go to the SDK project's gbl directory and find the appropriate file. The listing may be truncated, so use GitHub's "Go to file" button to search for the file.

The entire SDK, including firmware files, can also be downloaded as a single 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
  2. 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.

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

    export USBPATH=/dev/ttyUSB0
  4. Create a minicom profile named zwave that configures the serial port for FW upload. This configures the following settings:

    • Set serial port speed.
    • Disable hardware flow control.
    • Hide all file transfer choices 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.

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

  6. 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
  2. Soft-reset the controller and wait long enough for it to recover.

    printf '\x01\x03\x00\x08\xf4' > $USBPATH && sleep 10
  3. Drop the controller into the bootloader.

    printf '\x01\x03\x00\x27\xDB' > $USBPATH && sleep 1
  4. Start minicom to connect to the device console. Be sure to use the profile configured previously.

    minicom -o zwave
  5. 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
  6. 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.

  7. 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.

  8. 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