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


更多資訊,請掃碼關注我們!
  

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論