FRDM-MCXN947のボードを用いて、CANの動作確認を行っていきます。
今回はインターナル・ループバック・テスト (MCX N947からデータを送信して、その送信したデータをFRDMボードの外部ピンには出さず、デバイス内部でループバックして受信する) を行うため、FRDMボード1台あれば大丈夫です。
CANバス・プロトコルの基礎を知りたい方は、以下の記事をご参照ください。
・記事:CANバス/プロトコルの概要と特長 (日本語ブログ)
目次
準備するもの
ハードウェア
・FRDM-MCXN947 (USBケーブル付属)

ソフトウェア
・FRDM-MCXN947用のSDK
*MCX N947向けのSDK(ver. 25.09.00)をVSCodeにインストールした前提で説明していきます。
開発環境(MCUXpresso for VSC)の準備、SDKのインストール方法は、以下の記事をご参考ください。
記事:MCUXpresso for VSCとSDKのインストール (日本語ブログ)
手順
1.CAN ループバック・テスト用のサンプル・アプリケーションをインポート
「File」メニューから「New Window」をクリックして、新しいワークスペースを作成

(前に別の作業を行っていたワークスペースだと、残っていた設定などで変な挙動をすることがあるため、新しいワークスペースで作業するのがオススメです)
サイドバーに表示される”PROJECTS"もしくは"QUICKSTART PANEL"内の「Import Example from Repository」をクリックし、下図の項目を選択/入力してください。
・Repository: に「インストールしたSDK」を選択
・Board: 「FRDM-MCXN947」を選択
・Template: 「driver_examples/flexcan/flexcan_loopback_cm33_core0」 を選択
・Name: 任意の名前
・Location: 任意のフォルダを指定 *フォルダ名にスペースを含めないこと
・Toolchain: 任意のToolchainを選択 (今回はDefaultのArm GNU Toolchainを選択)

選択/入力が終わったら、「Import」をクリックします。
注:Templeteを選択する際に、2種類のLoopbackデモが表示されます。
1.flexcan_loopback_cm33_core0
2.flexcan_loopback_transfer_cm33_core0
違いは下表の通りです。今回は先ず動かしてみようと思うので、簡単で分かりやすい「flexcan_loopback_cm33_core0」を選択しました。
|
項目
|
flexcan_loopback_cm33_core0
|
flexcan_loopback_transfer_cm33_core0
|
|
ループバック
|
あり(内部)
|
あり(内部)
|
|
API 方式
|
ポーリング
|
割り込み・非同期
|
|
コールバック
|
なし
|
あり
|
|
使用用途
|
基本動作確認
|
実運用に近いアプリ実装
|
|
難易度
|
易しい
|
中級
|
|
メッセージ処理
|
送受信をその場で処理
|
ハンドルを使いイベント駆動
|
注:MCUXpresso for VSCのバージョンに依っては、TemplateとNameの間に「App type」が表示される場合がありますが、こちらは何を選択いただいてもかまいません。
2.プロジェクト「flexcan_loopback_cm33_core0」の内容を確認
以下のようにPROJECTSに「frdmmcxn947_flexcan_loopback_cm33_core0」がインポートされました。

Project Files --> readme.mdを見てみると、このデモの概要と、対応しているボード一覧を確認できます。

[デモ概要を日本語訳]
flexcan_loopback_functional サンプルは、CAN バス設計のデバッグを行うために、ループバックテストモードの使用方法を示しています。
このサンプルを実行するには、1 枚のボードのみが必要です。本サンプルでは、同一の ID を持つ 2 つの FlexCAN メッセージバッファを設定し、一方を受信(Rx)用、もう一方を送信(Tx)用として構成します。
その後、内部ループバック接続を介して、送信メッセージバッファから受信メッセージバッファへ CAN メッセージを送信し、受信したメッセージのペイロードをターミナルに表示します。
[デモ・イメージ]

FlexCANコントローラ内部のループバックを用いるため、外部ピンに信号は出力されません。
3.プロジェクトのビルド
先程インポートしたプロジェクトを右クリックして、「Build Project」を選択。

数秒でビルドが完了します。

4.ターゲットボードへの書き込みと動作確認
PCとFRDM-MCXN947をUSBケーブルで接続します。
(FRDMボードのUSBポートを左にした際に上側が書き込み&デバッグ用ポートとなります。)

接続が完了したら、プロジェクトの右側に表示されている緑色の「▷」マークをクリック
ビルドとターゲットへの書き込みを実施します。

書き込み後、以下のように表示されます。

デフォルトで95行目にBreak Pointが貼られているので、プログラムがmain()の最初で止まっている状態です。
ここで「SERIAL MONITOR」のタブをクリックし、Portを「MCU-Link Vcom Port」を選択します。
注:Port名は使用するホストOSにより異なります。ここではWindows 11のOSを使用しています。
「▷Start Monitoring」をクリックすると、シリアル・モニターが開始されます。

そして、Break Pointで止まっているプログラムを動作させるため、画面上部に表示されている一番左の「▷」(Continue)ボタンをクリックします。(このアイコン上で、ステップ実行などのデバッグも可能です。)

すると、送受信を確認できました!!

送信バッファと受信バッファで同じ値が読み取れています。
5.送信データを変えて送受信を試してみる
今度は実際に送るデータを変えてテストしてみます。以下のように適当に送信データを変えてファイルを保存します。
対象コード: flexcan_loopback.c
(変更前)

(変更後)

再度ビルドして書き込み、実行してみると、ちゃんと送信&受信データが変わっていました!

まとめ
今回は環境に慣れるためにも先ずはCANを動かしてみました。しかしながら、他のデバイスとCAN通信が本当にできるのか?実際にどのようなフレームが送られているのか?気になると思います。こちらは以下の記事をご参照ください。
CAN通信を行うと共に、CANFDフレームを取得し解説。*テストにはFRDMボード2台必要。
=========================
本投稿の「Comment」欄にコメントをいただいても、現在返信に対応しておりません。
お手数をおかけしますが、お問い合わせの際には「NXPへの技術質問 - 問い合わせ方法 (日本語ブログ)」をご参照ください。
(既に弊社NXP代理店、もしくはNXPとお付き合いのある方は、直接担当者へご質問いただいてもかまいません。)