Tooling and findings for running an E8x/E9x electric power steering unit
outside its donor car, e.g. in an EV conversion.
Headline result: the EPS needs only two CAN messages plus a 12V enable
wire, not the 69-message set the car puts on the bus:
0x130 CAS terminal status (100ms) brings the unit up
0x1A0 DSC road speed (20ms) sets the assist level
Total required rate is 60 frames/s. Protocol write-up, including what is
proven vs. inferred and the open questions, is in eps-comms/.
Contents:
adapters/ CANdapter (its SLCAN dialect differs) and generic SLCAN
gateway/ car<->EPS relay, replay, message bench, EPS controller,
4-tab Streamlit UI
decoder/ PT-CAN frame decoding and live/replay sources
can-io/ XIAO ESP32-S3 firmware: CAN IO board + USB-CAN bridge with
a CAN-independent digital IO channel
tools/ capture, bitrate scan, startup-order and session analysis,
checksum solver
captures/ reference working session + the replay set eps_control reads
31 lines
881 B
Text
31 lines
881 B
Text
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
.venv/
|
|
venv/
|
|
*.egg-info/
|
|
|
|
# macOS
|
|
.DS_Store
|
|
|
|
# PlatformIO build output and local IDE state (can-io/firmware)
|
|
.pio/
|
|
.pioenvs/
|
|
.piolibdeps/
|
|
.vscode/
|
|
!.vscode/extensions.json
|
|
|
|
# Streamlit
|
|
.streamlit/secrets.toml
|
|
|
|
# ---------------------------------------------------------------- captures --
|
|
# Session logs are large (tens of MB) and regenerable by re-running a test,
|
|
# so they stay out of git. The two reference captures below are excluded
|
|
# from this rule because they are inputs, not outputs:
|
|
# - replay_car_to_eps_*.csv is what gateway/eps_control.py reads to get
|
|
# genuine per-terminal-state frames; without it the EPS can't be driven.
|
|
# - gateway_20260829_164540.csv is the reference working session every
|
|
# analysis in eps-comms/ refers back to.
|
|
captures/*.csv
|
|
!captures/replay_car_to_eps_*.csv
|
|
!captures/gateway_20260829_164540.csv
|