找回密码
 立即注册
查看: 571|回复: 12

STC8H-OTA-WIFI模块标准XMODEM协议透传升级问题

[复制链接]
  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
    发表于 2023-9-12 17:36:04 | 显示全部楼层 |阅读模式
    1.平台:STC8H8K64U

    2.模块:小米WIFI模块
    3.串口:串口2.2
    4.问题:bootloader程序负责搬运APP2至APP1,不带其他功能
                APP1程序负责运行,并对接XMODEM协议进行固件的接收,然后写入到APP2区域内,均为内部flash
                需要解决的问题:1.bootloader程序如何跟app1拼接然后下载到mcu中,因为boot不带升级功能,所以要把app程序一并下载,后续升级就一个循环擦写
                不理解的地方:app固件如何生成,地址跳转前三个字节如何写入如何设置
    回复 送花

    使用道具 举报

    该用户从未签到

    563

    主题

    9826

    回帖

    1万

    积分

    管理员

    积分
    14359
    发表于 2023-9-12 22:06:54 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-9-13 08:31:30 | 显示全部楼层
    神农鼎 发表于 2023-9-12 22:06
    深圳国芯人工智能有限公司-在线升级 (stcai.com)

    这个例程我看了大佬,看不懂他的协议
    主要是协议没有公开,我现在用的是模块集成好的标准协议,跟你们做的那个软件协议不一样
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-9-13 11:04:34 | 显示全部楼层
    按照思路我进行了如下操作:
    首先:我的目的是在app1操作app2,在bootloader操作app1,因此我设置的用户EEPROM大小为64K
    第一步:编写bootloader程序,判断xdata最后一位0x1ffc是否为升级标志,是的话擦除1,拷贝2到1,擦除2,跳转1;
    第二步:编写app程序,设置程序起始地址 截图202309131100064463.jpg 设置中断向量 截图202309131100291862.jpg ,编译生成hex,将hex转为bin 截图202309131101135328.jpg ,通过软件,将bin文件进行拼接,将02 43 BD放置于0x1000地址,拼接完毕如下 截图202309131102033937.jpg
    第三步:将bootloader程序与app程序进行拼接 截图202309131102561353.jpg 截图202309131103078297.jpg ,拼接完成后下载程序

    运行结果:可以进入bootlader进行判断,然后进行跳转,跳转完之后,APP中的中断无法执行,修改验证,APP可以正常执行如下程序 截图202309131104194976.jpg


    请教各位大佬,怎么分析下原因
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-9-13 14:37:02 | 显示全部楼层
    研究了一天例程,尝试多种组合终于发现,官方例程最重要的地方没有说明
    使用官方的ispdemo,使用官方的升级软件,下载我自己的app程序,可以正常工作

    最关键的地方如下: 截图202309131434185926.jpg


    我将自己的bootloader添加中断向量表后,可以正常跳转并且正常进入中断
    正在测试app1写入app2后跳转copy,稍后反馈
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-9-13 14:46:19 | 显示全部楼层
    测试完成,功能正常,可以正常升级
    截图202309131446167138.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 21:17
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    10

    回帖

    62

    积分

    注册会员

    积分
    62
    发表于 2023-11-15 17:31:52 | 显示全部楼层
    楼主可以共享代码学习一下吗?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-18 11:04
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    0

    主题

    7

    回帖

    52

    积分

    注册会员

    积分
    52
    发表于 2024-4-1 11:28:18 | 显示全部楼层
    留个记号
    回复 送花

    使用道具 举报

  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2024-4-16 11:21:36 | 显示全部楼层
    总结一下
    1、boot里做搬运,地址是0,大小很小0x600
    2、做双区,app1和app2,大小为(64k-boot)/2
    3、app1运行升级程序,接收处理,将bin写到app2,校验成功之后重启进入boot搬运
    4、keil设置两个地方,一个是epromstart为boot大小+3,这个3为stc的跳转地址长度,固定的,还有就是epromsize是app大小;第二个地方就是interrupt vectors at address,这个地址为app起始地址,就是boot大小0x600,可以根据自己写的修改;
    5、剩余的就是处理app的bin,keil生成的中间一部分是空白,保留前面3个地址内容,删除中间ff,找到app1起始地址0x603那里,保存下来
    6、合并boot+app,将boot生成的bin与app处理完的bin合并起来就可以烧录了
    7、ota,wfi模块通过协议将app.bin发送,在app1里处理就行了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    昨天 14:10
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    8

    主题

    39

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2024-5-24 16:21:46 | 显示全部楼层
    我又回来了,由于功能增加,单片机容量已经用到40k,不足以放下ab区的双区OTA,故增加了外部flash来做备份和升级;
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-9 10:31 , Processed in 0.084694 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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