Actual Reverse Engineering Deliverables
Generated Toolkit
A downloadable Python toolkit was generated for the Vector head/body protocol reverse-engineering workflow.
File generated:
Contents:
README.md
requirements.txt
tools/parse_saleae_uart.py
tools/packet_cluster.py
tools/detect_baud_notes.md
vector_body/messages.py
vector_body/protocol.py
vector_body/transport.py
diagnostics/body_cli.py
docs/hardware_capture_checklist.md
docs/connector_map_template.csv
docs/capture_log_template.csv
tests/test_protocol.py
What The Toolkit Does
UART capture parsing
tools/parse_saleae_uart.py:
Reads Saleae-style UART CSV exports.
Supports TX and RX capture files.
Sorts bytes by timestamp.
Splits likely packets using an inter-byte timing gap.
Prints timestamp, direction, length, hex bytes, and ASCII hint.
Packet clustering
tools/packet_cluster.py:
Reads parsed packet text.
Groups packets by direction, length, and byte prefix.
Helps spot repeated message types.
Protocol stubs
vector_body/messages.py and vector_body/protocol.py:
Define packet/message classes.
Provide checksum/packet-analysis placeholders.
Are intentionally conservative because the real protocol must be learned from captures.
Guarded diagnostic CLI
diagnostics/body_cli.py:
Skeleton CLI for future serial diagnostics.
Refuses to transmit unless explicitly launched with --unsafe-enable-tx.
This is intentional because transmitting to Vector’s body board before decoding the protocol could damage hardware or trigger unsafe motor behavior.
Hardware Capture Checklist
Required tools
Logic analyzer with UART decoder.
Multimeter.
Fine probe hooks or soldered test wires.
Common ground connection.
Optional oscilloscope.
Optional 2.8 V-safe USB UART adapter or level shifter for later transmit tests.
Signals to identify first
GND
2.8 V logic rail
VBAT / battery voltage
BODY_TX
BODY_RX
TXD
RXD
SCL2
SDA2
USB D+
USB D-
Capture sessions to record
Robot powered off / battery connected idle.
Boot sequence from cold start.
Idle after boot.
Wake/listen event.
Voice command that causes no movement.
Voice command that causes movement.
Manual lift/head movement if possible.
Docking/charging event.
Low-battery or charger attach/detach event if safe.
Capture settings
Start with passive high-impedance probing only.
Capture BODY_TX and BODY_RX simultaneously.
Try common UART baud rates if unknown: 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600.
Logic threshold should match observed logic level, likely around 2.8 V logic.
Do not inject signals yet.
Do not drive motors from external hardware yet.
Naming convention
Use filenames like:
captures/uart/2026-07-06_boot_115200_bodytx.csv
captures/uart/2026-07-06_boot_115200_bodyrx.csv
captures/uart/2026-07-06_move_forward_115200_bodytx.csv
captures/uart/2026-07-06_move_forward_115200_bodyrx.csv
Connector Map Template
For each connector/pad group, record:
connector pin label wire_color measured_voltage_off measured_voltage_on signal_guess confidence notes P1 1 GND black 0 0 GND high P1 2 2V8 red 0 2.8 logic power medium P1 3 BODY_TX unknown UART low
Capture Log Template
For each logic-analyzer capture, record:
capture_id date robot_state signals baud logic_threshold filename_tx filename_rx notes 001 2026-07-06 cold boot BODY_TX/BODY_RX 115200 1.4V boot_tx.csv boot_rx.csv
Next Step
Collect one clean boot capture of BODY_TX/BODY_RX and run:
python tools/parse_saleae_uart.py --tx boot_tx.csv --rx boot_rx.csv --gap-ms 10
python tools/packet_cluster.py parsed_packets.txt
Then update the protocol stubs based on repeated packet patterns.