Pages: [1]
Author Topic: EDC16U31 info  (Read 252 times)
_nameless
Hero Member
*****

Karma: +373/-3439
Offline Offline

Posts: 2999



« on: May 08, 2026, 11:38:27 PM »

Ive been working on making my own flashing tools for verious reasons. Anyway, I thought I would share some of the information that I uncovered.........
## Status

| Component | Status |
|---|---|
| Fast init (StartCommunication) | implemented from sniff |
| ReadECUID 0x9B + flash counter extraction | implemented + verified |
| Security Access L1 (algorithm) | **verified algorithmically** against 14 captured pairs |
| Security Access L2 | INTENTIONALLY NOT IMPLEMENTED — locks ECU on failure |
| Programming session entry (10 85 + 10 85 50) | implemented from sniff |
| Auto-baud switch to 38400 | implemented |
| RequestDownload (SID 0x34, fmt 0x02 plain) | implemented from sniff |
| Erase routine (StartRoutine 0xC4) with counter trailer | implemented + verified |
| TransferData (128-byte chunks, plain) | implemented from sniff |
| TransferExit (SID 0x37) | implemented from sniff |
| Checksum validation (StartRoutine 0xC5, sum-of-bytes) | **verified** against bin file |
| Read flow | NOT IMPLEMENTED (no read sniffs yet) |
| GUI | NOT IMPLEMENTED — CLI only |

Calibration regions (the only parts a normal flash writes):
calA: 0x180000..0x1BFFFF (256 KB)
calB: 0x1C0000..0x1FDFFF (248 KB)
Bootloader and main code are NEVER touched during a calibration write.
This makes EDC16 inherently safer than ME7 cross-flashing.
Wire framing: always physically-addressed (80 10 F1 ...).
No Bosch extended-short-form like ME7 uses.
Programming baud: 38400 (auto-baud after 10 85 50)
Chunk size: configurable 128–254 bytes per TransferData frame.
The ECU advertises its max block in the RequestDownload response.
Security Access L1: SAME algorithm as ME7 (NefMoto 5-round XOR/rotate),
just with KEY = 0x0A221289 (table[0]) instead of ME7's 0x5FBD5DBD (table[63]).
Security Access L2: key = seed + 0x00002FC9 (32-bit big-endian).
Required only for read operations. Not all ECU variants implement it.
Checksum: simple sum-of-bytes mod 65536, NOT CRC-32 (which is what ME7 uses)
Flash counter: ECU stores a session counter at offset 18-22 of the
ReadECUID 0x9B response. The erase command must include 00 [N+1] [N+1] 00 00 [N]
in the trailer, where N is the current counter. The ECU rejects mismatches.
Read protocol (Kess-verified):
L1 + L2 security unlock
10 86 diagnostic session (stays at 10400 baud — no switch)
RequestUpload with format 0x00 (plaintext, not encrypted)
TransferData using bare non-addressed framing (01 36 37)
Data returned as raw plaintext — no LFSR decryption needed
Some ECUs require a small prerequisite read (256 bytes from 0x1C0000)
before the main 516 KB read from 0x180000
Logged

If you are broke or expecting free handouts DO NOT message me. I'll probably put you on blast if you do.
Pages: [1]
  Print  
 
Jump to:  

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Page created in 1.785 seconds with 16 queries. (Pretty URLs adds 0.00099999999999989s, 0q)