找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

一种利用串口51单片机远程升级 OTA

查看数: 13059 | 评论数: 31 | 收藏 30
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-2-15 18:29

正文摘要:

      想想来这个论坛挺久了,也在这学了不少东西,本着回馈论坛,回馈网友的心态,发一篇关于OTA的贴,不喜勿喷,随着现在科技的发展,市面上出现很多带wifi,蓝牙等智能产品,为满足人们对产 ...

回复

ID:50577 发表于 2025-2-6 13:35
厉害,试一试
ID:961114 发表于 2022-10-27 10:30
hongshi123 发表于 2022-10-27 09:33
你好 能否请教下怎么做 最近在做51单片机升级

新站STCAI
还是从 STC-ISP V6.90T 以上版本的 ISP烧录/辅助开发工具包一体化软件的//资料下载// 专栏 中下载 开源的 C语言代码, 开源的原理图

51hei截图20221027102901.jpg (164.21 KB, 下载次数: 112)

51hei截图20221027102901.jpg
ID:1047140 发表于 2022-10-27 09:33
yuanyijie 发表于 2021-7-3 09:18
INTERRUPT_OFFSET EQU 0X0600 ;中断偏移量

你好 能否请教下怎么做 最近在做51单片机升级
ID:526108 发表于 2022-10-10 20:54
我也做过IAP51单片机在线升级功能,大致国过程和你的差不多,但比你的简单
我的项目比较大,需要用到64KROM,所以外置EEPROM,有更新先下载到EEPROM并验证一次
ROM划分两部分APP区(地址从0x0000开始)和UPDATE区,UPDATE只负责把EEPROM中的新APP程序写入单片机APP区,验证升级和程序下载命令等都在APP中,这样就能随时更新下载验证指令了。
UPDATE区程序需要偏置到单片机FLASH末尾处,同时APP区也备份UPDATE程序,用来验证是否正确。需要升级时使用指针函数跳转到UPDATE区,升级完单片机复位即可。
ID:539106 发表于 2022-10-10 14:31
have a look
ID:1047140 发表于 2022-10-10 14:19
你好 远程升级那部分有完整的代码吗  能分享下吗
ID:981261 发表于 2021-11-15 19:45
yuanyijie 发表于 2021-7-3 09:18
INTERRUPT_OFFSET EQU 0X0600 ;中断偏移量

你好!我正在自学做一个51单片机用1K xmodem升级的项目,请问可以请教源码吗?谢谢!
ID:163099 发表于 2021-10-25 13:03
请问怎么read和write单片机flash
ID:450849 发表于 2021-7-3 16:47
yuanyijie 发表于 2021-7-3 09:18
INTERRUPT_OFFSET EQU 0X0600 ;中断偏移量



有道理,受教了
ID:450849 发表于 2021-7-3 16:47
yuanyijie 发表于 2021-7-3 09:13
从APP2拷贝数据到APP1的时候,刚好擦除了扇区0而还没写入时,突然掉电了,怎么能跳转到BOOTLOAD(0X6000)程序 ...

有道理
ID:156923 发表于 2021-7-3 09:18
                INTERRUPT_OFFSET EQU 0X0600 ;中断偏移量


                CSEG    AT      0X0000;绝对地址
                               
?C_STARTUP:     LJMP    STARTUP1

                                ;中断向量地址
                                ORG      0X0003;相对地址(偏移地址)
                                LJMP     INTERRUPT_OFFSET + $    ;INT0中断
                               
                                ORG      0X000B       
                                LJMP     INTERRUPT_OFFSET + $         ;T0中断
                               
                                ORG      0X0013  
                                LJMP     INTERRUPT_OFFSET + $    ;INT1中断
                               
                                ORG      0X001B  
                                LJMP     INTERRUPT_OFFSET + $    ;T1中断
                               
                                ORG      0X0023          
                                LJMP     INTERRUPT_OFFSET + $         ;UART1中断
                               
                                ORG      0X002B
                                LJMP     INTERRUPT_OFFSET + $    ;WDT中断
                               
                                ORG      0X0033
                                LJMP     INTERRUPT_OFFSET + $    ;LVD中断
                               
                                ORG      0X003B
                                LJMP     INTERRUPT_OFFSET + $    ;UART2中断
                               
                                ORG      0X0043
                                LJMP     INTERRUPT_OFFSET + $         ;SPI中断
                               
                                ORG      0X004B
                                LJMP     INTERRUPT_OFFSET + $    ;IIC中断
                               
                                ORG      0X0053
                                LJMP     INTERRUPT_OFFSET + $    ;T3中断
                               
                                ORG      0X005B
                                LJMP     INTERRUPT_OFFSET + $    ;T4中断
                               
                                ORG      0X0063
                                LJMP     INTERRUPT_OFFSET + $    ;PWM中断
                               
                                ORG      0X006B
                                LJMP     INTERRUPT_OFFSET + $    ;T5中断
                               
                                ORG      0X0073
                                LJMP     INTERRUPT_OFFSET + $    ;CTK中断
                               
                                ORG      0X007B
                                LJMP     INTERRUPT_OFFSET + $    ;ADC中断
                               
                                ORG      0X0083
                                LJMP     INTERRUPT_OFFSET + $    ;INT2-INT7中断
                               
                                ORG      0X008B
                                LJMP     INTERRUPT_OFFSET + $    ;INT8-17中断

                                ORG      0X0093
                                LJMP     INTERRUPT_OFFSET + $    ;P2INT中断
                               
                                RSEG    ?C_C51STARTUP;自动分配地址
               
                                ;CSEG    AT      0X0700;指定APP起始地址


我做的是把BOOTLOAD程序放在0X0000-0X0600处的,使用XMODEM协议进行下载
ID:156923 发表于 2021-7-3 09:13

从APP2拷贝数据到APP1的时候,刚好擦除了扇区0而还没写入时,突然掉电了,怎么能跳转到BOOTLOAD(0X6000)程序呢位置呢?
ID:450849 发表于 2021-7-1 09:10
yuanyijie 发表于 2021-6-30 10:21
存在风险哦

什么风险呢?
ID:156923 发表于 2021-6-30 10:21
存在风险哦
ID:246441 发表于 2020-12-27 02:20
楼上试,代码不全嘛,我没有51单片机,有的话我也来试了
ID:115923 发表于 2020-12-5 10:11
C51  代码不全, 无法实现楼主 说的 功能,   不信 , 你们 试一试 ,
楼主 ,也就是 一个 方向 ,  方案,  想专研的人 可以考虑 安装这个思路去实现,  但是不一定会成功,  说了
这只是方案!
ID:246441 发表于 2020-12-3 19:20
高手啊,启动跳转改.A51好像可以跳吧
ID:385637 发表于 2020-7-25 18:32
高手,这是高手
ID:450849 发表于 2020-7-24 20:41
hei51com 发表于 2020-5-12 23:07
51也能串口升级,会玩

多谢夸奖
ID:731155 发表于 2020-5-12 23:07
51也能串口升级,会玩
ID:94449 发表于 2020-2-28 21:51
不错资料,学习下。
ID:699613 发表于 2020-2-28 15:58
楼主真的很用心呀
ID:450849 发表于 2020-2-28 00:02
百度 “51 OTA”,竟然发现有被复制到别人的论坛。
ID:527324 发表于 2020-2-23 22:13
正好需要!!!
ID:163391 发表于 2020-2-23 18:53
这个有意思
ID:450849 发表于 2020-2-23 17:04
chinayanhui 发表于 2020-2-23 13:38
一直有一个疑问想问一下楼主

就是51单片机在运行的过程中可以读写程序区的flash吗?

51系列有很多品牌,具体要看规格书
ID:695961 发表于 2020-2-23 13:38
一直有一个疑问想问一下楼主

就是51单片机在运行的过程中可以读写程序区的flash吗?
ID:450849 发表于 2020-2-23 09:37
xyz_123 发表于 2020-2-22 10:29
编译bootload时,
Memory Model选Large: variables in XDATA有何讲究,用Small可以吗?
不勾选Use On-chi ...

Small:变量存储在内部ram里;
Large:变量存储在外部Ram里,使用16位间接寻址;所以程序大我们一般选 large
app1可以放置再0x100,这个地址避开中断向量就可以,个人愚见。
ID:696374 发表于 2020-2-22 10:29
编译bootload时,
Memory Model选Large: variables in XDATA有何讲究,用Small可以吗?
不勾选Use On-chip ROM有何讲究?

编译App1时,
App1的起点放在0x1000有何讲究?可以放在其它处,例如0x100吗?
ID:450849 发表于 2020-2-21 08:09

过奖了
ID:695525 发表于 2020-2-20 11:34
不错,会玩!

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

Powered by 单片机教程网

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