How to flash latest firmware to ITead SONOFF Zigbee 3.0 USB Dongle Plus adapter
Tip! Unofficial FW flashing without the open case → https://github.com/JelmerT/cc2538-bsl/pull/114
Update! Broken down the steps to flash firmware mentioned from Add Itead Sonoff CC2652P usb stick bootloader invoke toggle by JelmerT · Pull Request #114 · JelmerT/cc2538-bsl · GitHub into a basic guide for flashing ITead SONOFF Zigbee 3.0 USB Dongle Plus adapter.
This guide use the cc2538-bsl tool from JelmerT's latest "master" branch on GitHub and could easily be made to work on all operating systems. I tested on Windows OS but others have done this on Linux and Mac OS by using different Serial/COM-port addressing as the steps should otherwise be the same.
Guide for updating firmware via cc2538-bsl Python tool without opening enclosure
- Install Silabs CP210x device drivers (CP2102N USB-to-UART bridge / USB-to-Serial converter chip) needed for Windows OS and Mac OS, (this also required a reboot of my operating-system).
- Install Python (in my case I installed and tested with Python for Windows 3.10.1).
- Launch command-prompt (cmd.exe) as elevated Administrator. Upgrade pip with
python -m pip install --upgrade pip, (if pip is not available then first runpython -m ensurepip --upgrade), then pre-install dependencies fro cc2538-bsl from PyPi via pip command:pip install wheel pyserial intelhex python-magic - Optional but recommended: Download and install zigpy-znp via pip/PyPI with
pip install zigpy-znpthen perform NVRAM backup by following instructions in TOOLS.md (also find more details ZNP radio backup procedure at Coordinator Backup and Migration · zigpy/zigpy Wiki · GitHub) for Windows backup command should be something likepython -m zigpy_znp.tools.nvram_read COM5 -o nvram_backup.jsonand optionally also backup Zigbee network viapython -m zigpy_znp.tools.network_backup COM5 -o network_backup.json - Download cc2538-bsl on GiHub from its "master" branch, (and not via pip/PyPI), unpact the zip to a folder then launch command-promt (cmd.exe) as elevated Administrator and run its
setup.pyto install its dependencies (should include "setuptools", "wheel", "pyserial", "intelhex", and "python-magic" packages). - Get latest firmware (I tested latest "
CC1352P2_CC2652P_launchpad_*.zip" image available from its "master" branch at this time. Alternatively, you could get the latest "beta" version from the develop branch). Regardless make sure to get the correct image file as should be the one for "launchpad" (and not for "other)"! - Stop any applications or services that might be connected to the Zigbee adapter via serial port (ex. Home Assistant's ZHA integration, Zigbee2MQTT, ioBroker, Jeedom, etc.). In my case, I ran the update on another computer so nothing to stop there.
- Run command to flash from command-promt (cmd.exe) launched as elevated Administrator, example with firmware release available at this time:
python cc2538-bsl.py -p COM5 -e -v -w --bootloader-sonoff-usb CC1352P2_CC2652P_launchpad_coordinator_20211217.hex
Obviously need to replace number in "COM5" with the port # actually shown used under ports in Device Manager on Windows on your computer as the OS will just assign the next available Serial/COM-port.
Also, if using Linux or Mac OS instead of Microsoft Windows then the COM# serial device path after -p will be different when set the port to use, (like for example /dev/ttyUSB0 or /dev/ttyUSB1) and might need different Silabs CP210x device drivers (CP2102N USB-to-UART bridge / USB-to-Serial converter chip) for your operating system, on Linux might have to run Python with sudo, and read that many on Linux successfully run sudo python cc2538-bsl.py -e -v -w --bootloader-sonoff-usb CC1352P2_CC2652P_launchpad_coordinator_20211217.hex without setting serial device path with -p for port to use.