51单片机IAP在线升级

article/2025/8/29 19:39:16

51单片机IAP在线升级
爱矽半导体E85F3325单片机IAP在线升级教程,此处可查看更新及demo下载

文章目录

  • 前言
  • 一、ROM资源
  • 二、KEIL有关知识
    • 1.BL51连接器:
    • 2.LX51连接器:
  • 三、Keil其他相关项说明:
  • 四、MCU启动文件说明:
  • 五、例程BOOTLOADER使用说明
  • 六、例程使用可更改说明:
  • 七、程序使用通信方式:XMODEM
  • 八、APP程序说明
  • 九、APP代码升级说明
  • 十、代码合并烧写


前言

扩展-IAP 主要用于产品出厂后应用程序的更新作用 ,类似于其他引导装载升级程序的方法,在系统中必须始终
存在一段用于程序装载的代码(bootloader),该代码在启动时被运行。其基本功能是根据外部条件来判断是运
行现有版本的程序还是从主机下载新程序。可用于使用串口下载器替换专用下载器进行下载,硬件设备的软件
的远程升级等功能。


一、ROM资源

E85F3325FLASH空间示意图如图0x0000到0x3fff为程序空间,可将程序空间进行分配,此处分为两个空间分别存储两个程序,共两个工程,一段为BootLoader(引导加载程序),一段为application(用户程序),MCU启动先执行BootLoader程序,检测有无升级标志位,再跳转入application程序执行,因此将BootLoader程序放在MAIN FLASH 空间最前面,芯片上电既运行BootLoader程序,再由BootLoader程序跳转到app程序执行。例程程序为BootLoader,空间分配为0x0000-0x0A00,共2.5k程序空间作为BootLoader程序存放空间 。0x0A00-0x3FFF空间可用作app空间。

二、KEIL有关知识

本例程使用keil作为编译工具,keil已经为我们做好了程序空间分配的相关功能,并能使用相应的连接器连接程序代码,不同的连接方式储存空间的分配方式不同,下面介绍keil的两种链接器。
Keil连接器介绍:keil有两种连接器,一种为BL51是keil默认连接器,一种为LX51是BL51扩展连接器,两种连接器均可设置keil代码存放空间。以下图片均可作为例程APP代码配置。

1.BL51连接器:

在这里插入图片描述
在device选项卡中去掉LX51的√即选用BL51连接器,即可选用KEIL默认链接器BL。

在这里插入图片描述
在BL51locate选项卡中,Use memory layout from target dialog选项为使用默认代码存放位,代码存放地址为0x0000起始开始,去掉勾后可改变代码存放地址,code range为代码存放地址,即ROM空间,xdata为RAM空间分配,可默认,跳转后可重新分配,如:
在这里插入图片描述

2.LX51连接器:

在这里插入图片描述
在device选项卡中勾上LX51的√即选用LX51连接器

在这里插入图片描述
Use memory layout from target dialog选项为使用默认代码存放位,代码存放地址为0x0000起始开始,去掉勾后可改变代码存放地址,user classes分配代码空间,如:
在这里插入图片描述
分配代码空间为0x0A00-0x3FFF,具体可自己按格式定义。

三、Keil其他相关项说明:

在这里插入图片描述Memory model:默认变量分配,small默认分配变量为idata,large默认分配变量为xdata。 Code rom size:small程序代码最大2k,Large程序代码最大64k。
在这里插入图片描述Level:程序优化等级,考虑到程序优化时的分配,建议app程序优化等级不可超过8。
Interrupt vector at address:中断偏移地址。

四、MCU启动文件说明:

在这里插入图片描述
CSEG AT 0A00h
启动地址为0x0A00。
MCU程序跳转语句:
((void (code *) (void)) 0x0A00) ();定义函数指针指向0x0A00地址。

五、例程BOOTLOADER使用说明

程序占用空间:例程程序大小大约占0x0000-0x0900,因为flash分页设置及BootLoader余量考虑,BootLoader程序占用空间为0x0000-0x0A00。

程序运行顺序:
在这里插入图片描述
程序以P05脚为检测标志位,可自行更改,P05设置为上拉输入,拉低为需要更新程序,更新程序时先擦除flash,再写入,可写入的flash空间为0x0A00-0x3FFF。不可超出此空间。写入完成后会跳转到app程序执行。

六、例程使用可更改说明:

在这里插入图片描述
更改启动文件里中断偏移量,与app起始地址相同。

在这里插入图片描述
更改烧写地址,与app起始地址相同

在这里插入图片描述
定义触发升级IO口。其中串口定义为P03 (RX),P04(TX)脚。
完成程序更改。

七、程序使用通信方式:XMODEM

XModem是一种在串口通信中广泛使用的异步文件传输协议,分为XModem和1k-XModem协议两种,前者使用128字节的数据块,后者使用1024字节即1k字节的数据块。本例程限于RAM大小使用XModem协议。

1. XModem信息包格式
XModem协议最早由Ward Christensen在20世纪70年代提出并实现的,传输数据单位为信息包,信息包格式如下:
在这里插入图片描述
2. 校验和的计算
所有的数据字节都将参与和运算,由于校验和只占一个字节,如果累加的和超过255将从零开始继续累加。
3. 字段定义
01H
04H
06H
15H
18H
4. 校验和方式的XModem传输流程
传输流程如图所示:
在这里插入图片描述对于发送方仅仅支持校验和的传输方式,接收方应首先发送NAK信号来发起传输,如果发送方没有数据发送过来,需要超时等待3秒之后再发起NAK信号来进行数据传输。对于数据传输正确,接收方需要发送ACK信号来进行确认,如果数据传输有误,则发送NAK信号,发送方在接收到NAK信号之后需要重新发起该次数据传输,如果数据已近传输完成,发送方需要发送EOT信号,来结束数据传输。
5. 如何取消数据传输
当接收方发送CAN表示无条件结束本次传输过程,发送方收到CAN后,无需发送EOT来确认,直接停止数据的发送。

八、APP程序说明

App程序主要注意以下几点
1. 定义代码存放位置,详见上面连接器有关知识。
2. 中断偏移,详见keil其他相关项说明
3. 代码启动位置,详见启动项说明。
4. 代码空间,注意不能超出剩余代码空间,否则程序烧写不完整。

九、APP代码升级说明

一般代码升级有两种方式,PC端软件升级或通过另一模块升级。升级前要下载BootLoader程序到芯片并置位相应的脚触发升级信号。

PC端升级
在这里插入图片描述使用支持xmodem协议的串口助手。

十、代码合并烧写

考虑到出厂时要先烧写IAP 再烧写APP应用程序要烧写2次增加工人劳动力的基础上写了“ IAP+APP ==>双剑合一,减少烧写次数,增加烧写效率。 代码合并软件,此处使用Notepad++。

在这里插入图片描述
直接打开两个工程生成的HEX文件
在这里插入图片描述滑到文件最下方可以看到:00000001FF 这句话,这句话为文件结束语句,删除,然后Copy另一文件全部数据,加入到文件后方,如图:

在这里插入图片描述
即完成两个hex的合并,可以使用量产编程器下载验证。

程序等在我的资源里可下载,已打包好。程序下载


http://chatgpt.dhexx.cn/article/CHkL1RCw.shtml

相关文章

在线升级版本:ESXI6.5升级7.0

将一台使用ESXI6.7的虚升级条件 1、首先确保硬件是否能升级到7.0版本,注意:物理网卡驱动为e1000e不能升级,如果是igbn,则可以顺利升级。拟机升级到了7.0版本。 升级方法 升级方法有补丁升级、在线升级和U盘升级三种方式&#xff0…

Ubuntu 如何 在线升级系统

Ubuntu 如何升级更新系统 有也常用 Kali Linux 的小伙伴会很熟悉,在Kali中我们只需要使用apt/apt-get包管理器执行如下命令即可: sudo apt update && apt upgrade -y一般执行结束就已完成Kali系统的更新或者再加上: sudo apt dist-upgrade -y&am…

跨平台应用开发进阶(三): uni-app 实现资源在线升级/热更新

文章目录 一、前言1.1 Android升级检测机制 二、wgt 资源升级包升级2.1 修改版本号2.2 发行2.3 安装资源升级包2.3.1 代码示例2.3.2 小结 三、整包升级3.1 客户端实现3.2 数据表实现3.3 服务端实现3.4 发版配置3.5 注意事项 四、Uni-app 版本升级中心4.1 升级中心 uni-upgrade-…

STM32 IAP 在线升级原理全解析

点击左上角的“关注”,定期更新 STM32 最新资讯,总有你想要的信息! STM32 IAP 在线升级原理全解析 1. 什么是 IAP? IAP(In-Application Programming)是用户自己的程序在运行过程中对 User Flash 部分的区域…

ESP8266实现在线升级OTA

今天总结一下我实现ESP8266实现在线升级(OTA)的经验 关于理论介绍我这里不多讲,大家可以参考以下文章: 1.一个网友总结的经验(我这篇文章主要也是对该文章做进一步补充):https://www.cnblogs.c…

stm32在线升级方案

目录 下载固件流程: Bootloader程序设计流程 普通工程改为APP工程的步骤 背景:当嵌入式软件需要固件升级时,有时需要拆卸设备,较为麻烦,为方便升级,提供远程升级的功能,可通过网络或其他通讯…

串口在线升级步骤

串口在线升级步骤 一、查看工程文件的Config.h 二、确定本地地址和目标地址 三、打开在线升级工具 四、配置串口参数 串口配置可以波查询代码与PC通讯的UART设置的参数。 五、填写本机地址和目标地址 本机地址为0xf3 243 主板目标地址为0xf5 245 PMT板目标地址为0x13 19 …

mariadb数据库在线升级版本

mariadb----在线版本升级 我之前的数据库版本号是5.5 一:备份数据库和数据库配置 mysqldump -u root -p --all-databases > /home/mydb.sql mv /etc/my.cnf /etc/my.cnf.bak 二:添加mariadb yum库 vim /etc/yum.repos.d/MariaDB.repo [mariadb] na…

FPGA远程固件在线升级

FPGA远程固件在线升级 1.摘要 对最近做的FPGA远程更新/在线升级做一个总结。一般在代码开发阶段,我们使用JTAG烧写代码,但当产品投入到实际使用过程中,难以再用JTAG进行固件更新。所以需要开发远程/在线更新的功能,即使用产品自…

固件在线升级流程

从事硬件开发,为了方便维护,免不了对模块进行固件升级,所以对于固件升级,简单整理了一下完整的在线升级的实现思路,该思路适用于所有带通讯总线的模块。 需要注意的是,需要额外的上位机配合。 下位机在线…

php 在线升级

php 在线升级 功能 目前已修改为通用解决方案 点击下方链接下载 此为最新优化过的版本 之后的贴图 说明 仅用来做思路参考 我就不再修改了 下面是思路解析思路一思路二升级程序服务器检测版本至此整个升级程序已经结束 感谢大家参考有任何问题都可以直接联系我咨询 一定不吝赐教…

软件在线升级系统设计

需求描述 一直用Qt开发PC版本的程序,常用的方法都是打包发布。目前开发的程序比较复杂,涉及到上百个独立的进程以及4000多个相关文件,采用原来的打包发布就变得很麻烦,第一改动比较频繁,打包次数过多;第二…

Nginx在线升级

1、查看当前nginx版本,nginx -v(小写v) 2、下载最新版本nginx包,nginx-1.23.1.tar.gz 3、解压tar -zxvf nginx-1.23.1.tar.gz 4、进入解压目录cd nginx-1.23.1.tar.gz 5、查看nginx当前配置,nginx -V注意这里是大写…

在线升级:OTA升级的原理和实现方式

目录 1、OTA 在线升级 2、实现方式 3、操作方式 3.1、后台式升级 3.2、非后台式式更新 4、STM32 的在线升级 4.1、划分 Flash 区域 4.2、实操1 - Flash空间地址的划分 4.3、实操2 - 设置工程 4.4、实操3 - 接收固件更新包 4.5、实操4 - 拷贝程序至Flash 4.6、实操5 - 跳转至 Ap…

halcon 彩色图转灰度图

read_image (Image, jiao1.bmp) //读取图像 get_image_size (Image, Width, Height) //获取宽高 dev_close_window () //关闭图形窗口 rgb1_to_gray (Image, GrayImage) //彩色图转灰度图 dev_open_window (0, 0, Width, Height, black, WindowHandle) //打开图形窗口 d…

Python中使用PIL快速实现灰度图

效果 原图 效果图 实现 新建文件夹grayImage,在此文件夹下新建gray.py from PIL import Image imgImage.open(1111.jpg) imgimg.convert(L) img.save(灰度图.jpg) 其中1111.jpg是原图,将其放在同目录下。 运行即可。 源码以及资源下载 https://do…

计算机灰度分析,计算机中的256级灰度图像

【建议1】使用GltraEdit软件观察字符“((Z20享有声望的学校联盟)”的内部代码. 以下说法正确 A. 字符“(”的内部代码占用两个字节 B. 字符“ Lian”的代码值的二进制表示形式是11010001 10101010 C. 图片中有5个ASCⅡ字符,其中字符“ 2”的代码值的十六进制表示为32 D. 字符“…

C++-灰度图上色GrayToColor

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 场景需求 最近有客户提出,想要将解包裹图像转化为有颜色的图像,具备更佳的视觉效果。解包裹图是一个floa…

灰度图与二值化

图像处理的灰度化和二值化 在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的…

opencv学习5:cvtColor RGB图像转灰度图像原理

简介 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、…