AliOS Things全链路优化-CoAP FOTA

maoerya · · 1371 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

摘要: FOTA(Firmware Over-The-Air)即空中固件升级功能;CoAP(Constrained Application Protocol),字面意思为受限的应用协议,基于UDP,专为资源有限的物联网设备量身定制;所以AliOS Things的纯CoAP FOTA就是专为资源有限的物联网设备(如基于NB-IoT,LoRa)提供的远程固件升级功能。 FOTA(Firmware Over-The-Air)即空中固件升级功能;CoAP(Constrained Application Protocol),字面意思为受限的应用协议,基于UDP,专为资源有限的物联网设备量身定制;所以AliOS Things的纯CoAP FOTA就是专为资源有限的物联网设备(如基于NB-IoT,LoRa)提供的远程固件升级功能。 **1.AliOS Things1.1.2 FOTA简介** 我们先看一下当前版本(AliOS Thing1.1.2)的FOTA结构图: ![图片描述](http://img.blog.csdn.net/20171228152144648?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 简要介绍: 信息交互通道:指与特定的云平台交互更新信息如版本上报、查询,下载链接获取,进度上报等控制或通知类信息; 下载通道:通过1中获取的下载链接下载指定固件; FOTA service:fota主服务; 版本管理:维护升级前后的固件版本; Security:fota安全部分,包括通道安全(mbedtls),固件下载校验,flash写入校验等; Hal适配层:针对特定硬件的接口适配,主要指flash操作部分; 启动参数设置/固件更新:这里分两种情况,1.乒乓升级,直接将新固件写入与当前程序运行分区对等的另一个分区中,下载完成后设置启动参数让下次程序启动直接从FOTA下载分区启动,每次更新来回切换;2.下载完成后设置启动参数进入bootloader中,将下载好的固件从下载分区中复制到程序运行分区以完成固件升级。 2.CoAP块传输 CoAP协议格式: ![图片描述](http://img.blog.csdn.net/20171228152209539?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) RFC7959定义了CoAP协议的块输出规范,对于resource representation无法通过一个CoAP数据包承载时,发起块传输过程。块传输使用options字段进行控制。 ![图片描述](http://img.blog.csdn.net/20171228152237464?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![图片描述](http://img.blog.csdn.net/20171228152249207?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) CoAP块传输标准新增了4个Option(size1最早在RFC7252中定义,RFC7959扩展了其含义)。 块传输机制采用Block1和Size1完成Request中Resource Presentation的块传输;采用Block2和Size2完成Response中的Resource Presentation的块传输; FOTA CoAP下载由客户端像服务端请求资源,所以采用BLOCK2请求资源。 Block 格式: ![图片描述](http://img.blog.csdn.net/20171228152409495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) Option Value为变长0-3个字节的无符号数。 NUM:具有给定大小的块序列内的块(NUM)的相对数(从0开始编号),即块序号 M:是否有更多块 SZX:块大小,取值0-6,实际每个块的payload为2^ (4+SZX),即块大小为16-1024Byte Block2出现在Response中,Option value取值含义: NUM:表示当前Message的Payload在整个body中的编号 M:表示是否还有更多块才能完成整个body的传输 SZX:当M为1时,表示当前Message的Payload的大小(2**(SZX+4));当M为0时,实际Payload为1到2**(SZX+4)Byte; Block2出现在Request中,属于控制性用法: NUM:期望Response传输的块号 M:无意义,设置为0 SZX:当NUM为0时,表示希望采用的块大小;当NUM非0时,直接采用上一个接收到的Response中的块大小 3.纯CoAP FOTA 通过上节我们对CoAP块传输有了比较详细的了解,CoAP FOTA正是借助了CoAP块传输功能实现完整固件的下载。如第一节FOTA框架图,当交互通道与下载通道都走CoAP协议时,即为纯CoAP FOTA,仅仅依赖UDP协议,无需资源消耗较大的TCP协议支持,甚至连TCP/IP协议栈都不用实现,从而减少code size,ram等资源占用,更重要的是CoAP对网络带宽/网络稳定性要求要求都很低,说到此,可能很多人都想到了NB-IoT,LoRa环境,没错,我们针对这种低功耗低性能场景有备而来。CoAP FOTA流程如下: ![图片描述](http://img.blog.csdn.net/20171228152428634?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 4.上板测验: 至此,我们对CoAP FOTA应该有了较深的理解,如果想实战试一把,请移步 AliOS Things github,下载代码搭建环境亲自体验一把,我们配有较丰富并持续丰富中的指导文档,请参考https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-FOTA-Porting-Guide 功能验证章节。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1371 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传