实操演示-Proprietary产品的OTA升级实现方法
最新更新时间:2021-09-02 06:46
阅读数:
为了帮助开发人员提升无线技术应用能力,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客户端的实现方法
- Proprietary OTA服务器端的实现方法
- Proprietary OTA升级的实际过程
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的部分已经完成。
Proprietary OTA 升级的实际过程
把编译好的sensorsink OTA GBL和Bootloader分别烧录到Thunderboard上。这里为了方便在不同协议中调试OTA 功能,采用了JSON来配置,并且通过Python解析JSON文件烧录相应的image到不同的板子上。上电后服务器端建网并开发网络,按客户端的按钮,客户端加入网络,发起OTA升级请求。服务器端传送OTAGBL 文件给客户端。传送完成后客户端重启并更新应用程序完成整个OTA升级过程。
您也可以扫描以下二维码,关注Silicon Labs社交媒体平台
推荐帖子