How to generate valid zones in a JSON? (e.g. Traction Battery for Peugeot e-208) #159
Unanswered
veecle-stefan
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
BMU_CTE1.json
Hi everybody,
I hope I didn't overlook any documentation, but I couldn't find any systematic way of creating a JSON file for a not-yet supported ECU.
I will describe what I did to create my JSON for the battery management system (
BMU_CTE1) on a Peugeot e-208.Background
The BMU on the e-208 is supplied by CATL. The ECU identifiers are:
6B4694udsCATL-BMU_CTE1 EMC00(from zoneF08F)How I found the zones
I started from the JSON files for already-supported ECUs in the repo to understand the format, then wrote sweep JSONs that query zone addresses systematically using the UDS
ReadDataByIdentifier(service22) request.A few things I learned along the way:
No security access needed for reading. All zones below are readable in extended diagnostic session (
1003) without unlocking security. I deliberately did not attempt security access or any writes.Ranges swept:
F0xx,F1xx,C0xx,D8xx,D9xx,DAxx,DBxx,0Dxxxx00,xx01,xx02per high byte):02xx–EFxxxx00+xx10–xxF0steps):F2xx–F9xx22xx–29xx,B0xx,D0xx,E0xx,E1xx–E8xxConfirmed zones
55 zones respond in total. The attached
BMU_CTE1.jsonincludes all of them. I haven't decoded scaling factors yet — zone names in thedatatab are just their address for now.Standard UDS identification (
F0xx/F1xx): part number, serial, SW/HW version, production date, ZA/ZI zones — all standard PSA UDS ident, nothing surprising.Live sensor values — cross-referenced with CarScanner, these are confirmed telemetry DIDs (not configuration zones):
D810D815D816D817D860D861D865D86FD870Remaining unclassified zones — respond with data, unknown purpose, could be config/telecoding or additional telemetry:
D802,D811,D812,D813,D814,D822,D862,D863,D866,D867,D868,D869,D86A,D86C,D86D,D871,D872,D873,D874,D875,D876,D877,D878,D87A,D87B,D87C,D87D,D87E,D87F,D89C,D89D,D89E,D900,D901,E082Open questions
1. More systematic way to convert DiagBox → JSON: I'm using DiagBox to interact with all ECUs and then sniff the traffic using an OBD Y-splitter. Is there a more systematic way? In the DiagBox directory I see a lot of
tele_xxxfolders with what looks like XML-based ECU descriptions — has anyone parsed those to extract zone definitions directly?2. Cell voltage coding — In a recall in June 2023, the dealer updated the coding and the car has since charged only to 4.08V/cell instead of the previous 4.15V. I'd like to find where this limit is stored, at least for reading. It doesn't appear to be exposed via any
ReadDataByIdentifieraddress in the ranges I swept, so it might be embedded in a multi-value payload in one of the unclassified zones above — or perhaps in thetele_xxxfiles.3. Security key for writing — The ZI zone (
F0FE) contains0107at bytes 4–5, which matches the VCU key on this platform. I haven't confirmed whether this also works for the BMU.4.
D900/D901— Both respond but return all zeros across multiple reads. Possibly unwritten telecoding zones, possibly reserved.Any pointers welcome — especially from anyone who has worked on other PSA EV ECUs (e-2008, Corsa-e, Mokka-e) where the BMU might be the same CATL unit.
Beta Was this translation helpful? Give feedback.
All reactions