−10%10% off all files right now — originals €18, map packs from €54.
€18 / file−10%
WinOLS · 5 min read · updated

How map axes and factors work in a WinOLS map pack

An ECU stores plain integers; a map definition turns them into rpm, bar and Nm. How factors, data organisation, byte order and axes work — and how to see at a glance whether a map reads right.

WinOLS map packs with the originalfrom €54 →
Contents
  1. Values, curves and maps
  2. From raw value to physical value
  3. Data organisation: width, sign and byte order
  4. How axes work
  5. Denso's interleaved layout
  6. How to tell a map reads right
  7. How our map packs are checked

An ECU does not store "250 Nm" or "2.1 bar". It stores integers — raw numbers in memory — and its software knows how to interpret them. A map definition gives WinOLS the same knowledge: how wide each number is, in which byte order, how to convert it into a physical value, and where the axes are. Get one of these wrong and the map turns into nonsense. This guide explains each part and how to check that a map reads right.

Values, curves and maps

  • A value (constant) is a single number — a limit, a threshold, a switch.
  • A curve is a row of values over one axis — for example a correction over coolant temperature.
  • A map is a table over two axes — for example injection quantity over engine speed (X) and pedal position (Y).

In the definition, a map has a size in columns and rows, a start address for its data and a description of each axis. The axes are themselves rows of numbers stored somewhere in the file.

From raw value to physical value

WinOLS converts each raw number with a factor and an offset:

physical value = raw value × factor + offset

An illustrative example: a raw value of 2450 with factor 0.1 and offset 0 reads as 245.0 — in Nm, if that is the map's unit. Offsets are typical for temperatures: with factor 1 and offset −40, a raw 0 means −40 °C and a raw 130 means 90 °C.

A wrong factor does not change the shape of a map — only its scale. If a torque map shows 24,500 instead of 245.0, the definition's factor is off; the data itself is fine. When you edit a physical value, WinOLS converts it back to raw with the same factor, so the factor matters for editing as well as for reading.

Data organisation: width, sign and byte order

Width

A raw value can occupy 1 byte (8-bit, 0–255), 2 bytes (16-bit, 0–65,535), 4 bytes (32-bit) or 4 bytes as a floating-point number. The definition must state which; read with the wrong width, every value combines parts of two neighbours.

Signed or unsigned

The same bytes mean different numbers depending on whether negative values are allowed. A 16-bit raw FFFF is 65,535 unsigned but −1 signed. Ignition angles, corrections and some axes are signed; read as unsigned, a smooth curve through zero turns into a cliff.

Byte order

Multi-byte values are stored either low byte first — Lo/Hi, little-endian, sometimes called Intel order — or high byte first — Hi/Lo, big-endian, Motorola order. The value 1000 (hex 03E8) is stored as:

Lo/Hi (little-endian): E8 03 Hi/Lo (big-endian): 03 E8 read in the wrong order: E8 03 → 0xE803 = 59395

The order depends on the processor. Infineon TriCore ECUs such as Bosch EDC17 and MED17 are little-endian; PowerPC-based units such as Bosch EDC16 and MED9 are big-endian, as are many others. A definition in the wrong order gives values that jump wildly from cell to cell — usually obvious at first sight.

How axes work

Each axis is a list of breakpoints — the engine speeds, pressures or quantities at which the map has a column or row. The ECU interpolates between them. Breakpoints are stored as raw numbers too, with their own width, byte order, factor and unit, which can differ from the map data.

  • Order. Breakpoints rise from one end to the other. Some ECUs repeat the last breakpoint to fill unused positions; that padding is normal.
  • Location. An axis is often stored just before its map's data, but it can sit elsewhere and be shared by several maps.
  • Count word. Many ECUs store the number of breakpoints directly before the axis. A definition that points one cell too early reads that count as the first breakpoint — the axis then starts with a small number like 16 before jumping to 800 rpm.

Denso's interleaved layout

Many Toyota and Lexus Denso tables are laid out differently: a short header with the number of points, then the X axis, and then each row of data preceded by its own Y-axis value. The Y axis is interleaved with the rows rather than stored as one block.

WinOLS can describe this with skip settings in the axis and map definition (bytes to skip between Y values and between rows). A definition that ignores the layout produces a Y axis made of data values and rows that drift against each other. More on Toyota ECUs in Toyota and Lexus Denso ECU numbers.

How to tell a map reads right

  1. Look at the axes. They rise in order, with plausible values and units — engine speed from idle to the rev limit, pressures and quantities in sensible ranges.
  2. Look at the 3D view. Real calibration data forms smooth surfaces with gradual slopes, plateaus and the occasional step. Random spikes in every cell mean width, sign or byte order is wrong.
  3. Check the scale. If the shape is right but the numbers are ten or a hundred times too large, the factor is off.
  4. Compare related maps. Maps that come in sets — one per gear, per cylinder or per mode — should look like relatives.

How our map packs are checked

Every axis in a OriginalECU map pack is checked against the binary it ships with. Byte order, Denso's interleaved axes, count words and signed axes are corrected where needed, and a pack is only offered when its axes read in order on its original. When you order, the check runs again on the exact file you receive, and the README in the ZIP states how many axes read in order.

That check is about the definitions. The map pack still describes the original calibration — it contains no changed values — and it fits that one software version only. The import workflow is in what a WinOLS map pack is.

Browse WinOLS map packs — €54 or €63 for cars (depending on how old the ECU type is), €72 for motorcycles and boats and €81 for trucks and agricultural machinery, original included. You can see the name of every map before you buy.

WinOLS map packs

Map packs with the original included

15 364 software versions, every map named and grouped, X/Y axes and factors checked against the bin. See every map name before you pay — from €54.

Card payment; your card is charged only when the file is ready. Digital files: all sales are final.

Read next