手把手教你使用NXP KW38 – OTAP功能

一、前言

        如今,设备的软件和固件更新变得越来越频繁和重要。传统的更新方式通常需要物理连接设备,既费时又费力。空中编程 ( Over The Air Programming, OTAP ) 是 NXP 提供的一种定制蓝牙低功耗 ( Bluetooth LE ) 服务,它无需在待升级设备(OTAP 客户端)和包含新软件的设备(OTAP 服务器)之间使用电缆。最佳的利用 OTAP 服务的方法是将其集成到蓝牙 LE 应用程序中,这样可以根据需要多次重新编程设备。

        恩智浦的 KW38 系列无线 MCU 集成了低功耗蓝牙版本 5.0,带有 CAN FD 和 LIN 总线选件,基于 Arm® Cortex®-M0+内核,本文将已 FRDM-KW38 开发板为硬件基础介绍通过 OTAP,通过 OTAP 服务在 FRDM-KW38 开发板中加载新的软件镜像。

二、理论基础

        简述一下 OTAP 服务的工作原理:OTAP 应用程序由两个独立部分组成:OTAP 引导程序和 OTAP 客户端。OTAP 引导程序负责验证 OTAP 客户端中是否有新的镜像可用于重新编程设备。而 OTAP 客户端软件则提供了蓝牙低功耗 ( Bluetooth LE ) 定制服务,用于使 OTAP 客户端设备(需要重新编程的设备)与 OTAP 服务器设备(包含用于重新编程 OTAP 客户端设备的镜像的设备)进行通信。因此,为了第一次准备软件,OTAP 客户端设备需要进行两次编程,首先是编程 OTAP 引导程序,然后是编程 OTAP 客户端软件。

       一般情况下,512KB 的 KW38 闪存被分为两个部分:一个是 256KB 的 P-FLASH(Program FLASH),其地址范围从 0x0000_0000 到 0x0003_FFFF,分成了若干个 2KB 的扇区,可用于保存应用层代码,另一个是 256KB 的 FlexNVM,其地址范围从 0x1000_0000 到 0x1003_FFFF,也分成了若干个 2KB 的扇区。扇区(Sector)是一个基本的存储单元。闪存的读写操作通常是以扇区为单位进行的,这意味着闪存的擦除和编程操作都是以扇区为最小粒度。

         为了在同一设备中共存两种不同的软件,创建了一种机制,将它们存储在不同的 P-Flash 区域中。这通过在每个独立软件的链接器文件中指示不同的 P-Flash 区域来实现的。对于 KW38 设备而言,为 OTAP 引导程序保留了一个从 0x0000_0000 到 0x0000_1FFF 的 8KB P-Flash 区域,其余 P- Flash 区域则为 OTAP 客户端软件等其他内容保留。

三、演示OTAP 服务的必要条件

  1. FRDM-KW38 board。
  2. MCUXpresso IDE 安装了 FRDM-KW38 SDK。MCUXpresso IDE 和 SDK 的下载,安装请参考《MCUXpresso_IDE_Installation_Guide》,在此不再赘述。
  3. 安装了 IOT Toolbox 的 Android 手机或者苹果手机,苹果手机可以在 App Store 中搜索下载,Android 手机可以在谷歌商店下载,本文使用 Android 手机。

四、OTAP 服务演示

  • OTAP 程序下载

如前文所述,要完成 OTAP 服务,需要在您的 FRDM-KW38 上编程两个软件:OTAP 引导程序和 OTAP 客户端。接下来将演示如何使用 MCUXpresso IDE 编程和配置设置。

1. 打开 MCUXpresso IDE。在 "Quickstart Panel" 中选择 "Import SDK example(s)"


2. 选择 FRDM-KW38 图标点击 "Next >"。

3. 导入 OTAP 引导程序项目。位于 "wireless_examples -> framework -> bootloader_otap -> bm -> bootloader_otap" 路径下。点击 "Finish" 按钮。

4. 点击 ,将OTAP bootloader程序编辑到开发板上。一旦KW38编程完成会跳转到调试界面,点击   (Ctrl + F2) 会安全的停止 MCU。

5. 重复步骤 1和步骤 2,导入OTAP 应用程序,它位于"wireless_examples ->otac_att->Freerots->otap_client_att_freertos”,也可以选择”wireless_examples->otac_att->bm->

otap_client_att_bm。点击 "Finish" 按钮。

       6. 如前文所说需要将 OTAP 应用程序存放到 P-Flash 的 0x0000_2000 到 0x0003_FFFF区域,我们需要修改 MCU Settings 中的 FLASH 区域划,路径为"Project -> Properties -> C/C++ Build -> MCU settings -> Memory details",修改 Flash 如下图所示。

       7. 点击 ,将OTAP 应用程序编辑到开发板上。一旦KW38编程完成会跳转到调试界面,点击   (Ctrl + F2) 会安全的停止 MCU。

  • 创建SREC 镜像

       本节展示了如何创建一个 SREC 镜像,以重新编程 OTAP 客户端,可以任何的无线例程为对象,本文以 Wireless_uart 例程为对象。

       1. 将 Wireless_uart 例程加载到工作区,路径为 "wireless_examples -> bluetooth ->w_uart-> freertos -> wireless_uart_freertos"。

       2. 为了不覆盖 OTAP Bootloader 程序,需要修改 MCU Settings 中的 FLASH 区域划,路径为"Project -> Properties -> C/C++ Build -> MCU settings -> Memory details". 修改Flash如下图所示。


        3. 解压您的 KW38 SDK 包。将以下路径中的 "ldt" 链接脚本复制到工作区的 "linkscripts" 文件夹中。直接将解压的文件包里的路径下的main_text_section.ldt,直接复制到工作区的frdmkw38_wireless_uart_freertos\linkscripts文件下。结果与下图所示类似。

       解压的 SDK 中 main_text_section.ldt 的路径:<KW38_SDK>\middleware\wireless\framework\Common\devices\MKW38A4\mcux\linkscript_bootloader\main_text_section.ldt

       4. 在 MCUXpresso IDE 中打开位于 linkscripts 文件夹中的 "end_text.ldt" 链接脚本文件。找到如下图所示的部分,并移除 "FILL" 和 "BYTE" 语句。BYTE 和 FILL 行用于用 0xFF 模式填充未使用的 NVM 闪存区域。移除这些代码后,我们的软件镜像将不包含此模式,从而减少了镜像的总大小,并提高了 OTAP 下载速度和内存使用效率。

       5. 打开 "app_preinclude.h" 文件,并将 "gEepromType_d" 定义为内部存储。这是一个虚拟定义,用于将引导程序标志放置在正确的地址。


        /* Specifies the type of EEPROM available on the target board */

        #define gEepromType_d           gEepromDevice_InternalFlash_

       6. 将"OtaSupport" 和 "External" 文件夹在解压的SDK中找到,将 External复制到工作区中frdmkw38_wireless_uart_freertos/framework/Flash文件夹下,将OtaSupport复制到工作区中frdmkw38_wireless_uart_freertos/framework中。

       OtaSupport 在解压 SDK 文件夹路径为:<KW38_SDK>middleware\wireless\framework\OtaSupport

       External 在解压 SDK 文件夹路径为:

       <KW38_SDK>middleware\wireless\framework\Flash\External

       结果如下图所示:

        7. 进入 "Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU C Compiler -> Includes",点击 "Include paths" 旁边的图标(见下图),将会显示一个新窗口,然后点击 "Workspace" 按钮。

        8. 在 "Folder selection" 窗口中展开项目目录,选择 "framework -> Flash -> External -> interface" 和 "framework -> OtaSupport -> interface" 文件夹,点击 "OK" 按钮保存更改。

        9. 确保 "OtaSupport" 和 "External" 文件夹已被导入到 "Include paths" 窗口中。然后点击 "Apply and Close" 按钮保存更改。

       10. 保存并构建项目,点击 进行编译然后展开项目中的 "Binaries" 图标。右键点击 ".axf" 文件并选择 "Binary Utilities -> Create S-Record" 选项。生成的 S-Record 文件将保存到工作区的 Debug 文件夹中,扩展名为 ".s19"。将 S-Record 文件保存在智能手机上的已知位置。

五、测试 OTAP 客户端与 IOT TooIbox App

本节介绍如何使用 IoT Toolbox 应用程序测试 OTAP 客户端。

  1. 在智能手机上打开 IoT 工具箱应用程序。选择 OTAP 之后会开始 SCAN。
  2. 按下 FRDM-KW38 开发板的 SW2 按钮,开发板开始广播。
  3. 当智能手机找到 FRDM-KW38 开发板时,它会被识别为“NXP_OTAA”,点击 NXP_OTAA 将智能手机与该设备连接。

  1. 连接之后导入需要升级的镜像文件点击 upload 进行升级。

        5. 升级完成后,需要等候数秒钟,等 Bootloader 更新完程序后,板载 LED 将会闪烁。此时我们再按 SW2 打开广播,打开 Wireless UART 应用界面,可以发现广播名称为“NXP_WU”,点击连接之后可以实现无线 UART 功能。

  1. 在手机窗口输入 HELLO WORID,会在电脑上的串口工具上打印出来。

六、总结

本文我们介绍了 OTAP 基础理论,并演示了 OTAP 服务的移植,大家可以亲自动手试试,感谢您的关注。

七、参考资料

  • KW38 - Integrating the OTAP Client Service into a Bluetooth LE Central Device
  • MKW38 Reference Manual

 欢迎在博文下方留言评论,我们会及时回复您的问题。

如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com   作者:mose

更多资讯,请扫码关注我们!  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值