VoltLink revC CP2102N USB Serial Bridge & ESP32 Programmer | Voltlog #405

Welcome to a new Voltlog, a rather short video for today. I’m gonna be showing you the latest revision of the VoltLink USB To Serial Adapter. This is revision C and while this revision doesn’t necessarily bring any new functionality to the VoltLink it does optimize the design for manufacturing a little more which makes it easier for me to build these units.

Before I go into more details let me just quickly mention that if you would like to order one of these, they are available on Tindie and there will be links in the video description to the product page.

So like I mentioned, no new functionality added in revC, but that’s okay because I’m pretty happy with the functionality we have so far, I mean there is USB Type-C which means you no longer need to resort to the older micro usb cables, you got over current protection at 500mA, ESD protection.

We still have a high quality, high speed, usb to serial converter in the form of the CP2102N which enables baud rates up to 3M baud and this significantly improves the time you need to flash your board and you will quickly get used to this higher speed so much that when you switch to some other converter or board that only supports lower baud rate you will feel how slow that is.

We still have the 500mA rated low dropout regulator which provides 3.3V to the target board and 500mA is enough to cover the majority of boards that you will be programming. For example all of the ESP32 based boards that I design can be powered by the VoltLink while flashing firmware with no issues. Additionally I showed in a recent video that with a custom optional cable that you can order with the VoltLink you can safely flash Shelly relays without having them connected to mains voltage.

7 thoughts on “VoltLink revC CP2102N USB Serial Bridge & ESP32 Programmer | Voltlog #405”

    1. Hi,
      Although the Shelly 1PM is not supported as plug&play because it uses a different pinout, you can still flash it by manually wiring up the correct signals.
      GND>GND, IO0>GPIO0, 3V3>3V3, TXD>RXD, RXD>TXD.

  1. Thanks,
    I have done that, but hit. Hopefully you know steps to flash ESPHome to Shelly Plus1PM with VoltLink.

    I’m doing this from a MacMini USBC port, so hopefully power is not an issue ones suggestion on esphome link in error)

    A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x80): Possible serial noise or corruption.
    For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html

    This is with pressing the button on Shelly Plus 1PM when I connect VoltLink to USB. So Shelly starts with its red led dim. And when I flash the red led on Shelly changes intensity and both rx/tx red/green leds on VoltLink flash. I have double checked that I have cross-connected rx-tx + tx-rx.

    Running esptool.py on command line:
    esptool.py –trace –before default_reset –after hard_reset –baud 115200 –port /dev/tty.SLAB_USBtoUART –chip esp32 write_flash -fm dio -z –flash_size 4MB 0x10000 …

    I’m hoping its just a case of knowing how to press the button on the Shelly, or options for esptool.py

    Rebooting shelly with a serial tool at 11520 baud, gives some output. So hopefully basic VoltLink serial connectivity is ok:
    bcn 0del if1usladd if1dhcp server start:(ip:,mask:,gw: 100

  2. I actually have a Shelly1PM ESP8266 (not an ESP32 Shelly Plus 1PM)

    But same kind of fail flashing with -chip esp8266:

    esphome-config % esptool.py –trace –no-stub –before default_reset –after hard_reset –baud 74880 –port /dev/tty.SLAB_USBtoUART –chip esp8266 write_flash –flash_size 1MB –no-compress -fm dio 0x0 ……/firmware.bin
    esptool.py v3.3.1
    Serial port /dev/tty.SLAB_USBtoUART
    Connecting…TRACE +0.000 command op=0x08 data len=36 wait_response=1 timeout=0.100 data=
    0707122055555555 5555555555555555 | … UUUUUUUUUUUU
    5555555555555555 5555555555555555 | UUUUUUUUUUUUUUUU
    55555555 | UUUU
    TRACE +0.000 Write 46 bytes:
    c000082400000000 0007071220555555 | …$…….. UUU
    5555555555555555 5555555555555555 | UUUUUUUUUUUUUUUU
    5555555555555555 5555555555c0 | UUUUUUUUUUUUU.
    TRACE +0.007 Read 1 bytes: 30
    TRACE +0.000 Read invalid data: 30
    TRACE +0.000 Remaining data in serial buffer:
    2c20657063339786 848484c484e18dd9 | , epc3……….
    859191c9f5307830 303030303030302c | …..0x00000000,
    20646570633d3078 3030303030303030 | depc=0x00000000
    0d0a466174616c20 65786365707469 | ..Fatal excepti
    .TRACE +0.056 command op=0x08 data len=36 wait_response=1 timeout=0.100 data=

    1. Mark, let me look into this as I currently don’t know what it takes to flash that particular model. I’ll get back to you as soon as possible.

    2. I’ve looked into this further and I think the problem is that the ESP8266 is not put into correct bootloader mode. You see, on the supported devices, this would normally happen automatically with the VoltLink by switching GPIO0 low while toggling reset.

      But on the Shelly 1PM, reset line is not exposed so even if the VoltLink toggles GPIO0, the ESP8266 doesn’t not react because it doesn’t get a reset.

      Something that I would try is to, hold GPIO0 low manually while connecting 3V3 to the relay. This way it might go into correct bootloader mode when it starts up.

  3. Thanks,
    Yes everything worked perfectly when holding GPIO0 low from power-on, then once programmed re-power with GPIO0 unconnected.

    I’ll probably solder up a small prototype board with a switch to make easier and avoid risk of putting jumper wires to wrong pin when connect the Shelly1PM.

Leave a Reply

Your email address will not be published.