Release binaries and latest builds of AT Firmware for mDot, xDot, xDot-ES, and xDot-AD hardware.
See Change Log for release notes.
A cross-platform Python tool is included for updating Dot devices over serial, replacing the TeraTerm/TTL script dependency.
- Python 3.7+
- Install dependencies:
pip install -r tools/requirements.txt
# List available firmware
python tools/dot-upgrade.py list
# List available serial ports
python tools/dot-upgrade.py ports
# Upgrade a device (auto-selects correct APPS/ file, handles CRC)
python tools/dot-upgrade.py upgrade XDOTAD US915 /dev/ttyUSB0
python tools/dot-upgrade.py upgrade MDOT EU868 COM3
# Launch the graphical interface
python tools/dot-upgrade.py --gui
# Prepare an image without sending (strip bootloader, add CRC)
python tools/dot-upgrade.py prepare MDOT firmware.bin
# List available firmware versions (from git tags)
python tools/dot-upgrade.py versionsThe tool automatically:
- Selects application-only images from the
APPS/directory (prevents the common mistake of flashing a full bootloader+application image via the bootloader) - Appends CRC32 for devices that require it (mDot, xDot-AD)
- Strips the bootloader if a full image is provided
- Detects serial ports
See also: Dot Development for more details on serial firmware upgrades.
| Device | Directory | CRC Required | Bootloader Command | Upgrade Timeout |
|---|---|---|---|---|
| mDot | MDOT/ |
Yes | upgrade ymodem |
~30s |
| xDot | XDOT/ |
No | upgrade |
Immediate |
| xDot-ES | XDOTES/ |
No | upgrade |
Immediate |
| xDot-AD | XDOTAD/ |
Yes | upgrade |
~90s |
To enter the bootloader for serial firmware upgrades, the device must be reset and a specific key sequence must be received within 250ms of boot. The upgrade tool handles this automatically, but the behavior varies by bootloader version and serial interface.
| Bootloader Version | AT/Command Port | Debug Port | Notes |
|---|---|---|---|
| v0.1.x | N/A | Any keypress | Single port only (xDot mbed-os-5) |
| 1.0.0 - 1.1.9 | mts |
Any keypress | STM32 and MAX32670 targets |
| 1.2.0 | mts |
mts (MAX32670) / Any keypress (others) |
MAX32670 debug port now requires key; Python tool broken |
| 1.2.2+ | mts |
mts (MAX32670) / Any keypress (others) |
Fixed: accepts bootloader entry on either port even with noise on other port; Python tool fixed |
The key
xdtwas used in some intermediate xDot bootloader builds but was changed tomtsbefore any tagged release. The upgrade tool tries both keys for compatibility.
Debug port (auto-detected or --debug-port):
- Sends a serial break to reset the device
- Watches for the
[INFO] MultiTech Bootloader x.x.xbanner on the debug output - Parses the bootloader version from the banner and selects the correct key:
- Version < 1.2.0: any keypress (newlines) is sufficient
- Version >= 1.2.0 on MAX32670 (xDot-ES/AD): sends
mts - Version >= 1.2.0 on other devices: any keypress is sufficient
- Floods the selected key immediately to catch the 250ms input window
- If serial break does not work, prompts the user to manually reset the device
AT command port (auto-detected or --at-port):
- Sends
ATZto reset the device - The bootloader version is not visible on the AT port, so the tool tries
mts(thenxdtas fallback) via echo-detection — the bootloader echoes each character, confirming it is running
mdot-firmware-x.x.x-ppppp-mbed-os-x.x.x.bin
xdot-firmware-x.x.x-ppppp-mbed-os-x.x.x.bin
xdotes-firmware-x.x.x-ppppp-xdot-max32670.bin
xdotad-firmware-x.x.x-ppppp-xdot-max32670.bin
Full image with application and bootloader. Suitable for flashing via drag-and-drop or JTAG/SWD.
WARNING: Do NOT use full images for bootloader serial upgrades. Use application-only images from the
APPS/directory instead, or let the upgrade tool handle the conversion automatically.
mdot-firmware-x.x.x-ppppp-mbed-os-x.x.x-application.bin
xdot-firmware-x.x.x-ppppp-mbed-os-x.x.x-application.bin
xdotes-firmware-x.x.x-ppppp-xdot-max32670-application.bin
xdotad-firmware-x.x.x-ppppp-xdot-max32670-application.bin
Application-only builds (no bootloader). Used when updating firmware via the bootloader over serial or over-the-air (FOTA). These are located in the APPS/ subdirectory of each device folder.
Debug builds have additional functionality and log output for debug and trace levels. Suitable for flashing via drag-and-drop or JTAG/SWD.
xdot-firmware-x.x.x-ppppp-mbed-os-x.x.x-debug.bin
- No bootloader
xdot-firmware-x.x.x-GLOBAL-mbed-os-x.x.x-debug.bin
- Includes all channel plans
- Allows changing frequency bands
AT+DFREQ=AS923
AT&WP
ATZ
mdot-firmware-x.x.x-ALL-PLANS-mbed-os-x.x.x-debug.bin mdot-firmware-x.x.x-GLOBAL-mbed-os-x.x.x-debug.bin
- Includes all channel plans
- Allows changing frequency bands
AT+DFREQ=AS923
AT&WP
ATZ
The TeraTerm TTL script (tools/dot-serial-update.ttl) is still available for Windows users who prefer TeraTerm. The Python upgrade tool above is the recommended replacement.