【dsPIC33E】Bootloader(四)Bootloader上位机

前面已经将下位机部署完毕,本节将讲述上位机。

上位机的工作相对比较简单,主要就是解析Hex文件,然后将数据发送到下位机。注意发送的Hex文件只能是User App,不能带有Bootloader,否则可能会覆盖之前的Bootloader,导致出错。

上位机源码下载地址:https://download.csdn.net/download/u010875635/10819828

 

上位机主要工作流程如下:

1、选择Hex文件。

2、进入Bootloader。

3、烧录文件,烧录实际上有三个动作,一是检查是否处于Bootloader中;二是擦除用户程序区;三是烧录文件。

4、烧录完毕后,下位机会自动复位。

 

注意数据发送时,一定要采用一问一答模式,即发送一帧数据,收到回馈后再发送下一帧,避免时间不够MCU将数据写入Flash。

 

部分解析Hex文件的代码如下,详细参考上位机源码程序:https://download.csdn.net/download/u010875635/10819828

 

Hex文件内容与实际地址数据之间的转换:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpecialFunctions.HexParse
{
    /// <summary>
    /// Microchip的MPLAB X生成的HEX解析
    /// MPLAB可以生成3中不同格式的执行文件
    /// 其中两种是HEX文件,它们分别称为
    /// INHX8M(Intel Hex Format) -- 一般用于8位核心设备编程器
    /// INHX32(Intel Hex 32 Format) --  一般用于16位核心设备编程器
    /// 另外一种INHX8S(Intel Split Hex Format)生成的是HXL和HXH文件,分别保存指令数据的低字节和高字节,这里不做说明
    /// 详情参考MPLAX帮助文件
    /// </summary>
    public class MicrochipHexParse
    {



        #region INHX32格式解析,MPLAB内嵌连接器MPLINK在默认情况下生成INHX32,适用于dsPIC33E/PIC24E
        /*************************************************
        * 1、hex文件以ascii形式,按照行来记录数据
        * 2、每一行从:开始,每至少2个字符表示一组16进制数据,格式为 :BBAAAATTHHHH....HHHCC
        *                   BB -- 16进制,表示此行数据长度字节数,表示HH的数目
        *                 AAAA -- 16进制,表示数据记录的起始地址,若此行是数据记录,则表示偏移地址,其它无意义
        *                   TT -- 16进制,表示记录类型,
        *                                   00-数据记录(Data Record); 
        *                                   01-文件记录结束(End of File record); 
        *                                   02-扩展段地址记录(Extend Segment address record);后面所有数据地址+段地址左移4位
        *                                   04-扩展线性地址记录(Extend Linear address record);后面所有数据地址+线性地址左移16位
        *                   HH...HH -- 16进制,低字节/高字节 结合数据,高字节在后;注意,若是偏移地址,则都是2字节,高字节在前,低字节在后
        *                   CC -- 16进制,校验码,除冒号和自身以外的其他字节数据加起来模除256的余数的补码,例如:10A6B0000000EB00D4FD0700000F78001E007800BA,CC=01+~(00+00+EB+00+D4+FD+07+00+00+0F+78+00+1E+00+78+00)=BA
        *
        *
        * 需要特别注意的是,:
        * 1、对于dsPIC33E/PIC24E,Hex文件地址是乘了一个2,例如一个部分存于0x100,而在Hex中为0x200,详见dsPIC33E/PIC24E编程规范(DS70619B)扩展A中的介绍。
        * 2、dsPIC33E/PIC24E没有扩展段地址,只有扩展线性地址
        * 3、MPLAB X项目属性中的建设里,勾选规范会HEX文件和不勾选生成的HEX文件是不一样的
        * 4、数据记录为little-endian,低端在前
        *
        *
        * 一旦出现段地址或者线性地址,之后所有数据都要加偏移地址,直到出现一个新的段地址或者线性地址,再重新变更偏移地址
        * 对于真实地址,是 线性地址左移16位+段地址左移4位+偏移地址
        *
        * 示例:
        * :020000040108EA           线性偏移地址:0108
        * :0200000212FFBD           段偏移地址:12FF
        * :0401000090FFAA5502       数据地址:0100
        * :00000001FF               文件结束
        * 真实地址为:0108左移16位,为01080000;12FF左移4位,为00012FF0;数据地址为00000100;加起来为010930F0
        * 最终解析出来(8位单片机):
        * 地址     数据
        * 010930F0 90
        * 010930F1 FF
        * 010930F2 AA
        * 010930F3 55
        * 对于dsPIC33E/PIC24E,16为单片机,2个16位组成32(有效的是低24位)地址要除以2,所以真实地址解析如下:
        * 00849878 55AAFF90
   
  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值