Heim Der Blog Blog Details

Unterschied zwischen HEX- und BIN-Dateien in Mikrocontrollern

May 07 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
Unterschied zwischen HEX- und BIN-Dateien in Mikrocontrollern

In der Mikrocontroller-Entwicklung sind HEX- (Intel HEX) und BIN- (Binärdateien) zwei gängige Formate zum Speichern und Übertragen von Firmware. Hier eine Übersicht über ihre Unterschiede, Verwendungszwecke und wann man welches Format einsetzt:

Unterschied zwischen HEX- und BIN-Dateien in Mikrocontrollern


1. Binärdatei (BIN)

  • Format: Rohe Binärdaten (0en und 1en), die den maschinenlesbaren Code repräsentieren, der in den Flash-Speicher des Mikrocontrollers geschrieben wird.

  • Inhalt:

    • Reiner ausführbarer Code + Daten (keine zusätzlichen Metadaten).

    • Adressen werden durch die Dateiposition impliziert (z. B. das erste Byte wird an der Basisadresse geladen).

  • Vorteile:

    • Kleinere Dateigröße (kein Overhead).

    • Direkt in Flash-Speicher schreibbar (z. B. über STM32-Bootloader).

  • Nachteile:

    • Keine Adressinformationen enthalten (müssen separat beim Flashen angegeben werden).

    • Keine Prüfsummen oder Fehlererkennung.

  • Typische Anwendungsfälle:

    • Flashen mit Tools wie stm32flashOpenOCD oder USB-DFU.

    • OTA-Updates (Over-the-Air), wo Bandbreite entscheidend ist.


2. Intel HEX-Datei (HEX)

  • Format: ASCII-Textdatei mit Adressen, Daten und Prüfsummen in einem standardisierten Format.

  • Inhalt:

    • Jede Zeile enthält:

      • Startcode (:).

      • ByteanzahlAdresseDatensatztyp (Daten, End-of-File usw.).

      • Nutzdaten + Prüfsumme.

    • Unterstützt nicht zusammenhängende Speicherbereiche (Lücken werden explizit behandelt).

  • Vorteile:

    • Enthält Adressinformationen.

    • Integrierte Fehlererkennung (Prüfsummen).

    • Menschenlesbar (kann mit einem Texteditor betrachtet werden).

  • Nachteile:

    • Größere Dateien (durch ASCII-Kodierung und Metadaten).

    • Muss vor dem Flashen geparst werden.

  • Typische Anwendungsfälle:

    • Debugging (einfacher zu analysieren).

    • Flashen über IDEs (Keil, IAR, STM32CubeProgrammer).

    • EEPROM-Programmierung (wenn Adressen wichtig sind).


Wichtige Unterschiede

Merkmal BIN-Datei HEX-Datei
Format Rohe Binärdaten ASCII-Text
Adressinformation Nicht enthalten (implizit) Explizit enthalten
Größe Kompakt (kein Overhead) Größer (durch Metadaten)
Prüfsummen Nein Ja
Menschenlesbar Nein Ja
Flashen Benötigt Basisadresse Selbstbeschreibend

Wann verwendet man was?

  • BIN verwenden:

    • Beim Flashen über Bootloader (z. B. STM32 UART/USB-DFU).

    • Für OTA-Updates (minimiert Übertragungsgröße).

    • Wenn die Zieladresse bekannt und fest ist.

  • HEX verwenden:

    • Beim Debuggen oder Analysieren von Firmware.

    • Beim Flashen über IDEs (z. B. STM32CubeIDE erzeugt standardmäßig HEX).

    • Für EEPROM oder nicht zusammenhängende Speicherbereiche.


Konvertierung zwischen HEX und BIN

  • HEX zu BIN:
    Tools wie objcopy (GNU Arm Embedded Toolchain) verwenden:

    sh
     
    arm-none-eabi-objcopy -I ihex -O binary firmware.hex firmware.bin  
  • BIN zu HEX:
    Basisadresse angeben (z. B. 0x08000000 für STM32-Flash):

    sh
     
     
    arm-none-eabi-objcopy -I binary -O ihex --adjust-vma 0x08000000 firmware.bin firmware.hex  

Beispiel für eine HEX-Datei

 
:1000000048000020A1010008AD010008B1010008C4  
:10001000B5010008B9010008000000000000000020  
:0400200000000000B8  
:00000001FF  
  • :10 = 16 Datenbytes.

  • 0000 = Adressoffset.

  • 00 = Datensatztyp (Daten).

  • C4 = Prüfsumme.


STM32-spezifische Hinweise

  • STM32CubeIDE: Erzeugt standardmäßig sowohl .hex als auch .bin (konfigurierbar in den Projekteinstellungen).

  • Flashtools:

    • ST-Link Utility: Unterstützt HEX und BIN.

    • STM32CubeProgrammer: Bevorzugt HEX, akzeptiert aber BIN (benötigt Adressangabe).


Zusammenfassung

  • BIN: Einfacher, kleiner, aber ohne Metadaten. Ideal für Produktionsflashing.

  • HEX: Selbstbeschreibend, sicherer für Debugging. Wird in der Entwicklung verwendet.

Wähle das Format basierend auf deiner Toolchain und den Anforderungen! 

Ampheo