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.