1169834_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1169834_zh-CN

1169834_zh-CN

KW38 - 使用 OTAP 客户端软件对 KW38 设备进行重新编程

简介

空中编程(OTAP)是NXP提供的一项基于蓝牙低功耗(Bluetooth LE)的定制服务,提供升级微控制器中运行的软件的解决方案。本文件指导用户通过空中编程(OTAP)Bluetooth LE服务,将新的软件镜像加载到KW38设备中。

软件要求

  • MCUXpresso IDE 或 IAR Embedded Workbench IDE。
  • FRDM-KW38 SDK。
  • IoT Toolbox 应用程序,适用于 Android iOS 系统。你也可以从以下帖子下载 IoT Toolbox 应用程序的 APK 文件:Android 版 IoT Toolbox

硬件要求

  • FRDM-KW38板。
  • 带有 IoT Toolbox 应用程序的智能手机。

OTAP 客户端软件在更新过程中使用的 KW38 闪存

默认情况下,512KB KW38 闪存被分区为:
  • 一个 256KB 的程序闪存阵列 (P-Flash),分为 2KB 的扇区,闪存地址范围从 0x0000_0000 到 0x0003_FFFF。
  • 一个256KB的FlexNVM数组,分为2KB的扇区,地址范围从0x1000_0000到0x1003_FFFF。
  • 别名内存 (Alias memory),地址范围从 0x0004_0000 到 0x0007_FFFF。对别名内存的写入或读取操作分别会修改或返回 FlexNVM 的内容。换句话说,别名内存是使用不同地址来访问 FlexNVM 内存的另一种方式。

Untitled.pngUntitled.png

以下几点将简化说明 OTAP 服务的工作原理:
 
OTAP 应用程序由两个独立的部分组成,即 OTAP 引导加载程序和 OTAP 客户端。OTAP 引导加载程序会验证 OTAP 客户端中是否有可用的新镜像,以对设备进行重新编程。另一方面,OTAP 客户端软件提供了所需的蓝牙低功耗自定义服务,使 OTAP 客户端设备(待重新编程的设备)能够与 OTAP 服务器设备(包含用于重新编程 OTAP 客户端设备的镜像的设备)进行通信。因此,首次准备软件时,需要对 OTAP 客户端设备进行两次编程,首先是 OTAP 引导加载程序,然后是 OTAP 客户端软件。使两个不同的软件能够在同一设备中共存的机制是将它们分别存储在不同的内存区域。这是通过在链接器文件中为每个软件指定不同的内存区域来实现的。对于 KW38 设备,OTAP 引导加载程序预留了一个从 0x0000_0000 到 0x0000_1FFF 的 8KB 存储空间,因此,内存的其余部分除其他用途外,由 OTAP 客户端软件预留。
 
Untitled.pngUntitled.png
 
为 OTAP 客户端设备生成新的镜像文件时,我们需要在链接器文件中指定代码将以 8KB 的偏移量进行放置(就像 OTAP 客户端软件所做的那样),因为必须保留这些地址范围以避免覆盖 OTAP 引导加载程序。新应用程序还应在相应的地址包含引导加载程序标志,以确保其正常工作(稍后我们将回到这一点)。
 
Untitled.pngUntitled.png
 
当 OTAP 客户端设备和 OTAP 服务器设备连接且正在进行下载时,OTAP 服务器设备通过蓝牙低功耗将镜像数据包(称为块)发送到 OTAP 客户端设备。OTAP 客户端设备可以将这些块存储在外部 SPI 闪存(FRDM-KW38 开发板上已预装)或片上 FlexNVM 区域中。这些块的存储目的地可在 OTAP 客户端软件中选择(本文将提供修改存储目的地的说明)。
 
Untitled.pngUntitled.png
 
当镜像传输完成且所有块都已从 OTAP 服务器设备发送到 OTAP 客户端设备后,OTAP 客户端软件会将诸如软件更新源(外部闪存或 FlexNVM)之类的信息写入称为引导加载程序标志的内存部分。然后,OTAP 客户端对微控制器(MCU)执行软件复位,以执行 OTAP 引导加载程序代码。接着,OTAP 引导加载程序代码读取引导加载程序标志,以获取使用新应用程序对设备进行重新编程所需的信息。请参见以下流程图,该图解释了这两个应用程序的流程。
 
Untitled.pngUntitled.png
由于新应用程序是按 8KB 的偏移量构建的,因此 OTAP 引导加载程序从 0x0000_2000 地址开始对设备进行编程,因此,OTAP 客户端应用程序会被新镜像覆盖。然后,OTAP 引导加载程序转移应用程序的流程,开始执行新代码。
 
Untitled.pngUntitled.png
 
实际上,如第 3 点所述,当启用 FlexNVM 存储时,OTAP 客户端软件和软件更新之间的边界并非恰好位于 P-Flash 和 FlexNVM 内存区域的边界上,此外,这些值可能会根据你的链接器设置而变化。要了解边界的位置,你应该检查项目中的实际内存地址
     

在 IAR Embedded Workbench IDE 中配置和编程 OTAP 客户端软件

如最后一节所述,要完成 OTAP 实现所需的软件,需要在 FRDM-KW38 开发板上编程两个软件,即 OTAP 引导加载程序和 OTAP 客户端。本节将指导你使用 IAR Embedded Workbench IDE 进行编程,并配置设置以在外部存储和内部存储之间进行选择。

1- 第一步是在 KW38 中编程 OTAP 引导加载程序。解压 SDK,然后在以下路径中找到 OTAP 引导加载程序软件:

\boards\frdmkw38\wireless_examples\framework\bootloader_otap\bm\iar\bootloader_otap.eww

2- 点击 “Download and Debug” 图标 (Ctrl + D),在开发板上编程 OTAP 引导加载程序项目。Untitled.pngUntitled.pngKW38 编程完成并开始调试会话后,中止会话 (Ctrl + Caps Lock + D)Untitled.pngUntitled.png,以安全地停止 MCU。

3- 此时,您已将OTAP引导程序编程到您的KW38中。接下来是编程和配置 OTAP 客户端软件。请在以下路径找到 OTAP 客户端软件:

FreeRTOS项目版本:

\boards\frdmkw38\wireless_examples\bluetooth\otac_att\freertos\iar\otap_client_att_freertos.eww

裸机 (Baremetal) 项目版本:

\boards\frdmkw38\wireless_examples\bluetooth\otac_att\bm\iar\otap_client_att_bm.eww

4- 然后,配置 OTAP 客户端以选择外部存储或内部存储。

要选择外部存储,请按照以下步骤操作(这是 SDK 项目中的默认配置):

4.1- 在工作区的源文件夹中找到 “app_preinclude.h” 头文件。搜索 “gEepromType_d” 定义,并将其值设置为 “gEepromDevice_AT45DB041E_c”

/* Specifies the type of EEPROM available on the target board */
#define gEepromType_d           gEepromDevice_AT45DB041E_c

4.2- 打开项目选项窗口 (Alt + F7)。在 “Linker->Config” 窗口中,设置 “gUseInternalStorageLink_d=0”。

Untitled.pngUntitled.png

要选择内部存储,请按照以下步骤操作:

4.1 - 在工作区的源文件夹中找到 “app_preinclude.h” 头文件。搜索 “gEepromType_d” 定义,并将其值设置为 “gEepromDevice_InternalFlash_c”。

/* Specifies the type of EEPROM available on the target board */
#define gEepromType_d           gEepromDevice_InternalFlash_c

4.2- 打开项目选项窗口 (Alt + F7)。在 “Linker->Config” 窗口中,设置 “gUseInternalStorageLink_d=1”。

Untitled.pngUntitled.png

5- 配置好存储设置后,保存项目中的更改。然后点击 “Download and Debug” 图标(Ctrl + D)Untitled.pngUntitled.png,在开发板上编程软件。KW38 编程完成并开始调试会话后,中止会话 (Ctrl + Caps Lock + D)Untitled.pngUntitled.png,以安全地停止 MCU。

在 IAR Embedded Workbench IDE 中创建用于更新 OTAP 客户端软件的 SREC 镜像

本节将展示如何以无线示例为起点,创建与 OTAP 兼容的镜像,以使用 IAR Embedded Workbench IDE 对 KW38 OTAP 客户端进行重新编程。

1- 从 SDK 包的 Bluetooth 文件夹中选择任意示例,使用 IAR IDE 打开。Bluetooth 示例位于以下路径:

\boards\frdmkw38\wireless_examples\bluetooth

 在本示例中,我们将使用葡萄糖传感器项目:

\boards\frdmkw38\wireless_examples\bluetooth\glucose_s\freertos\iar\glucose_sensor_freertos.eww

2- 打开 IAR 中的项目选项窗口 (Alt + F7)。在 “Linker->Config” 窗口中,编辑选项以包含 “gUseBootloaderLink_d=1” 标志,并更新 “gEraseNVMLink_d=0” 标志。当 gUseBootloaderLink_d 标志为 true 时,它向链接器文件指示镜像必须在第一个闪存扇区之后寻址,以避免覆盖 OTAP 引导加载程序软件(如我们之前所述)。另一方面,gEraseNVMLink_d 符号用于用 0xFF 模式填充未使用的 NVM 闪存区域。禁用此标志后,我们的软件镜像将不包含此模式,因此,镜像的总大小会减小,并提高 OTAP 下载速度和内存使用率。

Untitled.pngUntitled.png

3- 进入 “Output Converter” 窗口。取消选中 “Override default” 复选框,然后展开 “Output format” 下拉框,选择 “Motorola S-records” 格式。点击 “OK” 按钮完成设置。

Untitled.pngUntitled.png

4- 构建项目。

5- 在以下路径中找到 S-Record 文件 (.srec),并将其保存到智能手机上的已知位置。

\boards\frdmkw38\wireless_examples\bluetooth\glucose_s\freertos\iar\debug\glucose_sensor_freertos.srec

在 MCUXpresso IDE 中配置和编程 OTAP 客户端软件

如前文所述,为了完成OTAP实现,您需要在FRDM-KW38上编写两个软件:OTAP引导加载程序和OTAP客户端。本节将指导您使用MCUXpresso IDE对设置进行编程和配置,以选择外部存储或内部存储。

1- 打开 MCUXpresso IDE。在"快速入门面板"中点击"导入SDK示例"。

Untitled.pngUntitled.png

2- 选择 FRDM-KW38 图标,然后点击 “Next>”。

Untitled.pngUntitled.png

3- 导入 OTAP 引导加载程序项目。它位于 “wireless_examples -> framework -> bootloader_otap -> bm -> bootloader_otap”。点击 “Finish” 按钮。

Untitled.pngUntitled.png

4- 点击 “Debug” 图标Untitled.pngUntitled.png,在开发板上编程 OTAP 引导加载程序项目。KW38 编程完成并开始调试会话后,中止会话Untitled.pngUntitled.png (Ctrl + F2),以安全地停止 MCU。

5- 重复步骤 1 到 3,在 MCUXpresso IDE 中导入 OTAP 客户端软件。对于 FreeRTOS 版本,它位于 “wireless_examples -> bluetooth -> otac_att -> freertos -> otap_client_att_freertos”;如果你更喜欢裸机版本,则位于 “wireless_examples -> bluetooth -> otac_att -> bm -> otap_client_bm_freertos”。

6- 然后,配置 OTAP 客户端以选择外部存储或内部存储。

要选择外部存储,请按照以下步骤操作(这是 SDK 项目中的默认配置):

6.1- 在工作区的源文件夹下找到 “app_preinclude.h” 文件。搜索 “gEepromType_d” 定义,并将其值设置为 “gEepromDevice_AT45DB041E_c”

/* Specifies the type of EEPROM available on the target board */
#define gEepromType_d           gEepromDevice_AT45DB041E_c

6.2- 导航至 “Project -> Properties -> C/C++ Build -> MCU settings -> Memory details”。按照下图所示编辑 Flash 字段,保持 RAM 不变。

Untitled.pngUntitled.png

要选择内部存储,请按照以下步骤操作:

6.1- 在工作区的源文件夹下找到 “app_preinclude.h” 文件。搜索 “gEepromType_d” 定义,并将其值设置为 “gEepromDevice_InternalFlash_c”

/* Specifies the type of EEPROM available on the target board */
#define gEepromType_d           gEepromDevice_InternalFlash_c

6.2- 导航至 “Project -> Properties -> C/C++ Build -> MCU settings -> Memory details”。按照下图所示编辑 Flash 字段,保持 RAM 不变。

Untitled.pngUntitled.png

7- 配置好存储设置后,保存项目中的更改。然后点击 “Debug” 图标Untitled.pngUntitled.png,在开发板上编程软件。KW38 编程完成并开始调试会话后,中止会话Untitled.pngUntitled.png (Ctrl + F2),以安全地停止 MCU。

在 MCUXpresso IDE 中创建 SREC 镜像以更新 OTAP 客户端中的软件

本节将展示如何以无线示例为起点,创建与 OTAP 兼容的镜像,以使用 MCUXpresso IDE 对 KW38 OTAP 客户端进行重新编程。

1- 如前所述,从 SDK 包的 Bluetooth 文件夹中导入任意示例。在 SDK 导入向导中,Bluetooth 示例位于 “wireless_examples -> bluetooth” 文件夹中。本示例将使用 “wireless_examples -> bluetooth -> glucose_s -> freertos -> glucose_sensor_freertos” 中的葡萄糖传感器项目。见下图。

Untitled.pngUntitled.png

2- 导航至 “Project -> Properties -> C/C++ Build -> MCU settings -> Memory details”。按照下图所示编辑 Flash 字段,保持 RAM 不变。最后几个字段向链接器文件指示镜像必须在第一个闪存扇区之后寻址,以避免覆盖 OTAP 引导加载程序软件,如我们在本文简介中所述。

Untitled.pngUntitled.png

3- 解压 KW38 SDK 包。将 “main_text_section.ldt” 链接脚本从以下路径拖放到工作区的 “linkscripts” 文件夹中。结果应与下图类似。

\middleware\wireless\framework\Common\devices\MKW38A4\mcux\linkscript_bootloader\main_text_section.ldt

Untitled.pngUntitled.png

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

Untitled.pngUntitled.png

5- 打开 “app_preinclude.h” 文件,将 “gEepromType_d” 定义为内部存储。这是一个必要的虚拟定义,用于将引导加载程序标志放置在正确的地址,因此,这不会影响你之前在 MCU 中编程 OTAP 客户端和 OTAP 引导加载程序软件时选择的存储方法。

/* Specifies the type of EEPROM available on the target board */
#define gEepromType_d           gEepromDevice_InternalFlash_c

6- 在项目的 “framework” 文件夹中包含 “OtaSupport” 文件夹及其文件。同时在项目的 “framework -> Flash” 文件夹中包含 “External” 文件夹及其文件。“OtaSupport” 和 “External” 文件夹可在 SDK 中找到。你可以轻松地从 SDK 下载路径中拖动这些文件夹并将其放入 MCUXpresso 的工作区中。“OtaSupport” 和 “External” 文件夹位于:

OtaSupport

middleware\wireless\framework\OtaSupport

External

中间件\无线\框架\Flash\External

结果应如以下图所示: 

Untitled.pngUntitled.png

7- 依次进入 “Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU C Compiler -> Includes”。点击 “Include paths” 旁边的图标(见下图)。会弹出一个新窗口,然后点击 “Workspace” 按钮。

Untitled.pngUntitled.png

8- 在 “Folder selection” 窗口中展开项目目录,然后选择 “framework -> Flash -> External -> interface”(框架 -> 闪存 -> 外部 -> 接口)和 “framework -> OtaSupport -> interface” 文件夹。点击 “OK”按钮保存更改。Untitled.pngUntitled.png

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

Untitled.pngUntitled.png

10- 点击此图标Untitled.pngUntitled.png保存并构建项目。然后,展开项目中的 “Binaries” 图标。右键点击 “.axf” 文件,选择 “Binary Utilities -> Create S-Record” 选项。生成的 S 记录文件将以 “.s19” 为扩展名保存在工作区的 Debug 文件夹中。将该 S 记录文件保存到智能手机上的已知位置。

Untitled.pngUntitled.png


使用 IoT Toolbox 应用程序测试 OTAP 客户端

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

1- 在你的智能手机上打开 IoT Toolbox 应用。选择 OTAP,然后点击 “SCAN” 以开始扫描合适的 OTAP 客户端设备。

Untitled.pngUntitled.png

 2- 按下 FRDM-KW38 开发板上的 ADV 按钮 (SW2) 以开始广播。

3- 当你的智能手机找到 FRDM-KW38 开发板后,该设备将显示为 “NXP_OTAA”。将你的智能手机与此设备连接。随后,智能手机上会显示一个新窗口。

Untitled.pngUntitled.png

 4- 点击 “Open” 按钮,查找 SREC 软件更新文件。

5- 点击 “Upload” 开始传输。等待下载完成。更新成功后,会显示确认消息。

Untitled.pngUntitled.png

 6- 等待几秒钟,直到软件更新被编程到你的 MCU 中。新代码将自动开始运行。


如果对本主题有任何问题,请告知我。

BLE软件千瓦回复:KW38 - 使用 OTAP 客户端软件对 KW38 设备进行重新编程

嗨,EdgarLomeli

  很多人无法使用 Google 应用商店,你能提供 IoT Toolbox 的最新 apk 安装包吗? 

非常感谢。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-19-2025 03:41 AM
更新者: