TCP设备升级

​ 本节主要描述TCP类型设备OTA升级相关指令的协议帧格式,以及这些指令需要注意的事项。

指令交互的整体流程: TCP设备OTA升级指令交互流程

固件下载的详细流程见固件下载流程

定期上报固件版本号

​ 智能设备需定期上报固件版本号(如48小时一次),除此之外,在首次上电运行并成功请求入网后,以及平台下发固件版本号查询指令时,必须上报一次固件版本号。

此上报的Command为8

平台对此上报的回复的Command也为8

注意事项

在上报固件版本号的过程中,可能会由于网络原因没有上报到平台或者平台的响应没有到达设备端;此情况下,智能设备应该重新上报,至少尝试重发1次,建议重发2~3次,重发的时间间隔由设备根据自己的实际情况决定。

上报版本号后,检查当前是否有未完成的OTA升级任务,如果有的话将收到版本与之前版本比对,如果相同则上报升级成功消息到应用服务器,如果不同,则上报升级失败消息到应用服务器。

固件版本号查询指令

​ 平台会主动向设备下发此指令以查询设备的固件版本,设备收到后需要上报一包固件版本号

此指令的Command为13

设备对此指令的回复的Command为8

OTA升级指令

​ 平台创建升级任务后,会给设备下发OTA升级指令,设备收到后,需要在第一时间向平台回复确认数据帧,然后再按照指定的流程下载固件

此指令的Command为9

设备对此指令的回复的Command也为9

特别注意: 在成功向平台回复确认数据帧后,智能设备需要将自己实际的固件版本号与平台推送的固件版本号进行对比(ASCII字符串对比),如果一样则不需要对目标固件进行下载更新,不一样则需要下载并更新。

固件下载流程

设备在回复完平台升级指令后,需根据升级方式采取不同的固件下载流程。

两种升级方式,设备仅需根据自身升级方式选择其中一种实现即可

TCP方式下载固件的流程

TCP方式下载固件流程

智能设备收到平台的固件更新推送,在将目标固件版本号与本地固件版本号对比确认需要更新目标版本的固件后,则设备可以断开与IoT平台的TCP连接,并向平台推送的TCP固件升级服务器的地址(Host和Port)发起TCP连接,进行新固件的下载。

特别重要的提示:智能设备在与TCP固件升级服务器成功建立TCP Socket链接后,必须先按照智能设备请求入网的指令请求入网。只有在成功入网之后,才能进入固件文件的下载流程;否则升级服务器将不处理智能设备下载固件的请求。

另外: 如果在下载固件的过程中发生断线重连情况,重连后智能设备需要按照智能设备请求入网的指令再次重新向升级服务器请求。成功入网后才能继续下载固件文件。

智能设备每下载一片固件数据后,都必须要校验所下载的数据的MD5值是否正确;只有本次下载的数据MD5校验正确后,再请求下一片固件数据。如果服务器返回的固件数据片长度小于设备请求的长度,并且智能设备计算所下载的固件数据总大小与查询更新时服务器返回的固件文件总大小相等,则设备可以认为固件文件下载完毕。

HTTP方式下载固件的流程

以Http方式下载固件比较简单,无需入网认证

Http方式下载固件流程

智能设备收到平台的固件更新推送,在将目标固件版本号与本地固件版本号对比确认需要更新目标版本的固件后,则设备可以断开与IoT平台的TCP连接,并使用平台推送的HTTP下载链接进行固件下载。

智能设备需要将平台推送的下载链接Url与DownID进行拼接(ASCII字符串拼接)处理后再使用HTTP GET方式打开。拼接规则如下说明:

拼接规则:Url +“/”+ DownID(先将DownID转成ASCII字符串)

例如:

返回的Url为:http://ota.iot.senthink.com/02022117

DownID为(Hex):33367341 à ASCII字符串格式:36sA

则拼接后的结果为:http://ota.iot.senthink.com/02022117/36sA

设备请求固件文件,应该使用HTTP GET方式直接打开拼接后的链接:

http://ota.iot.senthink.com/02022117/36sA

特别注意:HTTP下载固件的链接具有时效性,服务器设定该HTTP下载链接在24小时内有效。智能设备超过24小时未请求该链接则该链接会失效,失效后将无法使用该链接进行固件文件的下载。

注意事项

智能设备使用TCP断点续传的方式下载固件过程中,需要注意以下事项:

  1. 下载请求数据帧中,必须始终携带平台返回的下载ID(DownID),直到本次下载结束为止;若携带的DownID不是平台返回的值,平台将无法处理下载请求;

  2. 智能设备每次发送固件下载请求后,应该等待15~20秒。如果在等待超时后,仍然没有收到TCP升级服务器的响应数据,则尝试重新请求该片固件数据。设备等待超时时间不要设置太短,否则遇到网络延迟比较大的情况,会在短时间内重复发起对某片固件数据的请求,这样会浪费很大的流量;

  3. 设备每次请求固件数据都会指定Start和End,设备每次请求固件数据都应该比较服务器返回的Start和End与请求的Start和End是否一致。可能会发生以下几种情况:

    3.1 服务器返回的Start和End与设备请求的Start和End一致,可以继续处理;

    3.2 服务器返回的Start与请求的Start不一致,丢掉该片数据并继续读取Socket数据;

    3.3 服务器返回的Start与请求的Start一致,但是End不一致。这种情况可能是固件下载完毕,设备应该进一步校验MD5以及固件总大小是否与下载的总大小一致。

  4. 如果设备在下载过程中网络很差,导致下载完毕的固件数据不对。则设备可以根据情况决定是否再进行一次下载尝试,或者直接放弃并上报升级结果给平台。

固件文件下载完毕后(无论哪种方式),必须校验MD5值。方式:智能设备计算所下载固件文件的MD5值,并将自己计算的MD5值与OTA升级指令数据帧HeaderOpts域中的MD5值进行对比,相同才可认为新固件被完整地下载,可以对所下载的固件进行更新应用,否则认为固件下载失败。

OTA升级完毕(设备下载完固件文件)后,需要主动断开与TCP升级服务器或者HTTP升级服务器的连接,然后应用新固件。新固件应用完毕则重新与IoT平台建立TCP连接,进入正常的应用数据交互流程。

终止OTA升级指令

只有以TCP方式下载固件时才能终止OTA升级指令,如果设备只通过Http方式下载则无需处理此指令

​ 如果某个正在被下载的固件的内容或版本信息有变更,或者是用户在AEP平台手动取消升级任务后,升级服务器会下发终止OTA升级指令,正在下载该固件的设备在收到指令后,无需回复,立即终止本次下载并删除已经下载的固件数据。完成上述操作后,智能设备需要断开与OTA升级服务器的连接,重新向设备平台请求入网并上报一包固件版本号

此指令的Command为11

results matching ""

    No results matching ""