NXPのFRDM-MCXN947ボードは、MCXN947デバイスをベースとした低コストの評価用ボードです。NXPはMCXN947デバイス向けに、ハードウェア評価ボード、ソフトウェア開発IDE、サンプルアプリケーション、ドライバなどのツールとソフトウェアサポートを提供しています。本ボードはEthernet PHYを搭載し、カメラモジュールおよびNXPの低コストLCDモジュールPAR-LCD-S035にも対応しています。
この記事では、MCXN947ボード上のカメラを使用して、イーサネット接続伝送と画像取得を同時に実装する方法を探ります。
回路設計時には、ピン競合の回避、つまり同一ピンが異なるタイミングで競合する機能に設定されないよう注意する必要があります。ピン機能を設定する際には、電圧範囲、電流駆動能力といった電気的特性が周辺機器の要件を満たすかどうかも考慮する必要があります。ソフトウェア開発時には、MCUファームウェアやライブラリのバージョンごとのピン多重化サポートを確認し、ソフトウェアの互換性と安定性を確保する必要があります。
「lwip_examples」→「lwip_ping_bm」プロジェクトをFDRM-MCXN947 SDKからインポートし、board -> pin_mux.cファイルを開くと、以下の表のとおりEthernet接続に使用されるピン設定を確認できます。
| ピン名 | Pinmux割り当て |
|---|---|
| P1_4 | ALT9 - ENET0_TX_CLK |
| P1_5 | ALT9 - ENET0_TXEN |
| P1_6 | ALT9 - ENET0_TXD0 |
| P1_7 | ALT9 - ENET0_TXD1 |
| P1_8 | ALT9 - ENET0_TXD2 |
| P1_9 | ALT9 - ENET0_TXD3 |
| P1_13 | ALT9 - ENET0_RXDV |
| P1_14 | ALT9 - ENET0_RXD0 |
| P1_15 | ALT9 - ENET0_RXD1 |
| P1_20 | ALT9 - ENET0_MDC |
| P1_21 | ALT9 - ENET0_MDIO |
NXP公式サイトからMCXN947ボードの回路図をダウンロードし、カメラおよびFlexIO LCDに対応するモジュールを確認すると、下図のようになります。
FlexIOはNXPが開発した柔軟な入出力(I/O)技術で、マイクロコントローラ(MCU)と外部デバイス間で高速かつプログラマブルな通信を実現します。FlexIOモジュールを設定することで、さまざまな通信プロトコルを模倣したり、カスタムプロトコルを実装したりできます。
注意:このLCDは3V I/O電圧にのみ対応しているため、このコネクタ上のすべてのピンを設定する際は、必ず3V3動作モードに設定する必要があります。
以下の図はSDKサンプルの動作原理を示したもので、カメラが画像を取得し、LCDに転送して表示します。
LCDモジュールは、Ethernetやカメラ機能に必要なピンとの競合がない一方、カメラモジュールの設定に必要なピンはEthernetと重複していることが分かります。ピンの再利用状況は、NXP公式サイトで提供されているデータシート内の次の表に示されています。
|
ピン名 |
Pinmux割り当て |
|
P0_4 |
ALT0 - P0_4 |
|
P0_5 |
ALT0 - P0_5 |
|
P1_4 |
ALT7 - SmartDMA_PIO0 |
|
P1_5 |
ALT7 - SmartDMA_PIO1 |
|
P1_6 |
ALT7 - SmartDMA_PIO2 |
|
P1_7 |
ALT7 - SmartDMA_PIO3 |
|
P1_10 |
ALT7 - SmartDMA_PIO6 |
|
P1_11 |
ALT7 - SmartDMA_PIO7 |
|
P1_18 |
デフォルト-PIO-ロー |
|
P1_19 |
Default-PIO-High |
|
P2_2 |
ALT1 - CLKOUT |
|
P3_2 |
ALT2 - FC7_P0 |
|
P3_3 |
ALT2 - FC7_P1 |
|
P3_4 |
ALT7 - SmartDMA_PIO4 |
|
P3_5 |
ALT7 - SmartDMA_PIO5 |
上記のとおり、P1_4、P1_5、P1_6、およびP1_7はEthernetピンと直接競合します。EthernetピンはRJ45 PHYに固定されているため、カメラインターフェースは代替ピンへ再割り当てする必要があります。
データシートによると、P3_0、P3_1、P3_2、およびP3_3が代替ピンとして使用可能です。しかし、P3_2とP3_3はすでにI²C用に使用されているため、これらはそれぞれP3_8およびP3_7へ再割り当てされています(kPORT_MuxAlt3を使用)。
更新後のピンマッピングは以下のとおりです。
|
前のピン |
現在のピン |
Pinmux割り当て |
|
P1_4 |
P3_0 |
ALT7 - SmartDMA_PIO0 |
|
P1_5 |
P3_1 |
ALT7 - SmartDMA_PIO1 |
|
P1_6 |
P3_2 |
ALT7 - SmartDMA_PIO2 |
|
P1_7 |
P3_3 |
ALT7 - SmartDMA_PIO3 |
|
P3_2 |
P3_8 |
ALT3 - FC7_P0 |
|
P3_3 |
P3_7 |
ALT3 - FC7_P1 |
再割り当てされたP3_0、P3_1、P3_7、P3_8はボードのヘッダには出ていませんが、回路図によるとテストパッドTP12、TP31、TP18、TP16に接続されています。カメラはこれらのパッドに直接配線することで接続できます。
| ピン名 | はんだパッド |
|---|---|
| P3_0 | TP12 |
| P3_1 | TP31 |
| P3_7 | TP18 |
| P3_8 | TP16 |
display_examplesのsmartdma_camera_flexio_mculcdサンプルをlwip_ping_bmプロジェクトに統合します。board、drivers、component、sourceフォルダにある.cおよび.hファイルをマージし、これらのフォルダをProject -> Properties -> C/C++ Build -> Settings -> Includes配下のインクルードパスに追加します。
統合後、プロジェクトをコンパイルしてボードへ書き込みます。出力結果は以下の画像のとおりです。
MCX N947ボードでは、EthernetとCamera機能を同時に実装できます。lwip_ping_bmデモは、lwIP TCP/IPスタックを使用したICMPベースのPing機能を示すもので、PCへICMP Echoリクエストを定期的に送信し、その応答を処理します。
smartdma_camera_flexio_mculcdデモでは、SmartDMAを使用してOV7670カメラからフレーム単位で画像データを取得し、FlexIO経由でST7796S LCDパネルへ表示する方法を紹介しています。
ピンの再設定とマルチプレクシングにより、MCX N947でEthernetとカメラを同時に使用することが可能になります。