This is a simple cross-platform program for updating firmware on Keypad:GO!. It is intended to make the update as robust as possible by detecting which board variant you have and making sure the firmware matches it.
This is the program I use to flash boards in production.
The Keypad:GO! update is distributed as a firmware package, which is a ZIP file. The package contains different builds of the firmware for each board variant.
You can get a prebuilt firmware package from the firmware section of the user
manual, the
releases page on
GitHub or you can build
your own using the package.sh
script in the firmware repository.
You will need a Rust toolchain installed via rustup
.
Check out a copy of this repository and open a terminal inside it.
Connect Keypad:GO! to your computer using a TTL serial cable as described in its
user manual. Your TTL serial cable will show up as a named serial port, but the
name will depend on your operating system and how many other ports are available
-- usually something like /dev/ttyUSB1
or COM3
. For these instructions,
we'll call it PORT
; replace PORT
below with the correct name for your
computer.
Press and hold Keypad:GO!'s UPDATE button, and, while holding it, tap the RESET button. This will reset Keypad:GO! into firmware update mode. (You can then release the UPDATE button.)
Run:
cargo run -p PORT path/to/your/firmware/archive.zip
It will print some stuff describing the chip it found and indicate progress. On
success, the final line printed will be OK
.
You can get a description of current options by running cargo run -- --help
.
It will print something like the following (note: this output is probably out of
date, run the current code for the modern equivalent):
Updater for Keypad:GO! firmware
Usage: keypad-go-updater [OPTIONS] -p <PORT> <ARCHIVE>
Arguments:
<ARCHIVE> Path to the firmware archive (.zip file)
Options:
-p <PORT>
Name of serial port to use. Specific to your operating system. Often
something like `/dev/ttyUSB0` or `COM3`
-b <BAUD_RATE>
Programming baud rate. Rates up to 115200 work well in practice, but
may corrupt the "target's first words" printed after programming since
we have to downshift to 19200 there [default: 19200]
--run-baud-rate <RUN_BAUD_RATE>
Expected output baud rate of target. Must match firmware. Probably want
to leave this the default [default: 19200]
-v, --verbose
If set, spams more information to your terminal
-h, --help
Print help