求助51单片机怎么做IAP自升级

[复制链接]
4894|21
手机看帖
扫描二维码
随时随地手机跟帖
18576478035|  楼主 | 2017-11-15 22:21 | 显示全部楼层
有人知道吗,?

使用特权

评论回复
干掉9527| | 2017-11-15 22:43 | 显示全部楼层
普通51做不了,

使用特权

评论回复
18576478035|  楼主 | 2017-11-16 09:36 | 显示全部楼层
新唐的 可以吗?

使用特权

评论回复
huangfaqian| | 2017-11-16 10:27 | 显示全部楼层
提两点我在这方面的看法,首先单片机程序存储介质必须可以在线擦写,存储介质通常是FLASH,第二,得有个bootloader,当启动IAP时,用这个bootloader去做程序擦写。另外,要做好还要考虑,串口波特率自动同步,程序校验,断电是否还可以正常运行,是全部更新,还是部分更新等等。

使用特权

评论回复
NE5532| | 2017-11-16 10:40 | 显示全部楼层
先要硬件支持,然后如果MCU自己不带这种软件,就要自己写程序了。

使用特权

评论回复
ningling_21| | 2017-11-16 10:46 | 显示全部楼层

需要单片机的硬件支持,还有bootloader程序支持,加上上位机软件的配合

使用特权

评论回复
WCHCN| | 2017-11-16 11:08 | 显示全部楼层
你好,正如楼上所说,要实现IAP功能,单片机必须是flash型,支持程序擦写,还要有个特殊区域用来存放控制擦写的代码,我们的51内核USB单片机都支持IAP自升级功能,具体的可以参看附件说明文档,可用型号:CH559/CH558/CH554/CH552/CH551.
IAP参考代码也都是提供的,具体可到我司官网下载CH559EVT.ZIP,在如下路径中查看:CH559EVT\EVT\EXAM\IAP

CH559 IAP功能使用说明.pdf

833.72 KB

使用特权

评论回复
coody| | 2017-11-16 18:29 | 显示全部楼层
我做过STC的IAP系列的BOOTLOADER,很稳定的。通过串口或2.4G无线模块来远程更新。

使用特权

评论回复
18576478035|  楼主 | 2017-11-16 19:49 | 显示全部楼层
coody 发表于 2017-11-16 18:29
我做过STC的IAP系列的BOOTLOADER,很稳定的。通过串口或2.4G无线模块来远程更新。 ...

你好,使用串口给发送BIN文件后,应该把BIN文件写入到那个位置才能运行?

使用特权

评论回复
blust5| | 2017-11-16 19:58 | 显示全部楼层
如果单片机不自带BootLoader的话,可以自己写一个引导程序,当然前提是能程序擦写的flash才行。
我们现在用的串口BootLoader就是自己写的,可以设定一个跳转地址,引导程序去检测该地址下的内容,如果满足某个条件,就跳转到用户程序区,否则就在引导程序里运行。引导程序可以放在flash的最高地址区,用户程序就从0地址开始写。
每次复位都是先运行引导程序,如果满足跳转条件就跳到用户app区,不满足就继续引导。用户app里面可以设定接到特定指令之后擦除跳转地址下的内容并触发看门狗复位,就走到引导区了,就可以刷新app了。

使用特权

评论回复
18576478035|  楼主 | 2017-11-16 20:15 | 显示全部楼层
blust5 发表于 2017-11-16 19:58
如果单片机不自带BootLoader的话,可以自己写一个引导程序,当然前提是能程序擦写的flash才行。
我们现在用 ...

你好,擦除跳转区之后要怎么做,怎么实现新程序覆盖旧程序?

使用特权

评论回复
blust5| | 2017-11-17 08:09 | 显示全部楼层
18576478035 发表于 2017-11-16 20:15
你好,擦除跳转区之后要怎么做,怎么实现新程序覆盖旧程序?

1、把flash分为两个区,一个是app区,一个是boot区,并在EEPROM里面设一位跳转地址。
2、复位之后先运行boot程序,去检查跳转地址对应的内容是否被成功赋值,是则跳转到APP,否则继续boot。/3、APP下载完成之后就去赋值EEPROM的跳转地址的内容,然后复位,就会运行一遍2,跳转到APP。
4、烧程序时,给APP发一个特定指令,APP去擦除掉跳转地址的内容,然后复位,就会运行一遍2,并停在boot里面运行。这时候通过boot程序把新的APP内容完全覆盖掉旧的内容,就是要把整个APP区全部写一遍,因为这个过程没有操作boot区,而且程序是在boot区里面跑,所以是可以进行的。
5、所有内容加载完成,并验证成功之后,boot程序需要往跳转地址里面赋值特定的内容,然后通过看门狗进行复位,就会运行一遍2,并跳转到APP,这时候已经是新的APP了。

使用特权

评论回复
18576478035|  楼主 | 2017-11-17 11:41 | 显示全部楼层
谢谢,我现在做IAP 做了两个HEX文件BOOT 和APP  ,Bootloder 在0x2000 区域,上电后怎么让单片机直接跳转到BOOT区域执行?是在启动代码里面做吗? 还有我的 APP入口地址在0x0003H,我查看两个HEX文件发现   :0x03 (0000)   00  (02 10 00 )EB, 我想知道 0x0000 区域的前三个字节是什么作用?

使用特权

评论回复
ningling_21| | 2017-11-17 19:25 | 显示全部楼层
18576478035 发表于 2017-11-17 11:41
谢谢,我现在做IAP 做了两个HEX文件BOOT 和APP  ,Bootloder 在0x2000 区域,上电后怎么让单片机直接跳转到B ...

作用:跳转到指定地址去执行

使用特权

评论回复
18576478035|  楼主 | 2017-11-18 10:00 | 显示全部楼层
ningling_21 发表于 2017-11-17 19:25
作用:跳转到指定地址去执行

谢谢,明白了

使用特权

评论回复
coody| | 2017-11-20 09:36 | 显示全部楼层
18576478035 发表于 2017-11-16 19:49
你好,使用串口给发送BIN文件后,应该把BIN文件写入到那个位置才能运行? ...

51系列的就是从0x0000开始放用户代码,如果是STM32就是从你重定位的地方放代码。

使用特权

评论回复
hdwgt| | 2017-11-21 18:46 | 显示全部楼层
这个想法完全可以,当前不少的51都已经具备了。只要明白Bin格式或hex格式就可以。思路、解决办法不止一种。

使用特权

评论回复
huskyhong| | 2019-7-30 15:51 | 显示全部楼层
coody 发表于 2017-11-16 18:29
我做过STC的IAP系列的BOOTLOADER,很稳定的。通过串口或2.4G无线模块来远程更新。 ...

可以指导一下吗,我也在做WIFI远程升级

使用特权

评论回复
huskyhong| | 2019-7-30 15:52 | 显示全部楼层
coody 发表于 2017-11-16 18:29
我做过STC的IAP系列的BOOTLOADER,很稳定的。通过串口或2.4G无线模块来远程更新。 ...

可以指导一下吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

187

帖子

2

粉丝