How it started
After buying a comma3x and experiencing driving with it, I've been enamored. The hardware is great, the software is impressive, and the general documentation on installation is beginner friendly. I had no idea what the fuck I was doing and still managed to get my car configured and driving hands free for hours on end.
My car is from 2018. Some things that happened in 2018 for reference:
- XXXTentacion got murdered
- Mac Miller overdosed
- iPhone XS was released
- GPT1 was released
- The Parkland High School murders
- Saudi Arabia started issuing drivers licenses to women
- Waymo launched in Phoenix, users could request a ride via app
Is my car old or has technology gotten better way faster each year lately? Imma go with both. The comma3x has added features newer cars don't even have. I can stay hands and feet off as long as the driver monitor detects me paying attention, which I do. Some stats from the connect dashboard:

How it went
I wanted a little more performance out of my car. After digging through Discord, Reddit, and assorted websites I found out that there is a torque limitation applied by EPS (electric power steering) firmware on my model of Honda Civic, the 2018 Hatchback. It turns out that EPS torque value can be gently dialed up to improve the car's ability to take curves with more independence. That value is between 2x and 2.5x. By digging deeper, it seems this was found out a few years ago. Anything "substantially" over 2x will be banned from comma servers.
Here is how to perform the firmware modification in a generalized way.
- You need to find a branch of openpilot that contains an
eps-update.pyfile. Don't be dumb and pick just anything with that. You're going to need to read through what it does and see if it's what you want. Sorry if that is too much work. - You either need to dump and modify your firmware, download a dump and modify it, or you need to find pre-modified firmware files that match your make/model/year/firmware. You'll need to do the research for this. There is a google doc out there that has much of this info.
- Then it's like anything else... ssh in, kill the tmux session that's running openpilot, then run the command you see below.
If you don't kill the tmux session, the update will fail and your car will light up with every error light. I did this and honestly thought I had bricked my car. I had never felt so stupid and regretful then those few minutes when I couldn't make it work. I felt sick. I'm not car rich, I only got one and can't afford another one probably, they seem so expensive. And going to the dealership is a guaranteed bad time. Maybe the dealership can fix it but what would I even tell them? Things spiraled quickly...
My experience breaking things in production as a professional finally paid off and I stuffed my emotions deep down and refocused. Here's the terminal output from that successful eps update.
comma@comma-3c000000:/data/openpilot$ python eps-update.py --bus 1 --skip-checksum --danger mod.rwd
file format: b'Z'
file checksum: 0x28d5fc8
headers:
0 = ["b'\\x00'"]
1 = []
2 = ["b'0'"]
3 = ["b'39990-TGG-A110\\x00\\x00'", "b'39990-TGG-A120\\x00\\x00'", "b'39990-TGG,A120\\x00\\x00'"]
4 = ["b'\\x01\\x11\\x01\\x12\\x11 '", "b'\\x01\\x11\\x01\\x12\\x11 '", "b'\\x01\\x11\\x01\\x12\\x11 '"]
5 = ["b'\\x01\\x02\\x03'"]
keys:
k0 = 0x1
k1 = 0x2
k2 = 0x3
address blocks:
start = 0x4000 len = 0x4c000
Connecting to CAN address 0x18DA30F1
INFO: connecting to panda 0c0034000551333038363231
Using real client
tester present ...
Getting software version
Application Software ID = b'39990-TGG-A110\x00\x00'
Set diagnostic session type to 3 (extended diagnostic)
Security access request key for seed 1
key = b'\xacM'
Security access send key for seed 1
Set diagnostic session type to programming
Erasing flash
Setting firmware decryption key
Requesting download
100%|████████████████████████████████████████████████████████████████████████████████████████████████| 311k/311k [00:33<00:00, 9.34kB/s]
Requesting transfer exit
Checking programming dependenciesHow its going
It's going really, really well. It worked. My car now handles almost every situation on the highway without asking for assistance.
Recently openpilot pushed a update that disabled Honda vehicles like mine that had EPS mods. It was a silent change in a software upgrade. I was told I'd have to revert my EPS firmware back to original to get openpilot to work again with releases going forward. This was really poor communications from comma, which is how they roll. That's the trade off I've accepted to use their hardware and software.
To get my comma3x working again, I installed Sunnypilot (a community fork of openpilot) and things were back to normal. Sunnypilot is feature packed, contains more advanced options for the user to toggle, and allows swapping driving models.
Extras
There was such a lack of information out there on this modification. Much of the information is trapped on Discord, between multiple years of public messages and private messages between those who pioneered the mod. I wanted all the information I could get, so I dumped the entire fw-mods channel, used stock and modded firmware files and massaged the data together with my own personal questions into an LLM assisted report. I did my best to include citations so the message could found on Discord and viewed in that context if desired. The report is posted below.
Honda/Acura EPS Firmware Modification Analysis
⚠️ Safety Warning
Electronic Power Steering is a safety-critical system, and changing its firmware can affect how a car handles, stays stable, and stays safe. Everything below is informational only. Treat any modification to a vehicle control system as something to approach with extreme caution.
The official Comma.ai Discord channel puts it bluntly:
Executive Summary
This is a look at the Honda/Acura EPS firmware change usually called the "2.5x torque mod." Comparing the stock and modified binaries shows real changes to the steering-assist parameters — but the numbers don't match the marketing. The mod is sold as 2.5x more assist, yet some raw parameters jump by as much as 10.25x and 12.20x.
That gap isn't a contradiction. The EPS controller is non-linear, it clamps its own inputs, and the people who built the mod deliberately shaped the parameter curve so the effective increase lands near 2.5x. The rest of this document works through how that happens, drawing on both the binary comparison and the community discussions that produced the mod.
Files Analyzed
stock-39990-TGG-A120.rwd— original Honda/Acura EPS firmwaremod-39990-TGG,A120.rwd— modified firmware (the comma in the filename matters; see Firmware Identification)stock.hexandmod.hex— hex representationshatch.binandhatch.hex— additional firmware filesfw_chat.json— community discussion data
Key Parameter Changes
| Original (Hex) | Original (Dec) | Modified (Hex) | Modified (Dec) | Ratio | Likely Function |
|---|---|---|---|---|---|
| 0x14 | 20 | 0xF4 | 244 | 12.20× | Maximum steering assist gain |
| 0xF3 | 243 | 0xAC | 172 | 0.70× | Counter-torque / resistance |
| 0xA1 | 161 | 0xA7 | 167 | 1.03× | Assist activation threshold |
| 0x10 | 16 | 0xA4 | 164 | 10.25× | Torque assist gain |
Even the largest of these stays well under the system's ceiling. The highest modified value, 0xF4 (244), is only 14.67% of the firmware's clamping limit of 0x067F (1663) — leaving roughly 85% headroom. The big multipliers look alarming in isolation, but they're operating on small base numbers far below where the system actually caps things.
Why 2.5x and 10.25x Are Both "Correct"
The short answer: parameters don't map linearly to output torque, so a 10x change to one value doesn't produce 10x the steering force.
The control path is non-linear. FleetDog explains where the command actually goes:
There's also a second clamp that capped real output below 2x even when the table suggested more:
The values were tuned as a curve, not multiplied. Simply scaling the whole table broke things, so the developers raised the top value and rebuilt a deliberate slope underneath it:
The resulting shape was intentional — roughly "2.5x max torque up top" (FleetDog, January 9, 2020), sitting "about halfway ish between the stock curve and linear slope" (FleetDog, January 8, 2020), described by Kiril as "modifying the torque curve to be a bit more gradual on the way to 2.5x stock value" (February 28, 2020).
Honda's own limiters do the rest. The stock profile is preserved up to a point because that's what tested best:
How the Mod and openpilot Fit Together
Firmware Identification
Comma flags modified firmware by looking for a comma in the EPS version string:
self.eps_modified = False
for fw in CP.carFw:
if fw.ecu == "eps" and b"," in fw.fwVersion:
print("EPS FW MODIFIED!")
self.eps_modified = True
That's exactly why the modified file is named mod-39990-TGG,A120.rwd — the comma is the marker that lets openpilot recognize the mod and apply matching tuning.
Adaptive Torque Limiting in openpilot
When the mod is detected, openpilot stretches its own command above the 0xA00 (2560) threshold so it stays consistent with the firmware's reshaped top end:
if CS.CP.carFingerprint in (CAR.CIVIC) and self.eps_modified:
if apply_steer > 0xA00:
apply_steer = (apply_steer - 0xA00) / 2 + 0xA00
elif apply_steer < -0xA00:
apply_steer = (apply_steer + 0xA00) / 2 - 0xA00
So there are two non-linear curves doing complementary jobs: one in the firmware table, one in the openpilot command path. The key values to keep in mind are the table index range (0 to 0x6EE), the firmware clamp (0x067F), and the 0xA00 threshold where openpilot starts halving its extra command.
Why a Lookup Table Instead of a Single Knob
The mod edits a torque table, which is what gives it precision instead of brute force:
The table also matters because stock Honda response falls off fast away from center — the motivation gernby raised early on:
How the Mod Came Together
The 2.5x figure came out of road testing, not theory:
Tuning was iterative, and the team found the curve mattered more at the high end than the low end:
Safety Concerns and Enforcement
This was treated as genuinely dangerous from the start. Geohot noted an automaker had reached out directly:
And community members echoed it:
Push It Too Far and the Control Loop Breaks Down
Beyond roughly 6x, direction can reverse, and naively scaling the whole table makes the wheel dangerously twitchy:
Specific cars showed the same problem when mis-tuned — e.g. a 2016 Civic with .4, .12 producing "crazy wobble," and CR-V owners advised to swap parameters when their wheel wobbled.
Comma's Enforcement Targets Behavior, Not Just Files
The policy is detection by symptom, with bans for the worst cases:
The reasoning ties back to Comma's published safety model — specifically the rule that "the vehicle must not alter its trajectory too quickly for the driver to safely react... the actuators are constrained to operate within reasonable limits" (geohot, March 22, 2020, citing openpilot's SAFETY.md).
What It Actually Feels Like to Drive
At low speed the effect is obvious: much lighter steering, faster initial response, and less of the gradual resistance build-up you get stock — which can make the wheel feel more sensitive. At high speed it's muted, because the system reduces assist with speed; you mostly notice altered stability and a less natural progression of effort through lane changes.
Opinions on whether that's safer are mixed:
How the mod interacts with stock LKAS depends on the implementation:
A Bit More on the EPS Itself
Honda/Acura EPS isn't one knob — it's a stack of interacting systems: torque lookup tables, multiple operating modes, adaptive road-condition compensation, damping to prevent oscillation, and return-to-center force. The mod touches the base assist maps; everything else (return-to-center, speed-dependent damping, friction compensation, on-center feel, dynamic response) keeps shaping the result.
That interdependence is why the developers couldn't just flatten the curve:
openpilot also remaps its command onto the firmware curve "so that things are more linear" (FleetDog, February 13, 2020) — the same stretch-to-match idea described earlier.
A Real Failure Mode Worth Knowing
If a car loses its eps_modified status mid-use — say, a check-engine light disables the mod — the PID tuning no longer matches the hardware, and the wheel can wobble badly:
Conclusion
The "2.5x torque mod" is a real departure from OEM-validated steering. The raw parameter changes look extreme — up to 10.25x and 12.20x — but firmware clamps, non-linear scaling, and deliberate curve shaping bring the effective increase down to roughly 2.5x. The mismatch between the numbers and the feel is the whole story: in a system this interconnected, a small parameter change ripples through math you can't read off the value alone.
The community didn't ignore the risks. They capped mods around 2–2.5x, built non-linear curves instead of multiplying tables, kept additional limits in the openpilot code, watched for dangerous high-torque-at-speed behavior, and enforced standards with bans.
Final Assessment
Taken together, the mod reads as carefully developed and hedged with safety considerations. But it's still an unvalidated change to a safety-critical system, and the risk is real regardless of how thoughtfully it was built. Anyone considering it should weigh that seriously.
This analysis is based on a binary comparison of the firmware files and on community discussion data. It's a technical interpretation, not manufacturer-verified information.