本文主要是介绍【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* 0084987A .....
这篇关于【dsPIC33E】Bootloader(四)Bootloader上位机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!