WFI32-IoT Boardを用いたスマートロックデバイスの組込みアプリを開発するための環境の構築方法について説明します。
Warning これは2023/5時点に作成したものです。
No. | デバイス名 | メーカー | 型番・品名など | 説明 |
---|---|---|---|---|
1 | WFI32-IoT Board | Microchip | WFI32-IoT Development Board | Microchip製のIoT開発用ボード。MCUはWFI32E01PC(PIC32MZW1)。Wi-Fiモジュールとセキュアエレメント搭載型。 |
2 | BLE | MIKROE | RN4870 CLICK | アプリとの通信に用いる。モジュールはMicrochip製RN4870。 |
3 | サーボモーター | Parallax | Parallax Feedback 360° High-Speed Servo | 鍵を回すのに用いるモーター |
動作確認済みのPC環境はWindows 11 22H2
です。
No. | ソフトウェア名 | バージョン | 説明 |
---|---|---|---|
1 | Git | >2.39.1.windows.1 | ソースコードの管理 |
2 | Python3 | >3.10.5 | ビルド時に使用(署名の作成など) |
3 | SRecord | >1.64.D001 | ビルド時に使用(バイナリの結合など) |
4 | MPLAB® X IDE | v6.00 | 統合開発環境 |
5 | MPLAB® Harmony 3 Launcher | 3.6.4 | 開発フレームワーク |
6 | MPLAB® XC32/32++ Complier | 2.40 | コンパイラ |
7 | TeraTerm | 4.106 | UARTターミナルエミュレーター |
※バージョンは動作確認がとれているものです
以下配線図を参照してセットアップしてください。
git for windowsから最新バージョンのgitをインストールします。
インストール完了後、以下のコマンドが実行できるか確認してください。
$ git --version
git version 2.40.1.windows.1
Pythonから最新バージョンのPythonをインストールします。
インストール時には以下の画像のように「Add python.exe to PATH」にチェックを入れてください。 入れないとインストール先のパスを手動で環境変数に追加する手間が増えます。
インストール完了後、以下のコマンドが実行できるか確認してください。
$ python --version
Python 3.11.3
SRecordから最新のSRecordをインストールします。SRecordはインストールを忘れがちで、インストールしなかった場合はビルドに失敗します。
インストール完了後、環境変数のPATHにSRecordを追加します。
※設定するPATHはSRecordのインストール先のbinフォルダです
インストール完了後、以下のコマンドが実行できるか確認してください。
$ srec_cat --version
srec_cat version 1.65.0 [git hash 5844fa801c]
...
Warning インストーラーを起動したときに「WindowsによってPCが保護されました」と出る場合があります。このときは
詳細情報
>実行
でインストールを続けてください
Microchipからv6.00のMPLAB X IDEをインストールします。 これより新しいバージョンは動作確認できていません。
-
Harmonyのインストール MPLAB X IDEを起動し、
Tools
>Plugins Download
を選択します。 Harmonyを検索し、チェックボックスにチェックを入れてInstall
をクリックします。 -
パッケージのインストール
Tools
>Embedded
>MPLAB® Harmony 3 Content Manager
を開きます。
ContentManagerから以下のものをダウンロード、バージョンを合わせてください。- cryptoauthlib: v3.3.2
- csp: v3.10.0
- core: v3.10.0
- wireless_wifi: v3.6.1
- dev_packs: v3.10.0
- wolfssl: v4.7.0
- bsp: v3.10.0
- crypto: v3.7.1
Warning この段階でamazon-freertosとaws_cloudはインストールしないでください。 インストールするとHarmony実行時にパスの設定がうまくいきません。
-
amazon-freertos, aws_cloudパッケージの手動インストール
- Harmony3のディレクトリ(通常は C:\User\{ユーザー名}\Harmony3)に移動します
- ここでコマンドプロンプトなどから以下のコマンドを実行し、amazon-freertosを取得します
$ git clone https://github.com/MicrochipTech/amazon-freertos.git $ cd amazon-freertos amazon-freertos$ git checkout mchpdev_20210700 amazon-freertos$ git submodule update --init --recursive
- ここからaws_cloud.zipを取得し、Harmony3/下に展開します
以上で次のような構成になっているはずです。
C:\ └ Users/ └ user_name/ └ Harmony3/ ├ amazon-freertos/ ├ aws_cloud/ ├ bsp/ └...
Microchipからv2.40のXC32/32++ Compilerをインストール。
インストール時には以下の画像のように「Add xc32 to the PATH environment variable」にチェックを入れてください。入れないとインストール先のパスを手動で環境変数に追加する手間が増えます。
TeraTermから最新のTeraTermをインストールします。 シリアルポートの設定は以下のように設定します。
- ボーレート:
115200
- データ:
8bit
- パリティ:
none
- ストップビット:
1bit
- フロー制御:
none
-
スマートロックデバイス組込みアプリのリポジトリをクローン C:\ 直下に以下のコマンドを用いてクローンします。
$ git clone https://github.com/SystemzeusInc/SmartLockDemoEmbeddedApp.git
Warning プロジェクトの階層が深く、ビルド時にWindowsのPATHの長さ制限に引っかかる可能性があるため、C:\ 直下に配置することを推奨します。
-
amazon-freertosのリポジトリをクローン
上記でcloneしたプロジェクトのトップディレクトリでamazon-freertosをクローンします。
$ git clone https://github.com/MicrochipTech/amazon-freertos.git
この時点で以下のような構成になっているはずです。
C:\ └ SmartLockDemoEmbeddedApp/ ├ amazon-freertos/ └ application/
Warning
amazon-freertos
のディレクトリ名は変更しないでください。 ディレクトリ名をamazon-freertos
以外にするとHarmonyを使用したときにパスの設定がくずれます。2023/5時点。 -
amazon-freertosのリポジトリで
mchpdev_20210700
のブランチに移動$ cd amazon-freertos amazon-freertos$ git checkout mchpdev_20210700
-
submoduleのアップデート
amazon-freertos$ git submodule update --init --recursive
実行するとfreertos_kernelやライブラリのファイルがダウンロードされます。
今回の組込みアプリの内容に合わせてFreeRTOSのソースコードを一部修正する必要があります。 以下の内容に従ってソースコードを修正します。 ※見た目をすっきりさせるため、正確なdiff表現ではありません。
-
Wi-FiのSSID、PWの読込みの変更
デフォルトだとソースコードにSSID、パスワードを埋め込まないと接続できませんが、本デモシステムはスマホからSSIDなどを指定するため、動的に変更できるようにしています。
amazon-freertos/libraries/freertos_plus/standard/freertos_plus_tcp/portable/NetworkInterface/pic32mzw1_h3/NetworkInterface_wifi.c#include "system_config.h" +#include "tasks/flash/include/flash_task.h" +#include "tasks/flash/include/flash_data.h" #ifdef PIC32_USE_RIO2_WIFI
WIFINetworkParams_t xNetworkParams; -memcpy(xNetworkParams.ucSSID, clientcredentialWIFI_SSID, strlen( clientcredentialWIFI_SSID )) ; -xNetworkParams.ucSSIDLength = strlen( clientcredentialWIFI_SSID ); -memcpy(xNetworkParams.xPassword.xWPA.cPassphrase, clientcredentialWIFI_PASSWORD, strlen( clientcredentialWIFI_PASSWORD )) ; -xNetworkParams.xPassword.xWPA.ucLength = strlen( clientcredentialWIFI_PASSWORD ); -xNetworkParams.xSecurity = clientcredentialWIFI_SECURITY; -xNetworkParams.ucChannel = 0; /* Scan all channels (255) */ +WiFiInfo_t xWiFiInfo; + +memset(&xWiFiInfo, 0x00, sizeof(xWiFiInfo)); + +if (eReadFlashInfo(READ_FLASH_TYPE_WIFI_INFO, &xWiFiInfo, sizeof(xWiFiInfo)) != FLASH_TASK_RESULT_SUCCESS) +{ + return pdFAIL; +} + +memcpy(xNetworkParams.ucSSID, xWiFiInfo.cWifiSSID, strlen(xWiFiInfo.cWifiSSID)); +xNetworkParams.ucSSIDLength = strlen(xWiFiInfo.cWifiSSID); +memcpy(xNetworkParams.xPassword.xWPA.cPassphrase, xWiFiInfo.cWiFiPassword, strlen(xWiFiInfo.cWiFiPassword)); +xNetworkParams.xPassword.xWPA.ucLength = strlen(xWiFiInfo.cWiFiPassword); +xNetworkParams.xSecurity = xWiFiInfo.xWiFiSecurity; +xNetworkParams.ucChannel = 0; /* Scan all channels (255) */ + /*Turn WiFi ON */ if (WIFI_On() != eWiFiSuccess)
-
デーモンタスク起動フック関数の有効化
本デモシステムではフック関数内にアプリケーションの開始点があるため有効化します。
amazon-freertos/vendors/microchip/boards/curiosity_pic32mzw1/aws_demos/config_files/FreeRTOSConfig.h#define configTIMER_TASK_STACK_DEPTH 1024 -#define configUSE_DAEMON_TASK_STARTUP_HOOK 0 +#define configUSE_DAEMON_TASK_STARTUP_HOOK 1 /* Misc */
-
uxTaskGetStackHighWaterMark関数の有効化
メモリの使用量を確認したい場合は有効にします。
amazon-freertos/vendors/microchip/boards/curiosity_pic32mzw1/aws_demos/config_files/FreeRTOSConfig.h#define INCLUDE_xTaskGetCurrentTaskHandle 1 -#define INCLUDE_uxTaskGetStackHighWaterMark 0 +#define INCLUDE_uxTaskGetStackHighWaterMark 1 #define INCLUDE_xTaskGetIdleTaskHandle 0
-
TCP/IP層の初期化関数実行と同時にWi-Fi接続しないように修正
本デモシステムではスマホアプリで指示したときにWi-Fiに接続したいため、TCP/IP層の初期化時にWi-Fi接続しないように修正します。
amazon-freertos/libraries/freertos_plus/standard/freertos_plus_tcp/FreeRTOS_IP.c#include "FreeRTOS_DNS.h" +#include "common/include/network_operation.h" /* Used to ensure the structure packing is having the desired effect. The * 'volatile' is used to prevent compiler warnings about comparing a constant with * a constant. */
/* A possibility to set some additional task properties. */ iptraceIP_TASK_STARTING(); +#if 1 +#if ipconfigUSE_DHCP == 0 +vIPNetworkUpCalls(); +#endif +#else /* Generate a dummy message to say that the network connection has gone * down. This will cause this task to initialise the network interface. After * this it is the responsibility of the network interface hardware driver to * send this message if a previously connected network is disconnected. */ FreeRTOS_NetworkDown(); +#endif #if ( ipconfigUSE_TCP == 1 )
if( xNetworkInterfaceInitialise() != pdPASS ) { /* Ideally the network interface initialisation function will only * return when the network is available. In case this is not the case, * wait a while before retrying the initialisation. */ vTaskDelay( ipINITIALISATION_RETRY_DELAY ); +#if 0 FreeRTOS_NetworkDown(); +#endif }
-
Wi-Fiへの接続指示に使用する構造体のサイズ変更
本デモシステムではデフォルトのサイズのままだとメモリが枯渇し、ハードフォルトしてしまうためサイズを変更します。
amazon-freertos/vendors/microchip/boards/curiosity_pic32mzw1/aws_demos/config_files/aws_wifi_config.h#define _AWS_WIFI_CONFIG_H_ -#define wificonfigMAX_WEPKEYS (64) +#define wificonfigMAX_WEPKEYS (1) #define wificonfigMAX_WEPKEY_LEN (128)
-
FreeRTOSのヒープサイズ拡大とタスク作成時の最小タスクサイズを変更
本デモシステムではデフォルトのヒープサイズでは不足するため増加させます。
amazon-freertos/vendors/microchip/boards/curiosity_pic32mzw1/aws_demos/config_files/FreeRTOSConfig.h#define configMAX_PRIORITIES (10UL) -#define configMINIMAL_STACK_SIZE (1024) /* 512 for OTA demo */ +#define configMINIMAL_STACK_SIZE (512) #define configISR_STACK_SIZE (512) #define configSUPPORT_DYNAMIC_ALLOCATION 1 #define configSUPPORT_STATIC_ALLOCATION 1 -#define configTOTAL_HEAP_SIZE ( ( size_t ) 180000) +#define configTOTAL_HEAP_SIZE ( ( size_t ) 160000) #define configMAX_TASK_NAME_LEN (16 )
-
DHCPのDiscover時にホスト名を付与しないようにコンフィグファイルを修正
デフォルトではDHCPのホスト名が、aws_clientcredential.h で定義されたAWSIoTのThingNameになるように設定されています。本デモシステムではThingNameはセキュアエレメントから取得したいため、aws_clientcredential.h のThingNameは削除しています。ThingNameを削除するとDHCPのホスト名もなくなり、Wi-FiルーターによってはDHCP処理に失敗し、インターネット接続できなくなります。この事象を回避するためにホスト名を付与しない設定にします。
amazon-freertos/vendors/microchip/boards/curiosity_pic32mzw1/aws_demos/config_files/FreeRTOSIPConfig.h#define ipconfigUSE_DHCP 1 -#define ipconfigDHCP_REGISTER_HOSTNAME 1 +#define ipconfigDHCP_REGISTER_HOSTNAME 0 #define ipconfigDHCP_USES_UNICAST 1
-
ネットワークインターフェース初期関数の処理順番入れ替え
デフォルトでは①Wi-Fiドライバの初期化→②Wi-Fiルーターへの接続→③FreeRTOS IPライブラリへMACアドレス登録の順に処理されるが、①→③→②の順番に変更します。 本デモシステムではWi-Fiルーターの接続に失敗したときに再接続するロジックを補強していますが、Wi-Fiルーター接続後にMACアドレスを登録する処理ではリトライ時にもMACアドレスを登録しなくてはいけなくなり、処理が煩雑になるため、処理の順番を入れ替えます。
amazon-freertos/libraries/freertos_plus/standard/freertos_plus_tcp/portable/NetworkInterface/pic32mzw1_h3/NetworkInterface_wifi.c/* Connect to the AP */ if( WIFI_ConnectAP( &xNetworkParams ) != eWiFiSuccess ) { return pdFAIL; } -xResult = pdPASS; - -if ( eWiFiSuccess == WIFI_GetMAC( mac_addr )) -{ - printf("MAC Addr = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\r\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5] ); - FreeRTOS_UpdateMACAddress(mac_addr); -} -else -{ - printf("Fail to get mac address from wifi module...\r\n"); - xResult = pdFAIL; -} - - -PIC32_MAC_DbgPrint( "xNetworkInterfaceInitialise: %d %d\r\n", ( int ) xMacInitStatus, ( int ) xResult ); +if (eWiFiSuccess == WIFI_GetMAC(mac_addr)) +{ + printf("MAC Addr = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\r\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); + FreeRTOS_UpdateMACAddress(mac_addr); +} +else +{ + printf("Fail to get mac address from wifi module...\r\n"); + xResult = pdFAIL; +} + +PIC32_MAC_DbgPrint("xNetworkInterfaceInitialise: %d %d\r\n", (int)xMacInitStatus, (int)xResult); + +/* Connect to the AP */ +WIFIReturnCode_t xResult2 = WIFI_ConnectAP(&xNetworkParams); +if (xResult2 != eWiFiSuccess) +{ + configPRINTF(("WIFI_ConnectAP fail. Reason %d\r\n", xResult2)); + return pdFAIL; +} +xResult = pdPASS; return xResult;
-
Wi-FiのWPA3対応
本デモシステムではWPA3を使いたいため、ロジックを追加します。
amazon-freertos/vendors/microchip/boards/curiosity_pic32mzw1/ports/wifi/iot_wifi.ccase eWiFiSecurityWPA: { if (WDRV_PIC32MZW_STATUS_OK != WDRV_PIC32MZW_AuthCtxSetPersonal(&g_wifiConfig.authCtx, pxNetworkParams->xPassword.xWPA.cPassphrase, pxNetworkParams->xPassword.xWPA.ucLength, WDRV_PIC32MZW_AUTH_TYPE_WPAWPA2_PERSONAL)) { WDRV_DBG_ERROR_MESSAGE(("APP: Unable to set authentication to WPAWPA2 MIXED\r\n")); return eWiFiFailure; } break; } +case eWiFiSecurityWPA3: +{ + if (WDRV_PIC32MZW_STATUS_OK != WDRV_PIC32MZW_AuthCtxSetPersonal(&g_wifiConfig.authCtx, pxNetworkParams->xPassword.xWPA.cPassphrase, pxNetworkParams->xPassword.xWPA.ucLength, WDRV_PIC32MZW_AUTH_TYPE_WPA2WPA3_PERSONAL)) + { + WDRV_DBG_ERROR_MESSAGE(("APP: Unable to set authentication to WPA2WPA3 MIXED\r\n")); + return eWiFiFailure; + } + break; +} case eWiFiSecurityWEP:
-
エントリーポイントの設定
本デモシステムのアプリケーションを実行するためのエントリーポイントを追加します。
amazon-freertos/projects/microchip/wfi32_iot_pic32mzw1_ecc/mplab/aws_demos/firmware/src/main.c#include "FreeRTOS_Sockets.h" +#include "application_entry.h" #define mainLOGGING_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE * 5 )
/* Initialize all modules */ SYS_Initialize ( NULL ); -//printf("main log1\r\n"); -vApplicationIPInit(); -//printf("main log2\r\n"); while ( true ) {
return ( EXIT_FAILURE ); } +void vApplicationDaemonTaskStartupHook() +{ + APPLICATION_ENTRY_RunWakeupTask(); +} void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent ) {
-
フック関数の設定
Mallocエラーまたはスタックオーバーフローが発生した際にリセットを行うフック関数を設定します。 本プロジェクトではデフォルトのデモプログラムを除去していますが、その影響でMallocエラーやスタックオーバーフローが発生した際に呼ばれるフック関数の設定がONになっているにも関わらず実体のない状態になっており、このままだとビルドに失敗します。設定をOFFにすることもできますが、便利な機能なので設定を生かす方向で修正します。
amazon-freertos/projects/microchip/wfi32_iot_pic32mzw1_ecc/mplab/aws_demos/firmware/src/main.c+#if 0 void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent ) { uint32_t ulIPAddress, ulNetMask, ulGatewayAddress, ulDNSServerAddress; char cBuffer[ 16 ]; static BaseType_t xTasksAlreadyCreated = pdFALSE; ... FreeRTOS_inet_ntoa( ulDNSServerAddress, cBuffer ); FreeRTOS_printf( ( "DNS Server Address: %s\r\n\r\n\r\n", cBuffer ) ); } } +#endif
+void vApplicationMallocFailedHook() +{ + SYS_RESET_SoftwareReset(); + + for (;;) + { + } +} + +void vApplicationStackOverflowHook(TaskHandle_t xTask, + char *pcTaskName) +{ + (void)xTask; + (void)pcTaskName; + + printf("Error #### Stack Size Over %s ###", pcTaskName); + + volatile uint32_t xWaitCount = 100000; + for (volatile uint32_t i = 0; i < xWaitCount; i++) + { + } + + SYS_RESET_SoftwareReset(); + + for (;;) + { + } +} /******************************************************************************* End of File */
ビルドできる状態にするためにいくつか設定します。
プロジェクトはapplication(aws_demos)とbootloader(ota_bootloader)の2つから構成されますが、最初にapplicationの設定をします。
-
MPLAB X IDEで
File
>Open Project...
から projects\microchip\wfi32_iot_pic32mzw1_ecc\mplab\aws_demos\firmware\aws_demos.X を開きますWarning このときプロジェクト名が太文字でなければプロジェクトが選択されていません。プロジェクト名を右クリックし
Set as Main Project
を選べば太文字になります。 -
文字コードの設定 日本語の文字化けを防止するため文字コードを変更します。
プロジェクトを右クリックProperties
>General
>Encoding
をUTF-8
に設定します。 -
Include pathの設定 プロジェクトを右クリック
Properties
>XC32(Global Options)
>xc32-gcc
>Option categories
>Preprocessing and messages
>Include directories
を選択し以下のパスを追加します。- ..\..\..\..\..\..\..\..\application\application_code\src
- ..\..\..\..\..\..\..\..\application\application_code\src\common
-
Projectにファイル追加 プロジェクトの
Source Files
を右クリックAdd Existing Items from Folders...
>Add Folder...
から以下の項目を追加します。- ファイル名:
application
- ファイルのタイプ:
すべてのファイル
- ファイル名:
-
ペリフェラル(Harmony)の設定
Tools
>Embedded
>MPLAB® Harmony 3 Configurator
からHarmonyを開き、以下項目をそれぞれ追加、設定します。-
BSP もともと
PIC32MZ W1 Curiosity BSP
が設定されているので正しい基板のPIC32 MZ W1 WFI32IoT BSP
に置き換えます。変更しないとLEDなどが使えないです。
Harmony BSP -
UART2, GPIO 本デモシステムでのBLEに使用するペリフェラルの設定をします。
- UART2
- Operating Mode:
Ring buffer mode
- Configure Ring Buffer Size-
- RX Ring Buffer Size:
512
- RX Ring Buffer Size:
- Stop Selection bit:
1 Stop bit
- Parity and Data Selection bits:
8-bit data, no parity
- UARTx Module Enable bits:
UxTX and UxRX pins are enabled and used; ...
- UARTx Module Clock Selection bits:
BRG clock is PBCLK3
- Baud Rate:
115200
- Operating Mode:
- GPIO
Pin ID Custom Name Function Direction Latch RA13 BLE_RST GPIO Out High RB9 BLE_UART_RX U2RX In n/a RK7 BLE_UART_TX U2TX n/a n/a
- UART2
-
OCMP1, TMR3, GPIO 本デモシステムでのモーターに使用するペリフェラル(PWM)の設定をします。
- TMR3
- Select Prescaler:
1:64 prescale value
- Timer Period Unit:
millisecond
- Time:
20
- Select Prescaler:
- OCMP1
- Select Output Compare Mode:
PWM mode on OCx; Fault pin disabled
- Select Timer Source:
Timer3
- Compare Value:
15625
- Select Output Compare Mode:
- GPIO
Pin ID Custom Name Function Direction Latch RB12 PWM OC1 n/a n/a
- TMR3
-
ICAP3, TMR2, GPIO 本デモシステムでのモーターに使用するセンサーの設定をします。
- TMR2
- Select Prescaler:
1:8 prescale value
- Timer Period Unit:
microsecond
- Time:
1100
- Select Prescaler:
- ICAP3
- Select Input Capture Mode:
Simple Capture Event mode every edge
- Select Timer Source:
Timer2
- Select Timer Width:
16-bit timer resource capture
- Select First Capture Edge:
Capture rising edge first
- Enable Capture Interrupt:
✓
- Select Input Capture Mode:
- GPIO
Pin ID Custom Name Function Direction Latch RK5 - IC3 In n/a
- TMR2
以上の設定を行い
Generate Code
を実行します。
これでapplicationの設定は完了です。 -
次にbootloaderの設定をします。
-
MPLAB X IDEで
File
>Open Project...
から projects\microchip\wfi32_iot_pic32mzw1_ecc\mplab\ota_bootloader\firmware\ota_bootloader.X を開きます -
ペリフェラル(Harmony)の設定 OCMP1, ICAP3, TMR2, TMR3についてapplicationと同様の内容で設定、Generate Codeを実行します。
Warning 起動時はbootloader->applicationの順に実行されます。先に実行されるbootloaderでPeripheral Module Disable(PMD)が働き、次に実行されるapplicationでbootloaderで設定されていないペリフェラルが設定できなくなります。これを回避するためにbootloaderで使用しなくてもapplicationと同じ設定を行います。
ここではソフトウェアが正しくインストールされているか確認するため、ビルド、デバイスへの書き込み、ログの確認を行います。
-
PCとWFI32-IoT BoardをUSBケーブルで接続します
-
TeraTermを起動し、シリアルポートを選択します COMポートが2つ認識されるので
シリアルデバイス(COMXX)
の方を選択してください。 ※COM番号はCOMポートの使用状況によって異なります
TeraTerm -
MPLAB X IDEで
File
>Open Project...
から projects\microchip\wfi32_iot_pic32mzw1_ecc\mplab\aws_demos\firnware\aws_demos.X を開きます -
Clean And Build Main Project
を押しクリーンビルドします -
TeraTermに以下のようなログが表示されれば成功です
Bootloader start... Factory reset... Bootloader start... APP verify success... =======Boot Descriptor======= header signature :0x40 0x41 0x46 0x52 ucImgFlags :0xfc ulSequenceNum :0x0 slot :0x0 image size :901154 signature :30 44 2 20 42 0 883 [Tmr Svc] [DEBUG]Start APPLICATION_ENTRY_RunWakeupTask ...
-
事象 ビルド実行時に以下のようなエラーが表示されビルドが成功しない。 例えば、MPLAB X IDEを開いたままgitでブランチを移動した場合に発生することがある。
make[2]: Leaving directory 'C:/***/projects/microchip/wfi32_iot_pic32mzw1_ecc/mplab/aws_demos/firmware/aws_demos.X' make[1]: *** [nbproject/Makefile-aws_demos.mk:108: .build-conf] Error 2 make[1]: Leaving directory 'C:/***/projects/microchip/wfi32_iot_pic32mzw1_ecc/mplab/aws_demos/firmware/aws_demos.X' make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2
-
解決方法 ビルド時に使用されるMakefileを再生成する。
- MPLAB X IDEは閉じる
- エラーとなっているプロジェクトのフォルダを特定する。上記の例だと下記のフォルダのエラー箇所になる \projects\microchip\wfi32_iot_pic32mzw1_ecc\mplab\aws_demos\firmware\aws_demos.X\nbproject\
- このフォルダでconfigurations.xml, project.xml以外のファイルとフォルダを消す
- MPLAB X IDEを再度開き、しばらく待つ(上記で消したファイルが再度生成されるのを待つ)
- 再度ビルドを実施する