STM32+Cubemx+腾讯云OTA(二)APP②

继续上章,具体程序处理:

 一、发送部分

发送部分就是到一定的时间发送指令,其他没什么。我这里多了一个TCOTASET_wait阶段,是由于我程序是在订阅后设置版本号,此时有一个等待时间,判断是否会立即有升级任务。

二、接收部分

接收部分是最关键的地方,一般失败的话,问题都是出在这里

1、串口调试

按照我的思路的话,我会先用usb转ttl,连上4G模块的串口,豪横点的话就用2个USB转TTL,一个接tx,一个是接rx,然后尽可能的把整个流程先走一次,把信息保存txt,接收部分就对着txt的文档做处理,这样是最快的,而且出的问题也会比较少。

(因为这个腾讯云固件做ota我已经不是第一次搞,所以一开始用电脑给4G模块发送指令的报文已经找不到了,下边是我程序直接跑的时候截的报文,所以就不一条一条写,直接分开TX,RX这2部分来写了)

1、发送脚:

这里看到是按上边发送的步骤的,红色框前边的是先登录腾讯云平台,然后就是:

设置版本号(同时使能OTA)→询问ota是否使能→读取固件信息→读取固件

因为格式问题,显示会有一点乱码,这个没所谓。

2、接收脚:

使能和询问的回帧:

我程序的处理使能之后都会先询问有没有使能成功。这里有一个特殊的地方,就是esp8266经常会回复这个错误,不知道是不是询问得过快过频繁,但是我相对于其他模块感觉已经算很慢了。这个图里边,倒是没有影响程序的判断,但是在其他时候,会穿插在一个回复帧当中,就会影响。所以我做了一个处理:

直接就把他去掉了,这也是一个先串口调试看报文的好处把,能把这些问题先提前出来了。

询问固件信息回帧:

的回帧,这里包括了版本号,大小,md5的验证码

读取固件回帧:

这里我只截第一帧和最后一帧:

如果固件大小刚好是1024的倍数,那读完最后一帧后再读,会返回错误,不是1024的倍数,最后一帧会返回实际长度,所以是用这个长度来判断是否为最后一帧。

2、程序编写

1、接收4G模块下载固件信息:

4G模块接收到升级固件的命令时,会在串口发送正在更新的指令,下载完后会发送更新已完成。

2、处理固件信息。

这里就是对照上边串口打印出来的逐个处理,先是版本号,然后就是大小,md5校验码。

再计算了一下读取固件次数需要多少次,最后可以跟实际读取次数对比。我这里OTA_LEN是1024

还处理一下了207这个错误,我查了一下文档是Flash access error,遇到这个错误就重读就是了。

3、读取固件包

这里是读取最后一包后,返回error,然后md5直接校验。md5校验在网上找找就有

这里是正常读取,这里74和1是我仿真直接看的,并不是一个一个数的哈~这样比较快

4、跳转

一直判断这个标志位,然后重启。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Try1harder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值