This was intended as a set of tools that let you modify the HC-12 v2.4 firmware to run your own code on the onboard STM8S MCU.
However, developing in this environment is tricky, so it’s typically easier to just use the firmware to extract the radio params and then write your own custom firmware. Checkout https://github.com/rumpeltux/hc12fw for this.
To avoid any problems with copyright, this repository does not contain the proprietary firmware image itself, but rather provides tools to extract a personal backup, so that you can restore the original firmware after experimenting with your own.
Writing your own firmware is useful if you
- need different peripheral connections (besides UART)
- have simple sender / receiver logic that can be baked into the MCU
- or want to adjust params of the radio configuration.
This procedure is currently only known to work with a device that responds with
www.hc01.com HC-12_V2.4
to the AT+VER
command.
To make a backup of your firmware, follow these steps:
- Use a USB-to-serial converter, and connect the HC-12 according to the official pinout.
- VCC can be anything from 3.3 to 5.5V.
- Make sure that the SET pin is connected to GND.
Run the firmware extraction tool:
./firmwaredump -d /dev/ttyUSB0 -f hc12-fw.bin
The tool overwrites the AT+VER
command handler by flashing a short segment of code.
AT+VER
then dumps the original firmware (except for the original AT+VER handler,
but you should be able to guess its contents).
If your custom software messes up the chip’s functionality, you can always restore (almost) the original firmware. You’ll need a programmer (an stlink or an esp8266 with espstlink).
You can then reflash the firmware using stm8flash
. First you need to
disable both readout protection and write protected pages, which will erase flash and eeprom.
echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
stm8flash -c espstlink -p stm8s103f3 -s opt -w factory_defaults.bin
We also need a little patch to the firmware (it sets up the actual entry point in eeprom on first run):
echo "02: 8590" | xxd -r - hc12-fw.bin
Now we can flash it and the chip should work as it did before:
stm8flash -c espstlink -p stm8s103f3 -w hc12-fw.bin
- Si4463 Datasheet
- STM8S Datasheet
- Pinout (all partially incomplete, but still helpful).