Westbrook
认证:VIP会员
所在专题目录 查看专题
dsPIC33 BootLoader(4)-基于MCC配置Boot区
dsPIC33 BootLoader(5)-基于MCC生成应用程序
Bootloader演示
dsPIC33 Bootloader(6) -开发时需要考虑的一些关键问题
dsPIC33 BootLoader(7)-修改链接描述文件GLD
dsPIC33 Bootloader(8)-Hex文件解析
作者动态 更多
10分钟教你快速完成数字电源的闭环控制
2022-04-02 17:26
数字电源学习板演示
2022-02-19 13:36
手把手教你学数字电源系列视频(22)- 数字控制的软件流程
2022-02-19 13:28
手把手教你学数字电源系列视频(21)- 设计数字补偿器(LDE执行)
2022-02-19 13:28
手把手教你学数字电源系列视频(20)- 设计数字补偿器(AB系数计算)
2022-02-19 13:27

dsPIC33 Bootloader(8)-Hex文件解析

市面上大多数单片机的Hex文件都是基于Intel Hex,而dsPIC33C也不例外,dsPIC33C支持的格式为Intel HEX32(INHX32)。

hex文件以ascii形式,按照行来记录数据。

Hex文件的基本格式为:

                           :BBAAAATTHHHH....HHHHCC

每个数据记录都是以9字符前缀开始,并总是以2字符校验和结束。无论格式如何,所有记录都是以“:”开始。以下介绍了其中的各个元素。                

  • BB -- 16进制,表示此行数据长度字节数,表示HH的数目                
  • AAAA -- 16进制,表示数据记录的起始地址,若此行是数据记录,则表示偏移地址,其它无意义                     
  • TT -- 16进制,表示记录类型

         00-数据记录(Data Record);

         01-文件记录结束(End of File record);

         02-扩展段地址记录(Extend Segment address record);后面所有数据地址+段地址左移4位;

         03-扩展线性地址记录(Extend Linear address record);后面所有数据地址+线性地址左移16位             

  • HH...HH -- 16进制,低字节/高字节 结合数据,高字节在后;注意,若是偏移地址,则都是2字节,高字节在前,低字节在后  ;                   

CC -- 16进制,校验码,除冒号和自身以外的其他字节数据加起来模除256的余数的补码。

例如:10 A6B0 00 0000EB00D4FD0700000F78001E007800 BA

CC=01+~(10+A6+B0+00+00+00+EB+00+D4+FD+07+00+00+0F+78+00+1E+00+78+00)=BA

由于Inter hex文件格式是针对字节的,而16位程序计数器不是,所以程序存储器段需要特殊的处理。每个24位程序字都通过插入所谓的“虚拟字节”而扩展为32位。每个程序存储器地址都乘以2来获得字节地址。

下面是编译后生成的Hex代码示例。

第一条红色框:02 0000 04 0000 fa

表示这条记录有2个字节的数据,起始地址为0000,类型为04,表示为扩展地址,具体数据为0000,校验和为fa。

第二条红色框 10 3008 00 0000fa00007c80000080fa0000000600 42

表示这条记录有10(HEX)个字节的数据,起始地址为2400,类型为00,具体数据为0000fa00007c80000080fa0000000600,校验和为42。

第三条红色框:00 0000 01 FF - 结尾标志行

表示文件结束。

请注意,数据记录的第二条红框的装入地址为3008,而源代码指定的地址为0x1804。

Microchip 16bit MCU采用字的形式存储指令代码,每个字的长度为24位,共3个字节。指令的地址按2往上增加,地址的尾数都为偶数。在HEX文件中每条指令对应有4个字节,即在最高位进行了补0操做,在HEX文件中插入了00“虚高字节”。数据是以“小数位”格式表示的,表示最低有效字节(LSB)先出现。虚拟字节后出现,正好位于校验和之前。


MCU另外的一种传输文件格式为BIN文件,BIN文件采用数据流的形式,从第一条有效数据开始,直到最后一个字节的数据均会包含。

HEX文件特点:优点是整个文件小,有有效数据时才会产生记录。缺点是传输时包含了起始符,地址,数据类型校验和等数据,数据的有效负荷率低。对数据帧的解析复杂。BIN文件特定:优点是数据传输时简单,传输的都是数据。缺点是整个文件大,包含了全FF这种无效的数据。

HEX文件到BIN文件转换,采用软件H-Converter  bin to hex可实现HEX和BIN之间的相互转换。

下面以CAN Bootloader来传输数据(可以采用具有CAN外设的MCU,比如PIC18F46K80),实现对目标板应用程序的升级。

Bootloader程序流程图如下,Appstate ==0x55,表示应用程序已升级到Flash空间。

Application程序流程图。


至此,本专题初步介绍了Bootloader的原理、Flash空间分配、中断重映射以及Hex解析,关于更深入的讨论不作为本专题的讨论范围,感谢大家支持。如果觉得本专题对你有帮助,欢迎关注,点赞,转发,收藏!最后,由于本人认识水平有限,某些内容也认识不全面,望各位大佬赐教。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 4
关注 823
成为作者 赚取收益
全部留言
0/200
  • 电源漫谈 2021-09-07 23:02
    摩拜大佬
    回复