STC51单片机实现IAP远程升级过程分享


关于STC单片机IAP远程更新相关信息非常少,因工作项目需要,研究了一番IAP远程更新的操作,特写下经验分享。第一次写博客,有错误的地方欢迎大家指出哈,谢谢。

1.STC内部ISP更新机制

ISP(In System Program)在系统编程,当前已成为单片机烧录程序的主流方式,其原理是由厂商在单片机内部固化一段ISP代码,STC单片机是在上电时检测是否有连续的‘d’字符,如果检测到,则认为进入ISP准备阶段。如果超时没有收到’d’,则执行用户代码区。若进入ISP准备阶段,根据STC定义的协议接收数据帧,最后完成程序的擦除、写入。在ISP准备阶段若未收到数据帧,则超时退出ISP,执行用户代码区。ISP的固有缺点便是需要线刷。但其原理在接下来的IAP远程更新中需要用到。

2.了解51单片机IAP分区

表1-1.STC典型ISP分区

分区地址 分区名称
0000H 应用分区起始
FFFFH 应用分区结束
未知 ISP固化分区

图1-1.典型用户程序FLASH分配截取
在这里插入图片描述
IAP(In Application Program)在应用编程允许用户直接在应用程序中直接对程序进行编程。因此我们可以利用IAP功能实现程序的远程更新。STC采用的方式则是对单片机进行IAP分区。在此需要了解STC如何对整个单片机的FLASH进行分区的,

我们看一下图1-1。以STC8A8K64S4A12为例,在典型的ISP分区中,用户使用的代码区从0000H到FFFFH。这段地址单片机的FLASH写入的第1、2、3个字节总是以02开头,以不固定的另外两个字节ECFEH或其他地址,作为第2、3个字节。这三个字节正是单片机的启动码。在汇编语言中,02表示LJMP。后面两个字节ECFE这个位置会随着IAP程序的大小而变化,这个LJMP跳转到的位置我猜想可能是厂商固化的ISP程序。因为这两个字节的地址始终大于我们实际编写的代码的大小。这也符合ISP最后跳转到代码区中的猜想。

表1-2.STC单片机IAP分区

分区地址 分区名称
0000H IAP启动码+应用分区起始
E3FFH 应用分区结束+应用启动码(3Byte)
E400H- F400H IAP分区
未知 ISP固化分区

图1-2.IAP启动代码FLASH分配截取
ISP启动代码
图1-3.用户程序启动代码FLASH分配截取
应用区启动代码
图1-4.keil指定IAP代码启动位置工程配置指定从0XE400到0XF3FF
在这里插入图片描述
图1-5.keil指定IAP代码启动位置工程配置大小限制为0x1000
在这里插入图片描述
图1-6.利用STC-ISP软件保存BIN格式烧写文件
在这里插入图片描述
图1-2中,程序是通过IAP实现更新的,我截取了通过IAP更新后的部分代码,可以看到,0000H地址依旧LJMP到ECFEH,这里就当是固化的ISP位置(会随我们的IAP程序大小而变化)。ISP会自动跳转到我们编写的IAP程序中,也就是E400H,因此在编写IAP程序工程时,我们需要指定工程代码生成的位置,详见配置方式图1-

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值