目录
程序启动模式
在介绍OTA升级操作方法前,我们先介绍一下程序的启动模式,以及不同启动模式的优缺点。
多地址启动模式
优点:启动速度快;OTA 结束后⽆需再次搬运 image,校验正确后可以快速启动。
缺点:image 只能位于地址 0x0 或 0x40000,会造成 flash 空间分配的不连续性;另外 image 的⼤⼩ (如果⽀持 OTA 的话) 只能⼩于 208KB。
Bootloader 启动模式
优点:通常 bootloader 位于地址 0x0,image ⽂件可以灵活选择地址,便于⽤⼾⾃⾏定义地址空间。
缺点:启动速度较多地址启动模式慢;会额外增加 flash 消耗⽤以放置 bootloader 代码;另外在 OTA 时,需要增加搬运 image 的⼯作。
多地址启动模式 Flash 分布
Bootloader 启动模式Flash分布模式
以上是512k flash的分布图,下面我们根据这个分布,介绍OTA升级操作方法。
OTA升级
TLSR8 和 TLSR9 系列芯⽚⽀持 Flash 多地址启动:除了 Flash 地址 0x00000,还⽀持从 0x40000 读取固件运⾏。Telink Zigbee SDK 使⽤了该特性来实现 OTA 的功能。
从上可知,我们分配了两块固件区域 Firmware 和 OTA-Image,固件⼤⼩应不⼤于 208K。
假设当前正在运⾏ Firmware 的固件,当设备执⾏ OTA 升级时,新的固件数据将被存储到 OTA-Image,在 OTA结束并且验证通过后,将重启并运⾏ OTA-Image 的固件。后续 OTA,将交替执⾏。
OTA初始化
typedef enum{
OTA_TYPE_CLIENT,
OTA_TYPE_SERVER
}ota_type_e;
void ota_init( ota_type_e type, af_simple_descriptor_t *simpleDesc,
ota_preamble_t *otaPreamble, //current running fw info
ota_callBack_t *cb );
OTA 设备分为服务设备(Server)和终端设备(Client)。因此,在 OTA 初始化时需要注意 OTA 初始化的服务类型。
⼀般地,被升级设备为终端设备(Client),为被升级设备提供新固件的设备为服务设备(Server)。
OTA Server
OTA 服务端需要将被升级设备所需要的新固件写⼊ OTA-Image 区域供 OTA 使⽤。
例如:服务端⾃⼰运⾏的固件在 Firmware 区,那么可以将⽬标设备的 OTA image(包含 OTA Header 的新固件,参考 Zigbee Cluster Library Specification)暂存到 OTA-Image 区域。
当 OTA 服务端在调⽤ ota_init 函数后,会⾃动装载 OTA image 的信息。
OTA Client
设置 OTA 终端设备的 OTA 查询周期,单位:秒。
void ota_queryStart(u16 seconds);
OTA 终端设备在调⽤ ota_init 函数后,将会⾃动重载上⼀次的 OTA 进度信息,如果⼊⽹成功,将在设置的seconds 秒后开始 OTA 请求。
OTA升级固件生成
OTA Image 是⼀个包含 OTA Header 供 OTA Client 端实现空中升级的 zigbee ⽂件。⽤⼾可以使⽤ Telink 提供的 zigbee_ota_tool ⼯具,将 Client 端的固件加上头信息转换成升级⽂件。SDK 中要求待升级固件的⽂件版本必须⼤于当前的⽂件版本,否则,当 Client 端发起 OTA 查询时,Server 端将回复NO_IMAGE_AVAILABLE。
OTA Image ⽂件⽣成,以 sampleLight_8258 为例:
(1)将 sampleLight_8258.bin 拷⻉到“zigbee_ota_tool_v2.2.exe”所在⽂件夹;
(2)双击“zigbee_ota_tool_v2.2.exe”按提⽰操作;
(3)或使⽤命令⾏“./ zigbee_ota_tool_v2.2.exe [arg1] [arg2]”。
[arg1]:⽂件名,需要转译的⽂件名,输⼊参数如:sampleLight_8258.bin。
[arg2]:如果不存在该参数,代表不加密。如果存在,代表使⽤AES-128加密,输⼊参数如:
00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF。