<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機Hex文件的格式詳解

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 2023-09-24 11:50 ? 次閱讀

單片機的朋友都會使用hex文件作為燒錄文件。那么當我們寫一個在線升級軟件要支持hex文件的升級,就需要通過hex文件轉成bin文件進行傳輸,那么hex文件的格式和知識就必不可少了。

Intel HEX文件是由一行行符合Intel HEX文件格式的文本所構成的ASCII文本文件。在Intel HEX文件中,每一行包含一個HEX記錄。這些記錄由對應機器語言碼和/或常量數據的十六進制編碼數字組成。Intel HEX文件通常用于傳輸將被存于ROM或者EPROM中的程序和數據。大多數EPROM編程器或模擬器使用Intel HEX文件。

1 Hex文件記錄格式

以行為單位,每行以冒號開頭,內容全部為16進制碼,以ASCII碼形式顯示。

在HEX文件里面,每一行代表一個記錄。記錄的基本格式為如表所示:

wKgZomUPslGAR0WpAAALDyN76m8322.png

wKgaomUPslGALBYWAABsglzcKGw348.png

Start code一個字符,ASCII冒號:。

Byte count兩個十六進制數字(一個十六進制數字對),表示數據字段中的字節數(十六進制數字對)。最大字節數為 255 (0xFF)。16 (0x10) 和 32 (0x20) 是常用的字節數。

Address四位十六進制數字,表示數據的 16 位起始內存地址偏移量。數據的物理地址是通過將此偏移量添加到先前建立的基地址來計算的,從而允許內存尋址超出 16 位地址的 64 KB 限制。默認為零的基地址可以通過各種類型的記錄進行更改?;刂泛偷刂菲屏渴冀K表示為大端值。

Record type兩個十六進制數字,00到05,定義數據字段的含義。參考下文

Data一個由n個字節組成的數據序列,由 2n 個十六進制數字表示。一些記錄省略了這個字段(n等于零)。數據字節的含義和解釋取決于應用程序。

Checksum兩個十六進制數字,一個可用于驗證記錄沒有錯誤的計算值。計算校驗和前所有16進制碼的累加和。

2 數據記錄格式

Intel HEX文件由任意數量以回車換行符結束的數據記錄組成.

數據記錄外觀如下:

[:10246200464C5549442050524F46494C4500464C33]

其中:

10是這個記錄當中數據字節的數量。

2462是數據將被下載到存儲器當中的地址。

00是記錄類型(數據記錄)。

464C…464C是數據。

33是這個記錄的校驗和的補足碼。

3 擴展線性地址記錄格式(HEX386)

擴展線性地址記錄也叫作32位地址記錄或HEX386記錄。這些記錄包含數據地址的高16位。擴展線性地址記錄總是有兩個數據字節。

外觀如下:

[:02000004FFFFFC]

其中:

02是這個記錄當中數據字節的數量。

0000是地址域,對于擴展線性地址記錄,這個域總是0000。

04是記錄類型 04(擴展線性地址記錄)。

FFFF是地址的高16位。

FC是這個記錄的校驗和的補足碼。

當一個擴展線性地址記錄被讀取,存儲于數據域的擴展線性地址被保存,它被應用于從Intel HEX文件讀取來的隨后的記錄。線性地址保持有效,直到它被另外一個擴展地址記錄所改變。

通過把記錄當中的地址域與被移位(16位)的來自擴展線性地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。

以下的例子演示了這個過程:

來自數據記錄地址域的地址2462
擴展線性地址記錄的數據域FFFF0000
---------------------
絕對存儲器地址FFFF2462

4 標擴展段地址記錄(HEX86)

擴展段地址記錄也叫HEX86記錄,它包括4-19位數據地址段。擴展段地址記錄總是有兩個數據字節。

外觀如下:

[:020000021200EA]

其中:

02是記錄當中數據字節的數量。

0000是地址域,對于擴展段地址記錄,這個域總是0000。

02是記錄類型 02(擴展段地址記錄)。

1200是地址段。

EA是這個記錄的校驗和的補足碼。

當一個擴展段地址記錄被讀取,存儲于數據域的擴展段地址被保存,它被應用于從Intel HEX文件讀取來的隨后的記錄。段地址保持有效,直到它被另外一個擴展地址記錄所改變。

通過把記錄當中的地址域與被移位(4位)的來自擴展段地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。以下的例子演示了這個過程:

來自數據記錄地址域的地址  2462
擴展段地址記錄數據域  1200
  -----------------
絕對存儲器地址        00014462

5 文件結束記錄(EOP)

Intel HEX文件必須以文件結束(EOF)記錄結束。這個記錄的記錄類型域的值必須是01。EOF記錄外觀總是如下

[:00000001FF]

其中:

00是記錄當中數據字節的數量。

0000是數據被下載到存儲器當中的地址。在文件結束記錄當中地址是沒有意義被忽略的。0000H是典型的地址。

01是記錄類型01(文件結束記錄)。

FF是這個記錄的校驗和的補足碼。

6 Intel Hex 完成例子

下面是一個完整的Intel HEX文件的例子:


:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF
看了這個例子,我自己也打開了之前寫的51單片機的hex文件:

:2000000002000E75210675225B75230200267B007C00900090758140758901758CF1758A45
:2000200028D28C75A882758CF1758A280BBBFA157B00EC75F00A8485F020F5210CBC64027A
:200040007C00120051C0E0C0D0120051D0D0D0E032E52193F580D2A2C2A27580FED2A3C29C
:20006000A3120087E52093F580D2A2C2A27580FDD2A3C2A3120087227D327E287FF81151AA
:1A008000DFFEDEF8DDF4227E047FF8DFFEDEFA223F065B4F666D7D077F6FBC
:00000001FF

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6008

    文章

    44087

    瀏覽量

    623128
  • intel
    +關注

    關注

    19

    文章

    3456

    瀏覽量

    184990
  • HEX文件
    +關注

    關注

    0

    文章

    21

    瀏覽量

    12678
  • ASCII
    +關注

    關注

    4

    文章

    169

    瀏覽量

    34690
  • EPROM
    +關注

    關注

    3

    文章

    119

    瀏覽量

    54185

原文標題:單片機Hex文件的格式

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    單片機中的hex和bin文件

    單片機程序編譯之后,除了生成hex文件之外還生成了bin文件,實際它們都是單片機的下載文件,下文
    發表于 07-29 09:21 ?3761次閱讀

    LabView簡單程序解析單片機Hex文件

    最近在研究AVR單片機的Bootloader程序,這里牽涉到AVR單片機Flash的存儲結構等的問題若干。其中,對于單片機程序生成的Hex文件
    發表于 03-14 11:50

    Hex文件格式是什么意思

    hex文件格式hex文件格式是可以燒寫到單片機中,被單片機執行的一種
    發表于 01-12 06:17

    Hex文件格式解析

    hex文件格式是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex
    發表于 03-02 06:34

    51單片機中各種小例子的hex文件

    51單片機基礎實驗的各種實例的hex文件,能幫助大家從0開始學習51單片機
    發表于 02-26 17:18 ?62次下載

    GIF文件格式詳解

    GIF文件格式詳解 GIF文件格式詳解 GIF文件格式詳解
    發表于 05-24 10:53 ?2次下載

    Hex格式詳解

    Hex格式詳解
    發表于 10-31 14:46 ?10次下載
    <b class='flag-5'>Hex</b>的<b class='flag-5'>格式</b><b class='flag-5'>詳解</b>

    單片機hex和bin文件的區別

    單片機程序寫好之后,我們都要把程序下載到單片機的內存中,單片機才會按照程序員的邏輯執行命令實現功能。之前也講過下載單片機的幾種方式,比如ISP下載,JTAG下載,下載
    發表于 11-10 17:30 ?5786次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>hex</b>和bin<b class='flag-5'>文件</b>的區別

    單片機hex和bin文件的區別

    hex文件是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex
    發表于 11-15 09:07 ?4786次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>hex</b>和bin<b class='flag-5'>文件</b>的區別

    單片機燒錄hex文件是如何解析

    含有單片機的電子產品在量產的時候會用到.hex文件或者.bin。hex是十六進制的,包含地址信息和數據信息,而bin文件是二進制的,只有數據
    的頭像 發表于 11-07 10:33 ?6345次閱讀
    <b class='flag-5'>單片機</b>燒錄<b class='flag-5'>hex</b><b class='flag-5'>文件</b>是如何解析

    Jlink使用技巧之單獨下載HEX文件單片機

    上一篇文章介紹了使用Keil下載單獨的Hex文件單片機內,本篇文章介紹,如何使用SEGGER官方軟件JFlash來進行程序的下載,支持Hex和Bin文...
    發表于 01-26 18:33 ?13次下載
    Jlink使用技巧之單獨下載<b class='flag-5'>HEX</b><b class='flag-5'>文件</b>到<b class='flag-5'>單片機</b>

    單片機中的hex和bin文件

    經過這幾步后,程序下載工作就完成了,在以上的步驟中我們并沒有選擇要把程序下載到單片機的哪塊內存中,即不需要設置地址。因為HEX文件內部的信息已經包括了地址。 單片機一般是下載
    的頭像 發表于 04-18 10:16 ?5194次閱讀

    STM32單片機Hex、Bin文件的區別及應用詳解

    ? ? STM32、51等單片機程序經過編譯后,生成的hex文件、bin文件,它們都是單片機燒寫文件
    的頭像 發表于 07-05 17:23 ?1.1w次閱讀

    單片機hex文件和bin文件有什么不同

    單片機程序編譯之后,除了生成hex文件之外還生成了bin文件,實際它們都是單片機的下載文件。
    發表于 01-26 16:09 ?1846次閱讀

    單片機hex、bin文件的區別

    單片機hex、bin文件的區別
    的頭像 發表于 09-21 17:38 ?1580次閱讀
    <b class='flag-5'>單片機</b>中<b class='flag-5'>hex</b>、bin<b class='flag-5'>文件</b>的區別
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>