Skip to content

Twonkie Introduction

Twonkie is an open source USB Power Delivery protocol sniffer and debugging tool, created by Joachim "dojoe" Fenkes, based on Google's Twinkie. It can:

  • Measure voltage and current on the Vbus and Vconn rails (version 2.0 can handle EPR voltages up to 48V)
  • Capture USB-PD packets for later analysis
  • Pass through signals at full speed (20Gb/s lanes are verified to work)
  • Send USB-PD packets

Twonkie can be bought in 3mdeb shop.

Links:

Setup

Preparation

  • USB Micro-B cable
  • Twonkie v2.0
  • USB-PD power meter

For flashing and using the Twonkie, you will need to install dfu-util and minicom. You can find them in your Linux distro's repositories:

sudo apt install dfu-util minicom
sudo dnf install dfu-util minicom
sudo pacman -S dfu-util minicom

Flashing

Steps to flash firmware to the Twonkie:

  1. Download the latest firmware from the project's release page In our case, for Twonkie v2.0
  2. While holding the SW1 button on the Twonkie, connect it to your computer using a USB micro-B cable
  3. Verify in lsusb that the device has booted in DFU mode:

    lsusb | grep 0483:df11
    Bus 003 Device 083: ID 0483:df11 STMicroelectronics STM Device in DFU Mode
    

    If not detected, the button was probably not pressed.

  4. Navigate to the location where you downloaded the firmware

  5. Flash the firmware:

    The command may take a long time to complete (~30 minutes). Do not be alarmed if progress appears to stop. The percentage counting should start after ~5 minutes.

    sudo dfu-util -a 0 -s 0x08000000 -D ~/Downloads/twonkiev2-20230611.bin
    

    If you see DFU state(10) = dfuERROR, status(10) = Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations this is a status message from STM describing why DFU mode was entered. Flashing is probably working properly

  6. Disconnect and reconnect the newly flashed Twonkie to reboot it into the firmware

  7. Verify in lsusb that the device has booted into firmware:

    lsusb | grep 18d1:500a
    Bus 003 Device 084: ID 18d1:500a Google Inc. Twinkie
    

Testing

Sniffing a PD negotiation

  1. Open minicom on Twonkie's console:

    sudo minicom -D /dev/ttyUSB0
    
  2. Type in tw trace on to start logging

LEDs stops lighting

  1. Connect a twonkie between a USB-PD power supply and a USB-PD power sink Twonkie connected between a laptop and PD charger
  2. Verify that the device is charging and logs appear on the screen

Example output:

> tw trace on
33.754913 SRC/0 [41a1]SRCCAP 5000mV/3000mA 9000mV/3000mA 15000mV/3000mA 20000mV/3250mA
33.906189 SRC/0 [41a1]SRCCAP 5000mV/3000mA 9000mV/3000mA 15000mV/3000mA 20000mV/3250mA
34.057128 SRC/0 [41a1]SRCCAP 5000mV/3000mA 9000mV/3000mA 15000mV/3000mA 20000mV/3250mA
34.208091 SRC/0 [41a1]SRCCAP 5000mV/3000mA 9000mV/3000mA 15000mV/3000mA 20000mV/3250mA
34.359253 SRC/0 [41a1]SRCCAP 5000mV/3000mA 9000mV/3000mA 15000mV/3000mA 20000mV/3250mA
34.360608 SNK/0 [0041]GOODCRC
34.364597 SNK/0 [1082]REQUEST{4} 43851545
34.365421 SRC/0 [0121]GOODCRC
34.367411 SRC/1 [03a3]ACCEPT
34.368118 SNK/1 [0241]GOODCRC
34.593451 SRC/2 [05a6]PSRDY
34.594166 SNK/2 [0441]GOODCRC
34.595642 SRC/3 [17af]VDM Vff00:DISCSVID,INI:ff00a002
34.597310 SRC/3 [17af]VDM Vff00:DISCSVID,INI:ff00a002
34.598213 SNK/3 [0641]GOODCRC
34.602898 SNK/1 [328f]VDM Vff00:DISCSVID,ACK:ff00a042 8087ff01 00000000
34.603946 SRC/1 [0321]GOODCRC

Measuring voltage and current

  1. Open minicom on Twonkie's console:

    sudo minicom -D /dev/ttyUSB0
    
  2. Connect a twonkie between a USB-PD power supply and a USB-PD power sink Twonkie connected between a laptop and PD charger

  3. Type in tw vbus to display the voltage and current measurement

Example output:

> tw vbus
VBUS = 20112 mV ; -1274 mA

Power sink

  1. Open minicom on Twonkie's console:

    sudo minicom -D /dev/ttyUSB0
    
  2. Connect a twonkie between a USB-PD power supply and a USB-PD power meter

  3. Type in tw sink to enable sink mode - the firmware will reboot at this point
  4. Type in pd 0 dev 20 to set voltage limit to 20V
  5. Verify that the power meter turns on and displays 20V measured at the USB-C plug
  6. Verify that the RGB LED has changed its color to red

    • For the 5V limit the LEDs are GREEN.
    • For the 9V, 12V, 15V limit the LEDs are BLUE.
    • For the 20V limit the LEDs are RED.

Example of a successful test:

Twonkie connected between a power meter and PD charger