这个 Intel Hex 固件文件是否已损坏?

Is this Intel Hex firmware file corrupted?

我有一个 Intel Hex format which belongs to a P80C528EBA microcontroller 的固件文件。该微控制器是一个 8 位 mC,它基于 80C51 架构。

在下面,您可以看到文件的前 5 行:

     :llaaaattddddddcc
   1 :03800000028100FA
   2 :028003008028D3
   3 :02800B00806093
   4 :0280130080608B
   5 :01801B003232

你可能知道,我在上面已经添加了,Intel Hex 格式行的结构如下:

:llaaaattddddd..............cc
|||||||||||                 CC->Checksum
|||||||||DD->Data...
|||||||TT->Record Type
|||AAAA->Address
|LL->Record Length
:->Colon

正如您在我文件的前 5 行中看到的那样,第 2 行的 AAAA 值为 0x8003,它等于 LL + AAAA 第 1 行 (0x03 + 0x8000)。但是这种模式对于接下来的 3 行是不正确的。例如,对于第 3 行,我们期望 0x8005 等于 0x8003 + 0x02(第 2 行的 AAAA + LL),但令人惊讶的是我们有 0x800B。我在这个文件中有大约 10 行错误的模式(大约有 2000 行)。

问:这是否意味着文件已损坏并删除了某些行?或者在 Intel Hex 格式的行之间有一些空洞(如上)是可以的吗?

文件没有损坏,所有校验和都是正确的。

我唯一期望的是文件结束记录

:00000001FF

但是正如您所说,文件比您显示的摘录要长得多。

无论如何,Intelhex文件有空隙是完全可以的。

此外,记录不必按顺序排列。

反汇编机器码,得到

C8000:  ljmp    C8100
C8003:  sjmp    C802D
C800B:  sjmp    C806D
C8013:  sjmp    C8075
C801B:  reti

您正在查看重置和中断例程开始的位置。