Skip to content

Implement flashloader protocol #43

@medusalix

Description

@medusalix

Miele appliances manufactured after 2005 that use flash memory instead of a mask ROM typically allow for firmware updates. These updates are handled by an embedded bootloader, which is identified by the string Miele_Flashloader_V1_2005_GTESKT in memory (GTE/SKT being the department that developed the flashloader).

Reverse-engineering this flashloader (on a Miele ELPW 517-B board) reveals the following commands that can be sent to the device:

  • 0x00: Queries device information (response includes string 05_00_00029_00p, software ID and a few other bytes)
  • 0x01: Computes the CRC-16 of a block of memory
  • 0x02: Reads a block of memory (from any address!)
  • 0x03: Writes a fixed-size block into the page buffer
  • 0x04: Overwrites a block of the page buffer with a specified value
  • 0x05: Copies the page buffer into flash
  • 0x06: Writes into the page buffer (with arbitrary length)
  • 0x07: Resets the microcontroller to jump back into application firmware
  • 0x08: Unlocks access to the previous commands (except for 0x01, which can always be sent)

These commands seem to be part of the original flashloader and are supported by all devices. However, the ELPW 517-B has a few additional commands that were likely added in later versions of the flashloader:

  • 0x0a or 0x0b: Verifies the CRC-16 of a region of the page buffer and copies that region into flash
  • 0x0c: Applies a patch to the page buffer (with some kind of custom patch algorithm)
  • 0x0d: Erases a specified range of the flash
  • 0x0e: Overwrites the full page buffer with 0xff
  • 0x12: Writes a fixed-size block into the page buffer, automatically incrementing the index after every write

Next up, we'll have to implement this protocol on the host side. I've got a very basic implementation ready, but we still need support for automatically changing the serial port's configuration (the flashloader requires the UART to be configured for 8N2).

Having a working implementation of the flashloader protocol enables us to dump the flash memory from any supported Miele device, bypassing any readout protections present in firmware. Entering the flashloader mode also doesn't require any access keys.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions