Skip to content

MHD

MHD Tuning logs

CSV logs from BMW N54, N55, S55 and B58 flashed with MHD.

  • File type: CSV datalogs exported from the MHD Tuning flashing/logging app
  • Supported devices: BMW N54, N55, S55, B58, and other platforms flashed and logged with MHD Tuning
  • Features: Skips the leading # metadata block, UTF-8 BOM handling, unit extraction from column headers, MHD's *-for-degree notation normalized to °

Supported File Format

MHD logs are comma-delimited CSV with a leading block of #-prefixed metadata lines, then a header row whose first column is Time and whose channel names carry their unit in trailing parentheses:

#Encoding: UTF-8
#Ecu CALID: 
#Ecu PRGID: 7616431
#VIN: REDACTED
Time,Boost (Bar),Coolant (*C),RPM (RPM),Gear (-),MHD 5.26 IJE0S ST2V7.bin
539.607,-0.479,89,1346,2,0
539.742,-0.466,89,1350,2,0

How to Export from MHD Tuning

  1. Open the logged session in the MHD Tuning app
  2. Use the log export option to save the session as CSV
  3. Load the resulting .csv file directly into UltraLog

Supported Data

  • Boost and boost target, wastegate duty cycle (WGDC)
  • RPM, coolant and intake air temperature, engine load
  • Per-cylinder ignition timing correction
  • Lambda/AFR per bank, short-term fuel trim per bank
  • Fuel rail pressure, gear, torque
  • Any additional channel selected in the MHD logging configuration

Metadata Block

MHD writes a leading block of #-prefixed lines before the header row (#Encoding, #Ecu CALID, #Ecu PRGID, #VIN). UltraLog reads these into log metadata, then skips past them to find the header row. This preamble is also why MHD detection runs against the raw file text ahead of the rest of the format-detection chain, rather than after the generic comment-stripping step every other CSV parser sees.

The final header column is normally the active tune file name (e.g. MHD 5.26 IJE0S ST2V7.bin) — UltraLog captures this in log metadata rather than treating it as a channel.

Degree Notation

MHD substitutes * for the degree sign in channel headers: (*C) normalizes to °C, (*) to °, and (*CRK) to °CRK. A unit of - means the channel is unitless (e.g. Gear (-)).

Missing Data

Unparseable or blank fields are filled with the last successfully parsed value for that column (0.0 before the first valid sample), the same approach used by the Haltech and ECUMaster parsers. This keeps every row aligned with the channel list instead of shifting later columns when one field fails to parse.