当前位置:首页 > 每日看点 > 正文内容

有做过嵌入式ota升级的大佬嘛?

卡卷网12个月前 (01-09)每日看点185

我曾经一个经理,被老板骂到狗血淋头的场景,还历历在目。

原因是,产品大批量出货了,发现了一个偶发性的UG。

这意味着,所有出去的产品,都得退回来,重新烧录程序。

估计当时经理在想,如果这个产品支持OTA升级就好了。

OTA升级是一种无线远程固件升级技术,作用就是为了修改程序的ug,或者升级程序功能,像更新,还有就是我们现在很多车,也支持OTA固件升级。

以前我们做单片机开发时,压力特别大,产品一定要在大批量上市前,进行,保证出去以后不能有问题。

毕竟不能像电脑或者上的软件那样,功能有UG,直接远程升级就好了。

以前单片机类的产品,大多数都不支持OTA升级,程序出现问题,就得让客户退回来改。

后面随着物联网技术的发展,让传硬件能够接入互联网,OTA升级才开始流行。

我第一次接触OTA升级,感觉很高大上,很复杂的样子,如果你去网上看理论知识,确实如此。

但是如果你有一个项目去实际应用一下,并没想象这么复杂。

下面以我们无际项目特训营的项目6来举例,如何一步步实现OTA升级?

OTA升级,说简单点,就是对我们单片机Flash里面的程序进行更新,就和我们用烧录工具去更新程序一样,只是烧录方式,变成了我们先把程序(in文件)先上传到,然后由给每个设备下发程序更新指令和数据。

<>一、固件升级的2种方式

<>1.方式1

这个方式将单片机的FLash分成了3块,分别是ootLoader、程序块A、程序块。

ootLoader是引导程序,假设FLASH-A是应用程序(程序块A),FLASH-是备份程序区(程序块)。

单片机上电后,先进入启动程序ootLoader,然后根据ootLoader程序逻辑,再跳转到程序块A或者。

程序块A和程序块都是有效的程序,但同一时间,只能运行其中的一个,另外一块作为备份块。

假如当前程序运行的是A部分的代码,那我们固件升级的时候,就升级程序块部分的代码,如果程序升级OK,则由ootLoader程序,指向程序块区的起始位置,下次程序重启,则执行程序块。

这种方式,需要单片机Flash的容量空间足够大,应用的程序代码不能超过Flash容量的50%,因为要存储3个程序。

<>2.方式2

这种方式Flash空间由2部分组成,分别是ootLoader和FlASH(程序区),但需要Flash芯片,用来保存新下载的程序。

有固件升级的时候,先把升级的固件下载保存到的Flash中。

下载的程序验证OK后,由ootLoader将外部Flash中的固件更新到程序区,更新完跳转执行。

<>二、和MCU的通讯机制

固件升级的和单片机的通讯机制很重要,如果通讯机制设计的不够合理,会影响通讯的稳定性,我们之前也踩过很多坑。

通讯机制这块的设计,我大概分为<>通讯流程和<>协议设计两部分,两者是相辅相成的,协议设计越好,通讯流程就越简单。

早期,我对接过一些第三方云平台,有些平台,我怀疑是干ja设计的通讯流程和协议,在协议设计上经验不足,如果通讯流程和协议设计不好,明明可以用一条指令搞定,最后要2,3条指令,增加通讯双方的程序难度,稳定性也会受影响。

1.<>通讯流程:

首先,把要更新的固件上传到我们云平台,版本号要原来的高。

另外固件一般是in格式文件。

<>如何生产in文件?

要生产in文件,需要在Keil按照下图配置:

fromelf.exe--in-o"$L@L.in""#L"

下图是我们项目6硬件端获取固件的流程图。

单片机定时查询的固件状态,看是否有新的固件需要更新。

有新的固件,需要先获取固件的版本,判断是否主机当前的版本号高,如果是,则更新固件。

同时,还会获取最新固件的大小(字节的个数),数据包的个数,固件的校验值等。

主机按照数据包的ID,向获取固件,每获取一包数据就立即校验数据,校验通过,再获取下一包的数据。

所有固件都下载完成后,需要对下载固件进行整体校验,校验通过,则说明下载的固件有效。

重启设备,程序自动跳转到启动程序,更新程序区部分的固件,固件升级成功。

大致通讯流程设计好以后,我们还要设计一个通讯协议:

<>三、单片机程序设计

我们单片机这边,要写两个程序,一个是ootLoader程序,一个是产品应用程序(APP...)。

<>1.ootLoader程序

设备每次上电前,会先执行ootLoader程序,该程序会判断产品应用程序,是否需要更新,更新完后,重新跳转到新的产品应用程序执行,下面是跳转代码。

<>2.产品应用程序

主要是产品的功能。

<>四、全量升级和差分升级。

全量升级就是每次都更新整个固件,差分升级就是更新时,会和老版本固件进行数据对,修改的部分,才会升级。

很明显,差分升级效率会高很多,特别适合那种固件大的,如汽车上的固件,上的固件,但是实现起来也相对复杂一些。

文章篇幅有限,视频都要讲10几节课。

OTA升级,如果光看理论,会感觉较复杂,其实跟着做一个项目,会发现很多理论都是纸老虎。

<>下面是更多无际原创的<>个人成长经历、行业经验、技术干货。

无际单片机:单片机入门到高级开挂学习路径(附教程+工具)电子工程师的能力有多可怕?为什么我学了几天STM32感觉一脸茫然?谁能教教我怎么学单片机,先学什么,怎么入门?Stm32学了好久了,感觉做项目还是有力不从心的感觉?无际单片机:单片机怎么实现模块化编程?思维+实例+教程(实用程度令人发指)无际单片机:c语言回调函数的使用及实际作用详解无际单片机:手把手教你c语言队列实现代码,通俗易懂超详细!无际单片机:新手学习单片机最常见的六大误区,你进坑了吗?

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/7532.html

分享给朋友:

相关文章

现在做抖音的话,还有机会嘛?

现在做抖音的话,还有机会嘛?

之前我问过小杨哥一个问题:“现在抖音还好做吗?”疯狂小杨哥在抖音已经突破1亿粉丝,直播间10w的在线观看人数,日常带货随便一场也是上7位数的数据。现在抖音的市场好像已经被头部占领,资源靠前,普通人似乎已经没有机会了?下面是小杨哥对于做抖音的...

为什么扫码支付在中国流行,在发达国家被排斥?

因为这是一种落后的技术。卖菜的大爷花5毛钱就可以打印出一张二维码来接受付款。你觉着这种先进么?跟先进完全不沾边的。正是因为不先进,所以才能流行。卖菜大爷用不起一台先进的、具有NFC感应功能的、还能刷各种银行卡的收款机。这就是现实。发达国家,...

天涯神帖,第一神帖是什么?

天涯神帖,第一神帖是什么?

一些个人觉得比较经典的天涯神贴(更新进去了):话说1999年那会儿,中国的互联网还是个小婴儿,BAT三巨头都还在穿开裆裤呢,天涯社区就已经悄然诞生了。时光飞逝,到了2007年,这小小社区竟然已经吸引了超过2000万的注册用户,不得不说是个小...

作为一名网络工程师,每天日常工作是什么样的?

作为一名网络工程师,每天日常工作是什么样的?

先介绍下我的基本情况,本人女,不知名的网络工程师一枚,入行也有三四年了。虽然我只在代理商和集成商干过,但怎么也算是“业内人士”一枚,没吃过猪肉总见过猪跑嘛。今天,就以我经历过,或者了解过的网络工程师,来给大家介绍一下到底每天的工作日常是什么...

我怎么也无法理解网络游戏为什么会有外挂?

我怎么也无法理解网络游戏为什么会有外挂?

因为你把服务器想象成了无所不能的上帝;但在我们程序猿眼里,服务器不过是一个黑大傻粗的计算器。比如说,我们在某个位置打开一个宝箱:那么,你觉得,程序背后应该做了些什么呢?一、天真的玩法天真的程序猿会觉得,啊,这事简单!我就告诉服务器,用户ID...

如何建一个安全的个人nas?

如何建一个安全的个人nas?

群晖被入侵了晚上一进群晖,好家伙,这么多IP想用admin登录我的群晖。我群晖是直接连在互联网上的,虽然我的密码是强密码,大小写字母加数字还有特殊字符,想要攻破有点儿难,但天天看着这些警告也是挺烦人的,而且说不定群晖里面安装的软件一多,可能...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。