CAN bus Mapping: Difference between revisions
Happy.smiler (talk | contribs) CAN bus mapping for the Lotus Exige V6, based on testing with a 2021 Exige 390 Final Edition. Includes identified CAN IDs, decoded signals, byte mappings and formulas for steering angle, engine RPM, throttle, brake, clutch, driving modes, coolant temperature and fuel level. Also covers vehicle dynamics, calculated gear position and ongoing investigations into TPMS and exhaust valve status. Confirmed and provisional mappings are clearly distinguished. |
Happy.smiler (talk | contribs) No edit summary |
||
| Line 314: | Line 314: | ||
[[Category:Electrical]] | [[Category:Electrical]] | ||
[[Category:Exige V6]] | |||
[[Category:Lotus Evora]] | [[Category:Lotus Evora]] | ||
Latest revision as of 11:47, 19 October 2026
Introduction
[edit | edit source]This page documents CAN bus signals and decoding investigations on the Lotus Exige V6 platform. The reference vehicle is a 2021 Lotus Exige 390 Final Edition. Some signals may be shared with other Exige, Evora or Elise models, but such compatibility should not be assumed without testing.
The work uses a passive, listen-only CAN interface to collect standard 11-bit CAN frames from the high-speed vehicle bus. No control or diagnostic frames are intentionally transmitted. The purpose is to support data logging and an iPhone dashboard without altering the vehicle.
Last updated: 19 October 2026.
For discussion, evidence and contributions, see the SELOC CAN Bus Mapping thread.
Evidence classifications
[edit | edit source]- Confirmed – Signal behaviour identified through tests on the reference car.
- Identified in firmware – Working application-level interpretation; exact underlying raw mapping not yet published here.
- Provisional – Candidate byte, scaling or interpretation requiring additional correlation.
- Reference – From an earlier third-party mapping, not yet independently validated on this car.
- Observed – Frame captured but meaning unknown.
Unless specified otherwise, all byte indexes are zero-based (B0 is the first byte); all identifiers and masks are hexadecimal.
Test vehicle and equipment
[edit | edit source]| Item | Detail |
|---|---|
| Vehicle | 2021 Lotus Exige 390 Final Edition, 3.5-litre V6 |
| Network | High-speed CAN, 500 kbit/s, standard 11-bit frames |
| OBD-II connection | Pin 6 (CAN-H), pin 14 (CAN-L) |
| Microcontroller | ESP32-C3 |
| Transceiver | SN65HVD230 |
| Interface mode | CAN listen-only (passive capture) |
| Output | BLE connection to iPhone dashboard |
The CAN reader is not an OBD-II PID scanner: it listens to native broadcast CAN messages. Generic OBD-II diagnostic requests and responses are a separate mechanism; see On board diagnostics.
Safety: Do not add unnecessary bus termination.
CAN identifier summary
[edit | edit source]| CAN ID | DLC | Candidate or decoded function | Status |
|---|---|---|---|
0x085 |
5 | Steering angle | Confirmed |
0x0A2 |
7 | Wheel speed / vehicle speed | Reference |
0x0A4 |
8 | Additional wheel speeds | Reference |
0x0A8 |
3 | Mode/status candidate | Provisional |
0x102 |
3 | Unknown frame | Observed |
0x114 |
6 | Throttle, clutch, brake, mode button; RPM reference | Mixed (see below) |
0x0B7 |
7 | Unknown high-rate frame | Observed |
0x303 |
7 | Chassis dynamics (yaw / lateral acceleration) | Provisional |
0x400 |
7 | Vehicle status; fuel and temperature hypotheses | Observed / provisional |
Driving mode: Normal, Sport and Race are identified and displayed correctly by the project firmware and iPhone app. The exact raw source CAN byte or state-machine definition is not yet documented on this page; do not equate the mode-button bit with a direct selected-mode byte.
Detailed CAN mappings
[edit | edit source]0x085 – Steering angle
[edit | edit source]DLC: 5
| Bytes | Encoding | Formula | Status |
|---|---|---|---|
| B0–B1 | Signed 16-bit, little-endian | Steering angle (degrees) = raw × 0.09 | Confirmed |
| B2–B4 | Undetermined | – | Unknown |
0x0A2 – Wheel/vehicle speed
[edit | edit source]DLC: 7. An earlier Exige V6 RaceCapturePRO mapping associates this identifier with wheel/vehicle speed. Byte-level decoding has not yet been confirmed on this reference vehicle.
Status: Reference.
0x0A4 – Additional wheel speed
[edit | edit source]DLC: 8. Earlier RaceCapturePRO material identifies additional wheel-speed information here. Byte-level validation remains outstanding.
Status: Reference.
0x0A8 – Candidate status
[edit | edit source]DLC: 3
| Byte | Observations | Interpretation | Status |
|---|---|---|---|
| B1 | 0x01, 0x09 |
Possible vehicle or mode status; not conclusively decoded | Provisional |
Do not treat these raw values as an established Normal/Sport/Race mapping.
0x102 – Unidentified frame
[edit | edit source]DLC: 3. Example at standstill: 00 00 9C. Status: Observed.
0x114 – Engine and driver inputs
[edit | edit source]DLC: 6
| Byte/bit | Signal | Decode | Status |
|---|---|---|---|
| B0–B1 | Engine RPM | Older reference: 16-bit raw × 0.25; endian/order must be checked against captures | Reference / calibration tested |
| B3 | Throttle / accelerator | Percent = raw × 100 / 255 | Confirmed |
B4 bits 4–5 (0x30) |
Clutch input | See below | Confirmed |
B4 bit 7 (0x80) |
Drive-mode button activity | 0 = inactive; 1 = active | Confirmed |
B5 bit 0 (0x01) |
Brake pedal | 0 = released; 1 = pressed | Confirmed |
Clutch input
[edit | edit source]Apply mask 0x30 to B4:
| Masked value | Observed state |
|---|---|
0x00 |
Released |
0x10 |
Intermediate |
0x20 |
Deeper / fully pressed |
Drive-mode button versus selected mode
[edit | edit source]B4 bit 7 captures activity of the mode selector. It does not directly report the selected driving mode. See Driving modes.
Engine RPM testing
[edit | edit source]Engine tests have included idle and approximate 2,000 and 3,000 RPM holds. A discrepancy between the dashboard and an initial iPhone display led to subsequent firmware corrections. Publish a final byte order and scaling only after checking the corrected output against recorded raw frames.
0x0B7 – High-rate unidentified frame
[edit | edit source]DLC: 7. B3 and B6 change frequently. Status: Observed.
0x303 – Vehicle dynamics
[edit | edit source]DLC: 7. A strong candidate for yaw-rate and lateral-acceleration data. B4 has been investigated for lateral acceleration, but signedness, offsets and scale factors are not yet validated.
Status: Provisional.
0x400 – Vehicle status, coolant and fuel candidates
[edit | edit source]DLC: 7
Recorded example: 00 00 00 02 C4 81 18
The following assignments were investigated during firmware development and are not yet a validated decoding of this entire frame:
| Byte | Candidate signal | Proposed calculation | Status |
|---|---|---|---|
| B4 | Fuel level | Percent = raw × 100 / 255 | Provisional; exact byte/source needs correlation |
| B6 | Coolant temperature | Degrees C = raw − 40 | Provisional; raw frame correlation required |
Consistency check: In the example frame B6 is hexadecimal 0x18 (decimal 24), giving −16°C under the proposed temperature formula. That is not a plausible warm-engine reading. Accordingly, the example does not validate this coolant mapping. Similarly, B4 is 0xC4 (decimal 196), not the separately observed fuel candidate raw value 137. Avoid combining measurements taken at different times into a single supposedly validated frame.
Driving modes – Normal, Sport and Race
[edit | edit source]Status: Identified and working in firmware / iPhone application.
The three selected drive modes have been identified in project testing. The firmware distinguishes the states and passes the result to the iPhone display.
| Decoded state | Displayed mode | Project status |
|---|---|---|
| 0 | Normal | Identified |
| 1 | Sport | Identified |
| 2 | Race | Identified |
These values are decoded application states. They are not presented as raw values from a specific CAN byte until the underlying message, byte/bit and test captures are documented here.
Related known signal: 0x114, B4 bit 7 (0x80) = drive-mode button input. This is separate from the selected-mode value.
Coolant temperature – test record
[edit | edit source]Dashboard readings from one stationary warm-up/cool-down test:
| Time | Dashboard temperature | Condition |
|---|---|---|
| 19:09 | 46°C | Engine running |
| 19:14 | 68°C | Engine running |
| 19:17 | 78°C | Engine running |
| 19:19 | 84°C | Engine running |
| 19:21 | 84°C | Engine stopped; ignition on |
| 19:39 | 68°C | Engine off; ignition switched off after observation |
The dashboard trace is a useful ground-truth comparison for raw CAN captures. A conventional raw − 40 temperature decoding has been investigated. A definitive ID/byte assignment cannot be claimed solely from these dashboard observations.
Fuel-level candidate
[edit | edit source]A provisional fuel-level calculation is:
Fuel (%) = raw × 100 / 255
For an observed raw value of 137, the calculated level is 53.7%, broadly consistent with a dashboard gauge near half full. This is an initial plausibility check only, not proof of the byte assignment or a linear relationship over the entire tank range. Further measurements while refuelling and driving are needed.
Calculated gear position
[edit | edit source]The Exige uses a manual gearbox. A gear estimate can be derived by comparing engine RPM with vehicle speed and matching the RPM/speed ratio against expected ratios for each gear. Neutral, clutch operation, low speed and wheel slip require special handling.
Status: Algorithm tested successfully with simulated inputs on the bench; in-car driving validation outstanding.
iPhone display project
[edit | edit source]An ESP32-C3 sends decoded data over BLE to an iPhone application. The iPhone app was at version 1.1 during this work; the ESP32 firmware has an independent version history.
| Information | Status |
|---|---|
| Steering angle | Confirmed CAN signal |
| Accelerator input | Confirmed CAN signal |
| Clutch and brake switches | Confirmed CAN signals |
| Normal / Sport / Race mode | Identified and displayed by app |
| Engine RPM | Display/calibration tested |
| Coolant temperature | Temperature observations recorded; byte map provisional |
| Fuel level | Provisional decoding |
| Vehicle speed / wheel speeds | Reference mapping, road validation pending |
| Calculated gear | Bench tested, road validation pending |
| Yaw/lateral acceleration | Candidate signal |
| Exhaust valve state | Not yet identified |
| TPMS values | Not yet identified on the CAN bus |
Open investigations
[edit | edit source]- Publish raw CAN evidence and exact byte/bit decoding for the selected driving-mode state (modes themselves have been identified).
- Confirm coolant-temperature CAN ID, byte and scaling against dashboard reference values.
- Confirm fuel-level source, scaling and tank-gauge behaviour.
- Validate wheel speeds and calculated gear while driving.
- Validate yaw rate and lateral acceleration, including scale and sign.
- Investigate exhaust-valve state and whether TPMS information is broadcast on the accessible bus.
- Check mappings on other Lotus models and model years.
Contributing a new mapping
[edit | edit source]Please include the vehicle model/year, CAN ID, DLC, zero-based byte/bit, raw sample frame(s), interpretation, formula, units, capture/test conditions and whether the finding was independently confirmed. Avoid marking a value as confirmed based on a single static frame or a coincidental numerical match.
| Field | Example |
|---|---|
| Vehicle | Exige 390 FE, 2021 |
| CAN ID | 0x085
|
| DLC | 5 |
| Data location | B0–B1 |
| Data type | Signed 16-bit, little-endian |
| Conversion | raw × 0.09° |
| Test | Turn steering wheel and compare observed changes |
| Status | Confirmed |
References and further reading
[edit | edit source]- SELOC forums – CAN Bus Mapping Thread – ongoing testing and discussion.
- The Lotus Forums – Exige V6 CAN bus mapping for RaceCapturePRO – earlier reference definitions.
- On board diagnostics – SELOC TechWiki background on diagnostic connectors and CAN.
Disclaimer
[edit | edit source]This is independent enthusiast reverse engineering, not an official Lotus specification. Differences may exist between ECUs, model years, variants and firmware. Provisional definitions should not be relied upon for safety-critical uses or used to control vehicle functions.