为了帮助开发人员提升无线技术应用能力,
Silicon Labs (亦称“芯科科技”
) 近期制作了一系列无线
OTA升级的实操演示视频,本则内容主要介绍
Proprietary SoC模式的
OTA升级实现方法,欢迎参阅下方摘要说明,并点击视频链接观看详细的操作流程:
Silicon Labs的
SDK内建的示例代码
Sensor可以作为
OTA的客户端,
Sink作为
OTA的服务器端。通过添加功能代码客户端实现通过按键触发自动加入网络,并发起
OTA升级请求。服务器端实现自动建网,允许加网以及发送
OTA升级文件给客户端的功能。硬件上采用
2块功能齐全,支持
Bluetooth和
Proprietary协议并拥有
J-Link调试器的
Thunderboard BG22。它们价格亲民,非常适合爱好者做开发使用。
首先我们需要把两块Thunderboard通过USB线连接到电脑,运行Simplicity Studio 5开发环境。本次的教学主要分为三个步骤:
-
-
Proprietary OTA
服务器端的实现方法
-
在
IDE的左上可以看到两块
Thunderboard列表,选中其中一块,点击右侧的建立新工程按钮。在弹出的视图左侧勾选
Proprietary,然后在右侧列表中找到
SoC Sensor示例代码,按
Next按键,再按
Finish按键
Sensor工程就被生成。
接著点开
Sensor工程,双击
Sensor.Slcp打开工程配置文件,然后点击
Software Components标签。在搜索栏键入:
“bootloader”安装
OTA相关的几个器件,然后切换回
Overview标签。点击
Force Generation产生
OTA相关的代码,打开
app_process.c文件,其中
sl_button_on_change函数在按键时会被调用添加一个自定义的函数调用
halButtonlsr函数。
打开
app_callback.c添加一个按键的事件,并为这个事件分配处理函数。然后再添加
halButtonlsr函数在有按键时激活事件处理函数。接着添加按键事件处理函数进入函数,首先禁止事件活跃避免冲突,然后对
Bootloader接口初始化,并删除用来存放
OTA升级文件的存储区。接着查看网络状态如不在网则执行加网动作等待
2秒再返回处理函数。
如果已经入网则向服务器发送
OTA升级请求,这里
OxA5是自定义的
OTA 升级命令。然后还有加网函数,主要是配置好参数调用加网
API 即可。然后点击菜单上的小锤子按钮来编译整个工程,耐心等待编译完成可以看到左侧文件列表中多了一个
debug的目录。打开目录可以看到生成的
Sensor.s37hex和
bin文件。之后还需要一个
OTA升级的
GBL文件,点击
connect_creategbl_image_bat就会生成
sensor_gbl文件在
debug目录下。至此
ProprietaryOTA Client的部分完成。
Proprietary OTA
服务器端的实现方法
当开始生成
sinkserver 的工程时,返回
IDE主界面,选择另一块
Thunderboard点击右侧的建立新工程的按钮。勾选
Proprietary然后找到
SoCSink 示例代码。按
Next 按键再按
Finish按键生成
Sink 工程。点开
Sink 工程并双击
sink.slcp打开工程配置文件,然后点击
Software Component 标签在搜索栏中键入
“bootloader”,安装
OTA相关的几个器件,然后切换回
Overview标签。
点击
Force Generation 产生
OTA相关的代码。打开
app_callback.c添加一个
Commission的事件,并为这个事件分配处理函数并在函数运行一秒后激活事件处理函数来处理
OTA 升级需求。之后关于
Commission事件处理函数,首先禁止事件活跃避免冲突,然后对
Bootloader的接口进行初始化,检验存储区里的
OTA升级文件是否有效,接着建立网络并开放网络。建网函数主要配置好参数,调用内部的
API。开发网络打开一个
240秒的窗口,允许
Sensor客户端加入网络。然后在
incomingmessage callback函数里面添加对客户端发起的
OTA升级请求的处理。在收到请求后读取存储区的升级
GBL文件并向客户端发送。
这个解析的函数是为了获取其大小传递参数给
API来发送
OTA 的
GBL文件。在
GBL 文件传送到客户端完成后服务器端需要发送一个重启命令给客户端。客户端重新进入
Bootloader的模式
, 把接收到的文件更新到应用程序区。
完成
OTA升级这里需要修改一个
SDK内部文件
sl_connect_ota_unicast_bootloader_test.c。添加一个自定义的函数调用
otaUnicastStartDistribution。这个函数负责向客户端发送重启命令,点击菜单上的小锤子开始编译
Sink 工程,耐心等待编译完成后可以看到
Debug目录下生成了
Sink.s37hink和
bin文件。至此
ProprietaryOTA Server的部分已经完成。
把编译好的
sensorsink OTA GBL和
Bootloader分别烧录到
Thunderboard上。这里为了方便在不同协议中调试
OTA 功能,采用了
JSON来配置
,并且通过
Python解析
JSON文件烧录相应的
image到不同的板子上。上电后服务器端建网并开发网络,按客户端的按钮,客户端加入网络,发起
OTA升级请求。服务器端传送
OTAGBL 文件给客户端。传送完成后客户端重启并更新应用程序完成整个
OTA升级过程。
您也可以扫描以下二维码,关注
Silicon Labs社交媒体平台