本記事では、MCUXpresso Config Toolsに含まれ、ピンの設定をおこなう「Pins Tool」について解説します。「Clocks Tool」の使い方については、以下の記事をご参考ください。
最近のMCUには多くのペリフェラル機能が集約・統合されており、それに伴いピンの数も200ピンを超えるようなMCUも出ています。MCUのピン設定は柔軟に使えるように設計されており、1つのピンで複数の機能(信号)を切り替えて使うことができます。また、同じ機能でも複数のピン候補から選べるようになっています。柔軟性が高い分、設定は非常に複雑です。
そのため、どの機能をどのピンに割り当てるか(ピン・マルチプレックス設定)は、設計初期の重要かつ大変な作業の一つです。そこで活躍するのが、MCUXpresso Config Toolsの「Pins Tool」です。
Pins Toolを使うことで、ピン割り当てや電気的設定をGUI上で直感的に行い、その結果をコードとして自動生成することができ、手作業による設定ミスや競合(コンフリクト)を避けることができます。
VS Code環境からConfig Tools内のPins Toolを開き、はじめにツールの使い方を解説します。その後、ピン設定を変更し、LED点滅色を変更するデモンストレーションを紹介いたします。
VS Code環境におけるConfig Toolsのインストール方法について解説します。
※MCUXpresso for VS Codeのインストールがお済みでない方はこちらのブログをご参照ください。
VS Codeを起動後、左側のパネルからMCUXpressoを選択し、Quick Start PanelよりOpen MCUXpresso Installerをクリックしてください。
Installerが立ち上がりますので、MCUXpresso Configuration Toolsを選択し、右上のInstallをクリックしてください。
(今回のブログではMCUXpresso Config Tools v26.03 をInstallしています)
インストールの開始と同時にMyNXPへのログインを求められます。
ログインの後、License Agreementが表示されますので内容をご確認のうえ同意してください。
※インストール後は、VS Codeを再起動してください。
Q. もしインストールに失敗した場合は?
A. 以下ウェブサイトからのご自身のPC OS環境に応じたインストーラーをダウンロードして、お試しください。
MCUXpresso Config Tools | NXPマイクロコントローラ (MCU) 向けソフトウェア開発 | NXP Semiconductors)
インストールを進めると初期画面で以下のような画面が表示されますが、該当がなければ閉じて問題ありません。![]()
VS CodeからConfig Toolsを呼び出すにはSDKをインストールし、サンプルをインポート後、プロジェクトを右クリックすると Open with MCUXpresso Config Toolsが現れますので、こちらをクリックしてください。
※この一連のプロセスは最後のデモンストレーションで詳細に説明するので、ここでは割愛します。
しばらくするとConfig Toolsが起動します。
なおMCUXpresso IDEを使用している場合、Config Toolsは標準で統合されており、上部タブから直接起動できます。
Config Tools起動後、画面右側のパネルでツールの切り替えが可能です。
今回は「Pins」を選択します。
Pin Tool内の主要なビューについて説明します。
続いて、設定において最も重要となるRouting Detailsについて深堀りして見ていきます。
ピン設定に誤りがあり、エラーが発生するとProblemsビューにはエラーの発生箇所と原因が表示されます。またその他の箇所にも赤色でハイライト表示されるため、問題箇所を視覚的に特定できます。
下記図では、B12ピンに対して複数のペリフェラルが設定された状態、つまり競合(コンフリクト)が起きています。
実際にツールを操作する前に、Pins Toolが何を設定しているツールなのかを整理しておきましょう。
Pins Toolでは
「信号がどこから来て、どこへ流れるか」
という観点でピン設定を行います。
この“流れ”には、大きく3つのパターンがあります。
① 外部の信号をMCUに取り込む(ピン⇀ペリフェラル)
まずは入力です。外部のセンサやスイッチ、他のICからの信号をピン経由でMCU内のペリフェラルに取り込むケースです。
Routing Details上の”+”をクリックすると行を追加し、直接入力できます。
下記図の例では、「リセットボタンSW1からの入力された信号をF3ピン(RESET_B)経由でMCUに取り込むこと」を示しています。
② MCU内部の信号を外部に出す(ペリフェラル⇀ピン)
続いて出力です。MCU内部のペリフェラルからピンを介して外部に信号を出すケースです。
下記図の例では、「内部ペリフェラル(FlexSPI)の信号(FLEXSPI_B_DATA0)をK3ピンに割り当て、その信号を外部へ出力すること」を示しています。
③ 内部で完結する接続 (ペリフェラル⇀ペリフェラル)
最後に内部ペリフェラルの出力を別の内部ペリフェラルの入力に接続するケースです。
下記図の例では、「PWMのトリガ信号(PWM0_A0_TRIG0)を、内部ルーディングによりADC0のトリガ入力(TRG CH0)として使う」ことを示しています。
この場合は外部ピンを経由しないため、左端のピン割り当てを示す”# “はn/aとなっています。
ここからは実際にPins Tool上でピン設定を変更し、評価ボード上のLEDの点滅色が変更されるかを見ていきます。
ハードウェアの準備
本稿で使用する評価ボード
・FRDM-MCXN947
SDKのインストール
VS Code内の左側のパネルからMCUXpressoを選択した状態で「Import Repository」をクリックしてください。
その後、左から2番目の「REMOTE ARCHIVE」をクリックし、Packageにて「FRDM-MCXN947」を検索してください。「947」と打ち込むとすぐに出てきます。
Name名、Location名、Create Gitへのチェックは任意に設定して下さい。
※NameおよびLocation名については、「小文字の英数字」「アンダースコア(_)またはハイフン(-)」のみを使用し、(\, /, :, *, ?, ", <, >, |)などの記号やスペース(プログラムの動作不良の原因になりうる)を避けるのが無難です。
最後に「I agree」にチェックを入れた後、「Import」をクリックするとSDKのインストールが開始しますので、しばらくお待ちください。画面右下に"Repository successfully imported"が表示されたら完了です。
サンプルコードのインポート
SDKのインストールが完了したら、サンプルコードのインポートへと進みます。
左側のパネルから「Import Example From Repository」をクリックしてください。
右側に表示された各タブ内で、「Repository」では先ほどインポートしたSDKを選択、
「Board」はFRDM-MCXN947を選択してください。
「Template」では、今回はLEDの点滅色を変えるデモンストレーションですので、
「led」と打ち込んで表示される「driver_examples/gpio/gpio_led_output_cm33_core0」で試してみます。
その後、Toolchainを選択して「Import」をクリックしてください。
ConfigToolsを開く
インポートしたサンプル上で右クリックして、「Open with MCUXpresso Config Tools」を選択してください。少し待つとConfig Toolsが立ち上がります。
Config Toolsが開いたらまずは右側のパネルにあるOverviewを確認します。このサンプルにおいては、ClocksとPinsの2つが緑色(ONの状態)になっており、2つのツールが有効であることを示しています。
Pinsを選択し、現在のピン設定の状況を見てみます。
「Routing Details」を見ると3つのピン(A1,B1,B12)が有効になっています。
しかしながら、LEDに対して設定されているB12ピンのDirectionを見ると“Not Specified”となっており、つまりPins Tool上ではLEDに対してOutput(出力)設定がされていない状態となっています。
では、なぜ設定がされていないのにLEDが点滅するのかというと、VS Codeに戻りCソースファイル(gpio_led_output.c)を見てみます。
Cソースファイルを見ると、BOARD_InitHardware()によってピンの機能は反映されますが、先ほど確認したように、この時点ではPins Tool上でB12ピンはGPIO出力として設定はされていません。
したがって、このサンプルの初期状態では、GPIOの入出力方向はPins Toolではなく、ソースコード側に依存しています。
具体的には、GPIO_PinInit()関数によってB12ピンが「GPIO出力」として初期化され、LEDを制御できる状態になっています。
今回の目的はPins Tool上でピン設定を変更し、その結果をコードとして反映させることですので、ソースコード側からGPIOの初期化および制御に関する部分(下記赤枠)を削除します。
削除するとGPIOの出力設定がどこにも存在しなくなるため、ビルド・デバッグを行うとLEDは点滅しなくなります。
続いて、Pins Toolsでピン設定を行います。Pins Toolより#B12ピンのGPIO0_10のDirectionをOutputに変更します。
これは先ほどの②MCU内部の信号を外部に出す(ペリフェラル⇀ピン)のケースです。
これにより「B12ピン(PIO0_10)をGPIO出力として設定し、MCU内部のGPIO制御(ソフトウェア制御)による信号をピン経由で外部(LED_RED)へ出力する状態」へと変わりました。
コードの変更点は右側のパネルのCode Previewより確認できます。
Not SpecifiedからOutputに変更することでpin_mux.cの最下部にGPIOの初期化コードが追加されます。
この状態でサンプルコードを書き換えます。まずはConfig Toolsの画面左上にあるUpdate Codeをクリックしてください。
その後Windowが表示されます。ここでもCode Previewと同様にコードの変更を確認することができます。
VS Codeに戻ると、画面上部にチェックボックスが3つ並んで表示されますので、チェックが入った状態でOKをクリックしてください。少し時間が経つと、Clocks Toolでの変更がVS Code上のサンプルコードに適応されます。
※SDKのバージョンが異なる場合は表示されない場合もあります。
完了したら、ビルドの前にボード(FRDM-MCXN947)とPCを接続します。
接続が完了したらインポートしたサンプルをデバッグ(ビルド&書き込み&アプリケーションの実行)します。
デバッグのプロセスが完了したら、プログラムがブレイクポイントで止まっているので、画面上部のアイコン内の"|▶"をクリックします。
動画のように赤色のLEDが点滅を開始します。
プログラムの終了は、アイコンの□をクリックします(PCと接続している限りLEDは点滅を続けますが一旦無視してください)。
なぜ赤色LEDが点滅したのか?
ここで、なぜ赤色LEDが点滅したのかについて補足します。
今回の赤色LEDの点滅は、大きく次の2つの設定によって決まっています。
この2つによりLEDの点滅が実現されています
どのLEDを操作しているか?(app.h)
Cソースファイル「gpio_led_output.c」の最下部には、GPIO_PortToggle :指定したGPIOピンの出力を反転するための関数が存在します。
この関数では、
で指定されたGPIOの出力を反転し、LEDを点滅させています。
ただしこの時点では、このGPIOポートとピンがどの色のLEDに対応しているかはわかりません。
そこで、BOARD_LED_GPIO で右クリックし「Go to Definition(もしくは"fn + F12")」を選択すると、「app.h」が開きます
app.hでDefinitionsの部分を確認すると、これらの定義は赤色LED用のGPIOに割り当てられていることがわかります。つまり、この時点で操作対象が赤色LEDであることが確定します。しかし、app.hで赤色LEDが割り当てられていてもピン設定がGPIO出力になっていなければ、LEDは光りません。
ピンをどのように使うか(pin_mux.c)
続いて、ピン設定を確認するためにpin_mux.cの中身を見ていきます。「gpio_led_output.c」内にPin、Clock、Debug consolのそれぞれ初期化を実行するためのBOARD_InitHardware(); があるので、ここで右クリックし「Go to Definition(もしくは"fn + F12")」を選択し、さらに詳細を見てみます。
遷移先にBOARD_InitPins();があり、ここにピン設定が記述されています。BOARD_InitPins(); 上でもう一度右クリックし、「Go to Definition(もしくは"fn + F12")」を選択すると「pin_mux.c」が開きます。
pin_mux.c はPins Tool上で設定した内容が反映されたファイルで、先ほど赤色LEDをOutputへ変更した際にCode Previewで確認したものと同じです。最下部に以下の記述があり、赤色LEDに接続されたB12ピンを、初期値0のGPIO出力として初期化することを意味しています。
このように、app.hで「どのLEDを操作するか(赤色LED)」が決まり、pin_mux.cで「そのピンをGPIO出力として使えるようにする」ことで、GPIO_PortToggle()によって赤色LEDを制御できる状態になっています。
ピン設定を変更し、LEDの点滅を青色に変更する
次にピン設定を変更することでLEDの点滅色を赤色から青色に変更します。
Config Toolに戻り、Pinsから「LED」検索するとC4ピンが青色LED(LED_BLUE)に対応していることがわかります。
C4ピンにチェックを入れると下図のようなウィンドウが表示されるので、GPIO1:GPIO,2(PIO1_2)にチェックを入れてDoneをクリックします。
ここまで完了すると、Routing Detailsに追加したC4ピンが表示されます。
C4ピンをGPIO機能(PIO1_2)として設定し、このピンに青色LED(LED_BLUE)というラベルを割り当てています。これにより、ソフトウェアからこのピンを青色LEDとして扱うことができます。
続いて、ピンの入出力設定を行います。Directionの赤色LEDをOutput⇀Not Specifiedに、青色LEDをNot Specified ⇀Outputに変更します。この設定により青色LEDをGPIO出力として設定できました。
Code Previewで、pin_mux.cの変更点は確認できます。
この状態でサンプルコードを書き換えます。先ほど実施したようにConfig Tools上でUpdate Codeを実行し、VS Code上でも変更を承認してください。変更したピン設定が反映されます。
ここまでで、まずはpin_mux.cが更新されました。
最後に、app.hを更新します。
先ほどの手順でapp.hを開き、LED_REDからLED_BLUEに変更します。
この定義を変更することで、GPIOの制御対象を赤色LEDから青色LEDへ切り替えることができます。
ここまで完了したら再度デバッグ(ビルド&書き込み&アプリケーションの実行)します。
デバッグのプロセスが完了したら、画面上部のアイコン内の"|▶"をクリックします。
動画のように青色のLEDが点滅を開始します。
ちなみに、なぜ1つのLEDで異なる色の点滅ができたかについて、今回使用したボードFRDM-MCXN947にはRGB LEDが搭載されています。FRDM-MCXN947の回路図を見るとピンごとにR/G/Bが割り当てられていることがわかります。
このため、2色のピンを同時にPins Tool内で出力設定し、ソースコードを適切な形に整えれば様々な色を表現することも可能です (例 : 赤 + 青 = 紫)。
MCX Nのリファレンス・マニュアルを開くと、添付ファイルにMCXNP184M150F70_Pinout.xlsx というファイルがあります。ここにはピンの一覧と各ピンに対するペリフェラル機能の一覧が載っています。
最近では、Pins Toolの進化により、このような一覧表を参照しながら手作業でピン設定を行う機会は少なくなってきているかもしれません。
一方で、デバイス選定やパッケージ比較、利用可能なペリフェラルの確認など、システム設計の初期段階では今でも有用なリファレンス資料として活用できます。
MCX Nのリファレンス・マニュアルをダウンロードするには、MyNXPアカウントの登録が必要です。
※Acrobat Readerで開いています
今回はシンプルな例で説明しましたが、実際の設計ではピン設定はさらに複雑になります。そんなときこそPins Toolを活用することで、ミスを防ぎながら効率的に設定を進めることができます。是非ご活用ください。
=========================
本投稿の「Comment」欄にコメントをいただいても、現在返信に対応しておりません。
お手数をおかけしますが、お問い合わせの際には「NXPへの技術質問 - 問い合わせ方法 (日本語ブログ)」をご参照ください。
(既に弊社NXP代理店、もしくはNXPとお付き合いのある方は、直接担当者へご質問いただいてもかまいません。)
MCUXpresso Config Toolsの中から「Pins Tool」にフォーカスし、ピン設定の基本および設定方法を解説します。
VS Code環境での導入方法から、ピン設定の変更によるLED点滅デモまで紹介します。
(作業時間:10分 *MCUXpresso for VSC (Visual Studio Code), SDKをインストールしている前提)