1:概述

最近两周都在做PIC在线升级的功能,最终看到升级成功的提示,难以掩盖成功的喜悦。决定把我两周中遇到的问题和大家分享一下,希望能给正在做升级功能的人一些帮助。有理解错误的地方请大家给以指正。

2:基本流程

硬件连接:PC<=====>232转485<=====>PIC<=====>EEPROM

软件逻辑:

1) MFC发送开始升级指令--->PIC初始化接收485BUF--->校验包--->写数据至EEPROM

2) MFC发送文件结束指令--->PIC写升级文件标志至EEPROM--->Reset

3) PIC读取EEPROM升级标志--->跳转至固定Program地址--->擦除原有program--->读取EEPROM--->写PIC Flash--->Reset

最终实现状态:在未断电重启的情况下,成功升级PIC程序,MFC程序检测升级成功。

3:错误包处理

MFC端:当MFC应用程序读取ACK包,检查状态为错误会重传此序号包。错误重传延续5次。

PIC端  :当读取EEPROM数据写PIC Flash,会读取写入数据比对,如若出错将重新写入。

4:部分代码

PIC写升级文件部分代码:

while (g_485_rec_buff.data_len  < len)
{ClrWdt();Delay100TCYx(100);if(error++ > 30) return;
}
error = 0;check = CheckSum(ptr, len - 1);
if(pdata->checksum !=  check)
{pdata->pack.state = WRONG;g_485_rec_buff.data_len = 0;h_485_usart2_write_nbyte((char *)&pdata->pack, sizeof(UPPACK));continue;
}if(pdata->pack.state == END)
{binfo.valid[0] = 'U';binfo.valid[1] = 'P';eeprom_write_page(EEPROM_UPDATE_INFO_ADDR, (unsigned char *)&binfo,sizeof(binfo));break;
}if(pdata->pack.state == SENDING)
{eeprom_write_page(EEPROM_UPDATE_DATA_ADDR + binfo.file_size, pdata->data,  pdata->pack.len);binfo.file_size += pdata->pack.len;pdata->pack.state = RIGHT;g_485_rec_buff.len = 0;h_485_usart2_write_nbyte((char *)&pdata->pack, sizeof(UPPACK));continue;
}

MFC重传部分代码

while(TRUE)
{memset((unsigned char *)&lpdata, 0, sizeof(UPDATA));nRBytes = fread((char *)&lpdata.data, 1, BUFFSIZE, fp);if(nRBytes <= 0) break;lpdata.pack.len = nRBytes;lpdata.pack.seq = seq++;    // package seqlpdata.pack.state = SENDING;
RESEND: // if wrong will be send the same data until five times.lpdata.checksum = CheckSum((unsigned char *)&lpdata, sizeof(UPDATA) - 1);CleanSendBuf(scom.hCom);WriteBytes(scom.hCom, (char *)&lpdata, sizeof(UPDATA));Sleep(300);memset((char *)&uppack, 0, sizeof(UPPACK));if(ReadBytes(scom.hCom, (char *)&uppack, sizeof(UPPACK)) > 0){if(uppack.state == WRONG){if(ErrorNum++ <= 5){goto RESEND;}else{ErrorNum = 0;Sleep(400);goto ERRORUP;}}ErrorNum = 0;if(uppack.state == RIGHT){i += 64;m_progress_update.SetPos(i);continue;}goto RESEND;}else{goto ERRORUP;}}
}

5:部分截图

6:遇到问题错误总结

1) MPLAB 编译器中编写指针赋值时,出现485无法接收数据的现象。

2) MPLAB 编译器中如果传参为运算乘时,出现运算错误。

3) EEPROM 在写最大页128Bytes时,需要写128 * N的地址。否则出现写入数据不完全的现象。具体我也没有理解。

4) 在擦除PIC 时,注意计算其擦除块的大小,避免擦除固定升级代码。

5) 固定升级代码中一定不能调用固定升级代码区域之外的函数。以免擦除后再次调用程序跑飞的现象。

6) 在计算固定升级代码时,中间不能有间隔。MPLAB会把其他小代码量的函数烧写其中。最好从最大地址算起。

PIC在线升级源码分析相关推荐

  1. 《游戏学习》| 水果忍者HTML5网页版在线游戏 | 源码分析

    游戏介绍 这是一款由百度JS小组提供的HTML5版切水果游戏,这款基于HTML5实现的网页版切水果游戏虽然和原版的切水果游戏相比仍有美中不足之处,但也算有声有色,画面效果也十分炫目华丽. 游戏截图 主 ...

  2. STM32 IAP 串口在线升级源码详解

    本博文基于本人修改的代码进行编写如需代码, 请到[代码下载](https://download.csdn.net/download/qq_36257571/10695681)自行下载. 详细内容不做过 ...

  3. Openstack liberty 云主机迁移源码分析之在线迁移3

    这是在线迁移 源码分析的第三篇,Openstack liberty 云主机迁移源码分析之在线迁移2中分析了prepare准备阶段nova-compute的处理过程,本文将会分析execute执行阶段的 ...

  4. 升级SpringCloud到Hoxton.SR3后使用Fegin出现jackson反序列化失败,源码分析,原因lombok版本升级

    关键词 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct insta ...

  5. 升级SpringCloud到Hoxton.SR3出现The bean 'xxx.FeignClientSpecification' could not be registered. 源码分析和解决

    最近提升项目的SpringCloud版本后出错误导致项目无法启动 关键词 The bean 'xxx.FeignClientSpecification' could not be registered ...

  6. 基于TCP网络通信的自动升级程序源码分析-客户端接收文件

    升级程序客户端接收文件 /// <summary>/// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据/// </summary>Dicti ...

  7. 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | Android 源码在线网址推荐 )

    文章目录 一.JobScheduler 提交任务 schedule 方法源码分析 二.schedule(JobInfo job, int uId) 方法 三.scheduleAsPackage 方法 ...

  8. pmon 源码分析之start.S

    快速发布新主题  首页 | 登录 | 现在注册    新闻 技术文章 下载 视频 专题 论坛 博客 小组 微博 在线研讨会 • 模拟设计 • 电源技术 • 嵌入式系统 • 测试与测量 • 通信 • E ...

  9. android源码分析

    01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 ...

最新文章

  1. StatQuest学习笔记23——RNA-seq简介
  2. spring aop 注入源码解析
  3. Java中设计模式之单例设计模式-1
  4. php fgetcsv 没有环绕符,PHP fgetcsv() 函数 | 菜鸟教程
  5. SharpMap分析手记
  6. 关于移动端的一些tip
  7. su: user tomcat does not exist
  8. 网站上flv,MP4等格式的视频文件播放不出来的解决办法
  9. led拼接屏报价_LED拼接屏的装饰
  10. adrms移动设备扩展插件_如何在所有移动设备上扩展网站
  11. cnn可视化 感受野(receptive field)可视化
  12. 一般纳米材料是指尺度为_水溶性单分散纳米材料的开发意义
  13. 点云算法在条码识别任务中的应用
  14. 计算机一级msoffice考试选择题题库,计算机一级《MS Office》考前选择题题库与答案...
  15. Kindle 电子书转换 azw3 mobi
  16. R语言outer函数应用于两个数组实战
  17. meso-四(4-烷氨基甲酰苯基)卟啉(AFPP);5-(4-氨基苯基)-10,15.20-三苯基卟啉(TPP-NH2);5,10,15,20-四吡啶基苯基卟啉(H2TPyP)齐岳供应
  18. 【AUTOSAR】【以太网】 EthIf
  19. 当今中华之教育改革势在必行矣!
  20. selenium 安装教程

热门文章

  1. NYOJ 108 士兵杀敌(一)
  2. java 中方法重载
  3. 专辑一:爱之初体验(初级)
  4. 《明解C语言》pdf
  5. 如何识别一个指针式的时种的时间?
  6. 微信公众平台开发新手教程(图文具体解释)
  7. 统计学习:基本常用公式(1)
  8. c++中override的应用
  9. CUDA Libraries简介
  10. Linux操作系统下双网卡路由表配置