广联达筑联:工业级物联网云平台 广联达筑联:工业级物联网云平台
首页
开发侧文档
用户侧文档
首页
开发侧文档
用户侧文档
  • 平台介绍

  • 物联网平台

  • 边缘计算平台

  • 应用硬件开发平台

    • 固件开发流程
    • 使用模组开发

      • 硬件接口
      • AT指令
      • 设备OTA
        • 升级概述
        • 升级流程
          • 固件上传
          • 固件下载
          • Ymodem传输
        • 升级模拟
      • 量产相关
    • 使用SDK开发

  • API文档

  • 开发侧文档
  • 应用硬件开发平台
  • 使用模组开发
2021-11-29

设备OTA

根据用户的实际需求,在兼容已上线产品功能的前提下,广联达WIFI模组提供用户设备固件更新功能,使用AT命令并借助Ymodem协议传输用户设备固件,实现硬件产品固件更新的功能,固件大小最大支持800KB,Ymodem升级速度大约10KB/s,开发者可以参考提供的demo程序。

# 升级概述

筑联平台下发升级指令后,模组自动将用户设备固件首先预下载至模组的固件存储区,当用户设备固件下载完成时,模组通过AT发送URC通知用户设备最新版本(+SOFTVERSION:"2.2.1"\r\n),此时用户设备可以选择:

  1. 静默升级:当接到最新的固件更新通知时,用户设备判断版本号可以升级时,立即发送AT+YMODEM进入Ymodem模式进行升级;

  2. 选择升级:接到最新的固件更新通知时可以忽略消息,通过屏幕、按键、重启后等主动发送AT+SOFTVERSION?查询最新版本,判断满足条件时,发送AT+YMODEM进入Ymodem模式进行升级。

模组收到AT+YMODEM命令后,会停止AT命令并延时约3s后清空串口数据,进入Ymodem升级模式,在此期间,用户设备应跳转到Ymodem升级模式,此时用户设备可以选择:

  1. 在线IAP:通过Bootloader在线IAP更新小容量flash产品固件,此时,用户设备应重启进入Bootloader在Bootloader中进入Ymodem升级模式,通过Ymodem协议将接收到的固件直接写入到app分区;

  2. 直接下载:用户设备同步进入Ymodem升级模式,通过Ymodem协议将接收到的固件写入至download分区,适用于大容量flash产品更新,用户设备可以创建多个分区,一般包含app、download、factory分区,下载完成校验后,在上电重启时,通过BootLoader判断版本确认,将download分区固件搬运至app分区,然后跳转到app分区完成重启;当系统中的固件损坏时,Bootloader 也可以将出厂factory 分区里固件搬运到 app 分区,完成系统恢复。

模组Ymodem启动后会等待用户设备发送‘C’,若60s内没有收到‘C’则退出Ymodem模式,重新进入AT命令;否则开始通过Ymodem发送固件,传输完成后退出Ymodem进入AT命令。

模组在传输固件过程中,传输的数据超时没有收到响应(超时时间为1s),重试10次仍然无法传输,则退出Ymodem模式,重新进入AT指令模式。

注意事项:

  1. 为避免设备在固件自动OTA 更新时变砖,用户设备须支持固件双备份或将用户设备升级代码放在Bootloader中;若设备在静默更新时异常掉电,开发者需确保设备在重启后,可重新更新产品的固件;

  2. 通过Ymodem方式升级,数据块大小为1024Byte,CRC16校验;

  3. Ymodem的起始帧的数据块大小为128字节,传输的是文件名、文件大小、文件修改 日期等信息,其中文件名和文件大小信息是必须的。128字节的剩余部分用空字符0x00填充;

  4. 一般会使用1024字节的数据块进行传输,这样可以加快传输速度,如果最后文件数据不足1024字节,则将其拆分为128字节的数据块进行传输,如果拆分后有不足128字节的数据依然按照128字节的数据块进行传输,但是剩余空间全部用0x1A填充,以表示文件结束;

  5. 当文件传输结束时,除了发送EOT传输结束指令外,还需要发送一个结束帧。Ymodem的结束帧与起始帧的数据格式相同,数据块大小为128字节,但是结束帧的数据块要全用空字符0x00填充。

# 升级流程

用户设备固件经过开发测试后,上传到筑联平台对应的模型版本管理库,版本管理不做迭代校验,上传固件时,平台会自动生成SHA256校验值存储,不同项目、不同区域需要更新不同版本时,可以在相应的更新策略中选择,平台会自动根据下载策略发送更新指令和URL到对应的WIFI模组,WIFI模组通过加密链接到筑联平台下载对应的固件本到WIFI模组用户固件存储区,下载完成固件通过校验后,上报下载成功到平台,同时WIFI模组通过AT指令发送最新版本通知用户设备。

# 固件上传

进入项目开发者中心->物联网平台->运维监控:

img

在用户名下点击新建、上传固件,输入固件相关信息,保存: img

img

在升级包管理中可以看到新建的固件: img

# 固件下载

在升级管理中可以看到固件详情,需要升级时,需在批次升级中新建批次升级,输入待升级版本号、升级范围,可以选择全量和指定设备的定向升级,如果选择定向升级在设备范围内输入设备ID,升级策略按需选择,最后点击保存,此时平台会按照设定的升级策略向对应的模组发送升级链接,模组收到后会从指定的链接拉取指定的升级固件保存到用户设备固件存储区。 img

在升级过程中可以在 批次列表>设备列表 看到升级进程: img

下载完成后,模组向用户设备发送已下载固件的版本信息

+SOFTVERSION:"2.2.1"\r\n

​

平台OTA交互流程如下图: img

# Ymodem传输

Xmodem和Ymodem 是串口通信中广泛用到的异步文件传输协议。协议包括了文件的识别、传送的起止时间、错误的判断与纠正等内容。

Xmodem 协议最早是以 128 字节块的形式传输数据,并且每个块都使用校验和进行错误检测。后面衍生出使用循环冗余校验方式 (CRC16) 和支持 1024 字节块的传输协议 (Xmodem-1k)。

Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。平常所说的Ymodem协议是指的Ymodem-1K,它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收,基于上述我们采用Ymodem协议进行固件升级。

Ymodem协议控制字符:

定义 取值 作用
SOH 0x01 128字节头标志
STX 0x02 1024字节头标志
EOT 0x04 发送结束标注
ACK 0x06 应答标志
NAK 0x15 非应答标志
CAN 0x18 取消发送标志
CRC16 0x43 使用CRC16标志 ‘C’

Ymodem数据帧如下:

起始数据帧结构:SOH | 00 | FF | filename | filezise | NUL | CRCH | CRCL

起始数据帧结构解析:

  1. 其中SOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);

  2. 00表示数据帧序号,初始是0,依次向下排;

  3. FF是帧序号的取反;

  4. filename是要传输的文件名,如USTB_V3_1.0.1.26_NMEA.Bin,它在数据帧中的格式为:55 53 54 42 5F 56 33 5F 31 2E 30 2E 31 2E 32 36 5F 4E 4D 45 41 2E 42 69 6E 00,也就是把ASCII码转成十六进制,但是最后一定要在文件名后加上00,表示文件名的结束;

  5. filesize表示文件的大小,如上面的USTB_V3_1.0.1.26_NMEA.Bin大小是132KB,也就是135168Byte,转换成十六进制就是0x21000,它在数据帧中的格式就是32 31 30 30 30 00,也就是ASCII的“21000”,同样最后要加上00表示结束;

  6. NUL就是数据部分的128字节中除去文件名和文件大小占据的剩下的字节都用00填充;

  7. CRCH和CRCL分别表示16位CRC校验码的高8位与低8位。

数据帧结构: STX | 01 | FE | data[1024] | CRCH | CRCL

数据帧结构解析:

  1. 其中STX=0x02,表示这帧数据帧后面包含着1024字节的数据部分;

  2. 01是表示帧序号,FE是它的取反,再下一帧数据就是02 FD,以此类推;

  3. data[1024]表示存放着1024字节的文件数据;

  4. CRCH与CRCL是CRC16检验码的高8位与低8位;

  5. 如果文件数据的最后剩余的数据小于1024剩余空间全部用0x1A填充,如下结构:STX | 01 | FE | data[n] | 1A 1A……… CRCH | CRCL;

结束帧结构: SOH | 00 | FF | NUL | [128] | CRCH | CRCL

结束帧结构解析:

  1. 结束帧同样以SOH=0x01开头,表示后面跟着128字节大小的数据;

  2. 结束帧的帧序也认为是00 FF;结束帧的128字节的数据部分不存放任何信息,即全部用00填充。

Ymodem传输流程如下表: img

以 mcu_update.bin文件为例,大小170412bytes,通过USB转串口接模组的数据串口,打开串口监控精灵,SecureCRT模拟用户设备发送升级指令,在Transfer中选择Ymodem接收文件,通过串口监控可以查看完整的数据传输过程。 img
img
img

流程图如下:
viso-1454687

# 升级模拟

为了提高开发者固件OTA的稳定性,平台为开发者提供了固件OTA 测试工具,方便开发者在升级固件时,执行压力测试和遍历测试。

  1. 向模组发送AT+YMODEM命令后,模组回应OK延时约4S后会发送’C’,等待响应: img

  2. 切换到secureCRT或者Xshell打开对应串口后会接着收到‘C’响应,功能里选择Ymodem接收文件: img

  3. 文件开始进行传输: img

  4. 接收完成: img

上次更新: 2021-12-02 10:08:12

← AT指令 量产相关→

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式