非常に低価格でありながら高性能な NXP-MCXN236 開発ボードでZephyrを使用する方法

この記事の目的は、Linuxホスト上で、非常に低価格でありながら高性能な NXP-MCXN236 開発ボードにZephyr RTOSを使用する方法を示すことです。

image

NXP-MCXN236 開発ボードには、産業用および民生用のモノのインターネット(IoT)アプリケーションに適した32ビット Arm Cortex-M33 マイクロコントローラが搭載されています。この NXP-MCXN236 開発ボードのブロック図を以下に示します。

開発用ホストにZephyrをインストールした後(以前の記事と同様)、NXPのウェブサイトから、対応する LinkServer_26.6.137.x86_64.deb.binファイルをインストールしてください。これにより、書き込み処理の設計フローを完了できるようになります。インストールを確認するには、以下のコマンドを実行してください。

DigiKey_Coffee_Cup: /usr/local/LinkServer/LinkServer --version
ls (uutils coreutils) 0.8.0

また、付属のUSBケーブルを使用して開発キットのJ10 USBポートをホストに接続した後、以下のようにプローブ確認手順に従って対象デバイスを確認してください。

DigiKey_Coffee_Cup: /zephyrproject/zephyr$ LinkServer probes
  #  Description                                    Serial         Device    Board         Capabilities
---  ---------------------------------------------  -------------  --------  ------------  ----------------
  1  MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146  NTHJHYIGWSDV5  MCXN236   FRDM-MCXN236  DEBUG, VCOM, SIO

この手順が完了したら、samples/hello_world/src/main.cにあるソースコードを以下のように変更します。

/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdio.h>

int main(void)
{
        printf("DigiKey_Coffee_Cup Hello World! %s\n", CONFIG_BOARD_TARGET);

        return 0;
}


次に、Python仮想環境から、以下のようにHello Worldアプリケーションをビルドします。

(venv) DigiKey_Coffee_Cup: /zephyrproject/zephyr/ west build -b frdm_mcxn236 samples/hello_world

...
...

 v4.4.0-8487-g17939cff6553
[168/168] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       27504 B         1 MB      2.62%
             RAM:        4328 B       192 KB      2.20%
           SRAM1:           0 B        96 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%

新しいターミナルを開き、minicomターミナルを起動します。最後に、Hello Worldアプリケーションを NXP-MCXN236 開発ボードに書き込みます。

(venv) DigiKey_Coffee_Cup: /zephyrproject/zephyr$ west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
LinkServer: /usr/local/LinkServer/LinkServer, version v26.6.137
INFO: Exact match for MCXN236:FRDM-MCXN236 found
INFO: Selected device MCXN236:FRDM-MCXN236
INFO: Selected probe #1 NTHJHYIGWSDV5 (MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146)
INFO: MCU-Link firmware update `check`: Probe ([NTHJHYIGWSDV5] [MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146]) is running a firmware version which is older than the included firmware version [3.172]
INFO: Selected device matches probe's target identification info

minicomターミナルには、以下の内容が表示されるはずです。

Welcome to minicom 2.10

OPTIONS: I18n 
Port /dev/ttyACM0, 08:34:37 [U]

Press CTRL-A Z for help on special keys
                                                        
*** Booting Zephyr OS build v4.4.0-8487-g17939cff6553 ***
DigiKey_Coffee_Cup Hello World! frdm_mcxn236/mcxn236                  
                                                       

次に、LED点滅デモをビルドします。

(venv) DigiKey_Coffee_Cup: west build -b frdm_mcxn236 samples/basic/blinky
...
...

[168/168] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       27580 B         1 MB      2.63%
             RAM:        4328 B       192 KB      2.20%
           SRAM1:           0 B        96 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%

続いて書き込みを実行します。

(venv) DigiKey_Coffee_Cup: west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
LinkServer: /usr/local/LinkServer/LinkServer, version v26.6.137
INFO: Exact match for MCXN236:FRDM-MCXN236 found
INFO: Selected device MCXN236:FRDM-MCXN236
INFO: Selected probe #1 NTHJHYIGWSDV5 (MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146)
INFO: MCU-Link firmware update `check`: Probe ([NTHJHYIGWSDV5] [MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146]) is running a firmware version which is older than the included firmware version [3.172]
INFO: Selected device matches probe's target identification info

minicomターミナルには、以下の内容が表示されるはずです。

*** Booting Zephyr OS build v4.4.0-8487-g17939cff6553 ***
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON
LED state: OFF
LED state: ON

...
...


以下の動画は、NXP-MCXN236 開発ボード上のRGB LEDを使ったZephyrの点滅デモを示しています。

次に、Zephyr RTOSにおける基本的なカーネルスレッド同期のデモをビルドします。

(venv) DigiKey_Coffee_Cup: zephyrproject/zephyr$ west build -b frdm_mcxn236 samples/synchronization

...
...
...

[168/168] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       28472 B         1 MB      2.72%
             RAM:        6824 B       192 KB      3.47%
           SRAM1:           0 B        96 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%

minicomターミナルを開いたまま、デモを書き込みます。


/zephyrproject/zephyr$ west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner linkserver
RUNNER - gdb_port = 3333, semih port = 8888
LinkServer: /usr/local/LinkServer/LinkServer, version v26.6.137
INFO: Exact match for MCXN236:FRDM-MCXN236 found
INFO: Selected device MCXN236:FRDM-MCXN236
INFO: Selected probe #1 NTHJHYIGWSDV5 (MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146)
INFO: MCU-Link firmware update `check`: Probe ([NTHJHYIGWSDV5] [MCU-LINK FRDM-MCXN236 (r0E7) CMSIS-DAP V3.146]) is running a firmware version which is older than the included firmware version [3.172]
INFO: Selected device matches probe's target identification info

minicomターミナルには、このプラットフォームからの以下のZephyrスレッド情報が表示されるはずです。

*** Booting Zephyr OS build v4.4.0-8487-g17939cff6553 ***                                                                                         
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_b: Hello World from cpu 0 on frdm_mcxn236!                                                                                                                                             
thread_a: Hello World from cpu 0 on frdm_mcxn236!    
...
...

これにより、Zephyrカーネルのスケジューラ、通信、およびタイミングが期待どおりに動作していることが示されています。

NXP-MCXN236 開発ボードは、MCXN236 デバイスをベースとし、Winbondの64Mbit外部シリアルフラッシュを搭載した、低価格でありながら非常に高性能な設計および評価用ボードです。このボードには、高速USB回路、加速度センサ、CAN PHY、オーディオコーデック(DNP)、DMICセンサ、RGB LED、押ボタン、およびMCU-Linkデバッグプローブ回路も搭載されています。さらに、ArduinoのシールドモジュールおよびmikroBUSヘッダと互換性があります。また、次のようなカメラモジュールと互換性のあるヘッダも備えています。ただし、このカメラモジュールは現在は生産中止となっていますが、予備として以前に購入して現在も所有している場合に使用できます。

image

または、DigiKeyで入手可能なのはこちらのモジュールです。

image

DigiKeyで入手可能な以下のNXPの低価格LCDモジュールと互換性があります。

image

非常に低価格でありながら高性能な NXP-MCXN236 開発ボードは、多くの民生用およびIoTアプリケーション向けのMCX N23X MCUの迅速なプロトタイピングを可能にする、小型で拡張性の高いボードで、DigiKeyで入手できます。これらのNXPプラットフォームに関する今後の情報にもご期待ください。

どうぞ素晴らしい一日を!

この記事はスペイン語でこちらからご覧いただけます。

Este articulo esta disponible en espanol aqui.




オリジナル・ソース(English)