找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2727|回复: 9
收起左侧

请问大佬怎么用STC/IAP15F2K60S2单片机实现IAP在线升级程序的方法

[复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次(中奖概率 50%)
ID:417328 发表于 2022-5-30 17:15 | 显示全部楼层 |阅读模式
我在烧录的时候不知道怎么跳到bootload区,只是在APP程序区写FLASH,我发现只要是写0X0000-0X0800之间程序就会卡死,我是那里写的不对吗?
因为STC15F2K60S2单片机只有512字节的ISP区在0XF000-0XF1FF,是不是我现在这样定义就是把BOOT地址定义在了0x0000-0x0200区间了,请大佬帮忙看看是我的思路哪里出现了问题,第一次接触IAP升级。

升级代码的区间

升级代码的区间

ISP下载程序入口地址

ISP下载程序入口地址

程序下载地址

程序下载地址

keil5配置

keil5配置
回复

使用道具 举报

ID:624769 发表于 2022-5-30 18:53 | 显示全部楼层
要实现自定义下载编程, 需要IAP 系列单片机,你用STC系列是实现不了的……
回复

使用道具 举报

ID:417328 发表于 2022-5-31 08:27 | 显示全部楼层
188610329 发表于 2022-5-30 18:53
要实现自定义下载编程, 需要IAP 系列单片机,你用STC系列是实现不了的……

我用的是STC的IAP系列单片机:IAP15F2K60S2单片机,不要答非所问了
图片5.png
回复

使用道具 举报

ID:624769 发表于 2022-5-31 11:38 | 显示全部楼层
513489465 发表于 2022-5-31 08:27
我用的是STC的IAP系列单片机:IAP15F2K60S2单片机,不要答非所问了

STC15F2K系列单片机里面, 可以支持 IAP可编程的单片机,只有  IAP15F/L2k61S, 以及 IAP15F/L2k61S2,这两款。但是,你的问题里写的型号 确是 STC15F2K60S2,   即便,我提了之后,你依然回答的是:  IAP15F2K60S2   而不是: IAP15F2K61S2 ……  然后,还是我答非所问了?你可以翻翻论坛 问答区记录, 用错型号,造成实现不了功能的  比比皆是。对,也许你不是其中的一份子, 但是,用到 IAP 自定义下载功能的,对于程序编写的严谨程度,非常高,严谨的习惯应该从型号开始,你觉得呢?

从你后发的下载器的照片来看,你用的型号应该没错,那么来具体讨论一下你的问题。

IAP 可编程自定义下载, 说白了,就是自己写一个 串口接收程序,用来接收上位机发来的程序数据,然后,利用操作 IAP 寄存器,把串口收到的程序写入单片机的Flash.  所以,这个程序 要满足3个条件。
1)串口接收的代码,(可以不依赖串口中断的串口接收代码)
2)写Flash的代码。
3)在改写Flash 区域的时候,不会误删除自己本身的(1)(2)两部分代码。
所以,一般……  自定义可编程程序, 通常我们命名为: ISPPROGRAM  的程序我们一般放在FLASH的末尾,以IAP15F2K61S2  为例,就是放在 0xF000 的位置。
你的(图片1)里面 ISPPROGRAM 定义在 0x0000 我不知道你如何设计的,我不做过多评价,要知道0x0000可是程序启动后的入口啊……
至少,不用汇编,用C来的写的话,我是没法做到把ISPPROGRAM 放在 程序区 从 0x0000  开始, 0x0003  0x000B  每8个字节一个坑的,那么多中断向量的地方,存放自定义可编程程序。
并且,自定义可编程程序的目的是什么?  改写程序,改写程序,你能不牵涉到中断这些? 这些东西都不需要改?自定义下载程序放在 这块地方,就算你……, 没有就算了,我觉得是写不出来的。

我不清楚你说的 BootLoad 区是指的什么? 如果是单片机自己的 bootload 区,那么你是访问不了的,是出厂后写在你不可访问区域的也不会存在于0x0200的。
如果是你自己写的程序,那么,你项目中是否把 你自己定义的 Bootload  定向在 0x0200 了呢? 不要说 define 那只是定义一个字符串
程序的所在位置强制定义在指定地址, C语言是通过 _at_  汇编 通过 AT 或者 ORG 来指定的.
就你贴的这些代码,除了看出ISPPROGRAM   0x0000   是极度不合理之外,其他都看不出来。

回复

使用道具 举报

ID:417328 发表于 2022-6-6 08:49 | 显示全部楼层
188610329 发表于 2022-5-31 11:38
STC15F2K系列单片机里面, 可以支持 IAP可编程的单片机,只有  IAP15F/L2k61S, 以及 IAP15F/L2k61S2,这两 ...

只要是我是小白第一次弄这个,也不知道Bootload程序到底怎么写,我是写两个代码区合并吗?我要是知道BOOTLOAD程序的写法就不请教您了,我想的是:程序上电先运行判断是否进入app程序和升级程序,放在0X
0000地址也可以阿
回复

使用道具 举报

ID:624769 发表于 2022-6-6 16:40 | 显示全部楼层
513489465 发表于 2022-6-6 08:49
只要是我是小白第一次弄这个,也不知道Bootload程序到底怎么写,我是写两个代码区合并吗?我要是知道BOOT ...

感觉怎么讲不通了呢?
你说的 “bootload” 究竟是什么东西? 为什么要写 “bootload” 程序? 如果是上电自检,那是在系统自检区的东西,不是你能改的,如果是你自己要写一个 bootload2 程序,你想做成什么样子? 和 ISPPROGRAM 的实质区别是什么?为什么要在 ISPPROGRAM 之外增加这么一个东西?  
单片机 上电后的默认流程  访问bootload 区,检查是否开始下载新程序还是 跳转到 APP区启动, 到此为止,都不是你可以插手的事情。
然后就是 0x0000  这里会有强制跳转,开始运行 STARTUP.A51 里面的设定, 然后,再强制跳转 开始执行 void main() 里面你设计的程序。  如果你不会汇编, 到此为止的所有操作,你依然不可以插手。
然后,才开始执行,你自己编写的程序,这里开始才是你能插手的地方, 所以,你应该明白, 你想把东西写在0x0000 到底是否切合实际了吧?  
再来说,ISPPROGRAM 这个程序,这个程序,你看过没? 是你自己写的么? 如果是官方提供的 样本,你会发现,是汇编写的, 真正把 ISPPROGRAM 写在 0xF000  处 依靠的是这个程序里的  ORG 伪指令,和你C 里面的 define 没有1毛钱的关系, 你说你上传图片里,有ISPPROGRAM这一块代码么? 你连程序怎么运作的原理都没搞明白,就试图修改,是不是急了一点?  
IAP 在线自定义下载,牵涉到很多单片机的基础认知。你没有真正理解单片机的动作原理, 要么老老实实抄官方代码,要么就不要动这一块,尤其是 0x0000~0x01ff  这个区间,里面有多少坑,你根本就趟不过来。
回复

使用道具 举报

ID:417328 发表于 2022-6-7 13:44 | 显示全部楼层
188610329 发表于 2022-6-6 16:40
感觉怎么讲不通了呢?
你说的 “bootload” 究竟是什么东西? 为什么要写 “bootload” 程序? 如果是上 ...

是的,最近在弄这个,发现好多坑,
回复

使用道具 举报

ID:45879 发表于 2022-12-15 10:13 | 显示全部楼层
188610329 发表于 2022-6-6 16:40
感觉怎么讲不通了呢?
你说的 “bootload” 究竟是什么东西? 为什么要写 “bootload” 程序? 如果是上 ...

写的很详细 赞一个
回复

使用道具 举报

ID:1034262 发表于 2022-12-15 12:19 | 显示全部楼层
楼主,可以到STC官网下载官方的例程,百度stcai
回复

使用道具 举报

ID:1034262 发表于 2022-12-15 15:33 | 显示全部楼层
STC官网有完整的远程更新例程,可以去STC官网下载。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表