ldc521 发表于 2023-9-12 17:36:04

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

1.平台:STC8H8K64U

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

神农鼎 发表于 2023-9-12 22:06:54



深圳国芯人工智能有限公司-在线升级 (stcai.com)

ldc521 发表于 2023-9-13 08:31:30

神农鼎 发表于 2023-9-12 22:06
深圳国芯人工智能有限公司-在线升级 (stcai.com)

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

ldc521 发表于 2023-9-13 11:04:34

按照思路我进行了如下操作:
首先:我的目的是在app1操作app2,在bootloader操作app1,因此我设置的用户EEPROM大小为64K
第一步:编写bootloader程序,判断xdata最后一位0x1ffc是否为升级标志,是的话擦除1,拷贝2到1,擦除2,跳转1;
第二步:编写app程序,设置程序起始地址设置中断向量,编译生成hex,将hex转为bin,通过软件,将bin文件进行拼接,将02 43 BD放置于0x1000地址,拼接完毕如下;
第三步:将bootloader程序与app程序进行拼接,拼接完成后下载程序

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


请教各位大佬,怎么分析下原因

ldc521 发表于 2023-9-13 14:37:02

研究了一天例程,尝试多种组合终于发现,官方例程最重要的地方没有说明
使用官方的ispdemo,使用官方的升级软件,下载我自己的app程序,可以正常工作

最关键的地方如下:


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

ldc521 发表于 2023-9-13 14:46:19

测试完成,功能正常,可以正常升级

lichaoming 发表于 2023-11-15 17:31:52

楼主可以共享代码学习一下吗?

sevencai 发表于 2024-4-1 11:28:18

留个记号

ldc521 发表于 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里处理就行了

ldc521 发表于 2024-5-24 16:21:46

我又回来了,由于功能增加,单片机容量已经用到40k,不足以放下ab区的双区OTA,故增加了外部flash来做备份和升级;
页: [1] 2
查看完整版本: STC8H-OTA-WIFI模块标准XMODEM协议透传升级问题