公開日:2023/09/21
RAマイコンは、ルネサス エレクトロニクス社(以下、ルネサス社)のCPUコアに、Arm® Cortex®-Mシリーズを採用した汎用MCUです。
技術コラムVol.2「今からはじめるRAマイコン開発」では、開発環境に必要な機材とソフトウェア、およびのRAマイコンのソフトウェア開発環境として「Flexible Software Package(FSP)」の導入について紹介しましたが、今回は「FSP」についてもう一歩踏み込んで、設定方法など詳しい使い方についてご紹介します。
1. RAマイコンの概要
(1)CPUの概要
RAマイコンは現在のところ、RA2、RA4、RA6の各シリーズが展開され、今後さらに高性能なRA8シリーズも予定されています。
Arm Cortex-M33、M23、M4コアを搭載し、モーター制御や液晶表示に対応したミドルレンジから超低消費電力の小型IoT向けのローエンドまで、幅広い用途に対応しています。
当社からは、CPUボード製品として、RA6M5(Arm Cortex-M33)搭載のAP-RA6M-1A、RA6M3(Arm Cortex-M4)搭載のAP-RA6M-0Aをリリースしています。
開発環境については、技術コラムVol.2「今からはじめるRAマイコン開発」で紹介していますが、統合開発環境「e2studio」と「GNU Cコンパイラ」が無償で使用できます。デバッガには安価なルネサス社のE2エミュレータliteのほか、SEGGER社のJ-LinkなどのArm Cortex-Mコア対応のJTAGエミュレータが使用できます。

(2)FSPの概要
「FSP」は、ルネサス エレクトロニクス社から無償で提供されているソフトウェアパッケージで、OSとドライバソフトウェア、ミドルウェアなどで構成されています。
GUIツール上の操作だけで、通信やタイマといった各種CPU内蔵機能から、FreeRTOS™・Azure RTOSのようなRTOS機能、さらにはArm TrustZone®セキュリティまで多彩な機能の実装が行えます。
2023年7月の時点でv4.5.0がリリースされ、最新のRAマイコンへの対応はもちろん、不具合修正や機能追加が随時行われています。

FSPは、e2studio上で動くGUIツール(FSPコンフィグレータ)にて必要な機能の選択や設定を行い、その後、各機能のAPIをユーザープログラム内にコーディング実装するという使い方をします。
「e2studio」と「コンパイラ(GCC)」と「FSP」は、ルネサス社からワンパッケージにまとめられたプラットフォームインストーラがGitHub上で公開されています。
これ1つインストールするだけでRAマイコンのソフトウェア開発をワンストップで行える手軽さも魅力的です。

ソフトウェアのインストールは、ルネサス社が公開する以下の資料などをご参考ください。
2. FSPを設定してみる
開発環境を準備が完了したら、実際にFSPを使っていきます。
ハードウェアは、弊社のAP-RA6M-1Aサンプルプログラムをベースに説明します。
下図は「AN2002 RAファミリ開発チュートリアル」の「3.1.1 インポート方法」を参考に、AP-RA6M-1AのEthernetサンプルプログラムをe2studioにインポートした後、FSPコンフィグレータを起動したときの様子です。

もし、プロジェクトを新規作成する場合は「AN2002 RAファミリ開発チュートリアル」の「4. e2 studioを用いた新規プロジェクト作成方法」を参考にしてください。
FSPコンフィグレータの各ページには、以下の機能があります。
- ページ名
- 説明
- Summaryページ※
- プロジェクトの使用環境を概要として表示します。
- BSPページ※
- プロジェクトで使用するFSPのバージョンや、CPUボード設定を選択できます。
- Clocksページ※
- CPUのクロックを設定できます。
- Pinsページ※
- CPUのピンを設定できます。
- Interruptsページ
- Stacksタブで設定した周辺機能の割込みを表示します。またユーザーが直接割込みを設定することができます。
- Event Linksページ
- CPUが持つイベントリンクコントローラ(ELC)の機能を設定できます。
- Stacksページ※
- プロジェクトのRTOS機能を設定できます。また、タイマやSCI通信など、CPUが持つ周辺機能を設定できます。
- Componentsページ
- FSPに含まれるドライバ・ミドルウェアモジュールの一覧を表示します。Stacksタブで周辺機能を設定すると、対応したモジュールが自動で反映されるため、基本的に本ページを設定する必要はありません。
※表中の印で示したページは、ユーザーが個別に設定・確認が必要なページです。以下に各ページについて詳細を説明します。
(1)Summaryページ
プロジェクトの概要として、CPUデバイス名やコンパイラツールチェーン、FSPから抽出したデバイスドライバ・ミドルウェアの情報を一覧表示します。

(2)BSPページ
BSP(Board Support Package)の情報として、プロジェクトで使用するFSPのバージョンとCPUボードのテンプレート設定を確認・変更することができます。
RTOS設定(「FreeRTOS」・「Azure RTOS」・「RTOSレス」の選択)は、プロジェクト作成時のみ設定が可能ですので、ここで変更はできません。

また、本ページを開いた状態で、e2studioの「プロパティ」ウィンドウを表示すると、プロジェクトのヒープメモリ・スタックメモリなどの設定値が確認・変更できます。

(3)Clocksページ
システムクロック(ICLK)や周辺クロック(PCLKA~PCLKD)など、CPUのクロックを設定できます。
メインクロックをテキストボックスで直接指定した後は、分周・逓倍の設定をプルダウンリストから選ぶだけで設定が完了です。異常なクロックが設定されている場合は、通知してくれる点も嬉しい機能です。


(4)Pinsページ
各ポートを、汎用入出力機能や周辺機能別に設定することができます。
本機能も割り当てたい機能やピンごとに、プルダウンリストから設定値を選んで設定できます。異常な設定の場合はエラー通知されるので、百単位のピン設定を効率よく行えます。


(5)Stacksページ
タイマやSCI通信など、RAマイコンが持つ周辺機能を設定できます。また、RTOS(FreeRTOS・Azure RTOS)を使用したプロジェクトならばRTOSの設定が行えます。

コンフィグレータ上でのRTOS設定については、技術コラムVol.5「今すぐ試せる!リアルタイムOSのすゝめ」でも触れているので、今回はデバイスドライバについて注目して紹介します。ここではSCI機能のUARTドライバを追加することにして、「New Stack」ボタンから「UART Driver on r_sci_uart」を選択します。

画面上にUARTドライバを示すブロックが追加されます。このブロックを選択した状態で、プロパティウィンドウを表示すると、UARTドライバの設定画面を表示できます。

プロパティウィンドウ内では、UARTの設定(例えば、通信ボーレートやパリティビット・ストップビット数)の確認・変更が行えます。その他にもSCIの送信エンプティ割込みなど、関連する割込みの設定なども可能ですので、いろいろとお試しください。
必要な機能設定を行ったら、最後に「Generate Project Content」をクリックすると、設定内容は「ra」「ra_gen」「ra_cfg」という自動生成フォルダ内へと反映されます。

コンフィグレータ上におけるFSPの設定は以上で完了です。この後は、FSPで設定した各機能の制御APIを実際にコーディングしていくことになります。
3. FSPのAPIの使い方
ソースコード上で扱うFSPの制御APIについて説明します。FSPの制御APIは、FSPのユーザーズマニュアル内のAPIリファレンスを基に調べることができます。ユーザーズマニュアルはルネサス社FSPのページからダウンロードできます。

例えば先ほど追加したUARTドライバは、目次の「API Reference」>「Modules」>「Connectivity」>「UART(r_sci_uart)」に記載されています。
資料は非常に膨大です。目的のページが見つからない場合は、検索機能を使います。検索窓に「r_sci_uart」と入力して検索してください。


資料を見ると、UARTドライバには以下のAPIなどが用意されています。
- API例
- 説明
- R_SCI_UART_Open
- コンフィグレータ上のFSP設定に基づいでUARTドライバを初期化します。UARTドライバを使うときは最初に実行する必要があります。
- R_SCI_UART_Close
- UARTドライバを終了します。
- R_SCI_UART_Read
- 引数に指定したバッファに、受信データを渡します。
- R_SCI_UART_Write
- 引数に指定したバッファのデータを、送信します。
各APIの概要とともに引数や戻り値の仕様を確認したら、あとはAPI仕様に基づいてユーザープログラムにAPIを記述します。
ユーザープログラムは一般的に「main関数」に記述しますが、FSPの場合は異なります。
OSレスのプログラムを扱う場合「プロジェクトフォルダ\src\hal_entry.c」内の「hal_entry関数」にユーザープログラムを実装します。「hal_entry.c」はe2studio上でプロジェクトを新規作成したときに自動で作成されます。
※「main関数」は、FSPの自動生成ファイル内で使用されるため、ユーザープログラムで使用できません。

また、OSありのプログラムの場合、FSPにてタスク(スレッド)設定をした際に、タスク名を冠したファイルがsrcフォルダ下に自動生成されます。自動生成されたファイルの中には「(タスク名)_entry関数」が用意されますので、タスクごとの処理はここに記述します。下記はFreeRTOSを使う弊社Ethernetサンプル「ap_ra6m_1a_ether_sample」の例です。

弊社Ethernetサンプルの場合は、Ethernet通信用アプリケーションを「プロジェクトフォルダ\src\net_thread_entry.c」内の「net_thread_entry関数」に実装しています。

FSPの設定と、ユーザープログラムを実装するエントリーポイントもわかったけれど、実際のAPIの使い方が分からないという方には、APIリファレンスのページにサンプルコードが用意されていますので、参考にしてください。

弊社では、各製品にFSPを使ったサンプルプログラムを提供しています。例えば、下記はAP-RA6M-1AのUARTを使ったサンプルプログラム「ap_ra6m_1a_sci_uart_sample」です。これらを参考に、FSPを使ったアプリケーション開発に役立ててください。

4. まとめ
今回は、ルネサス社が提供するFSPの概要と、その使い方手順を簡単にご紹介しました。
FSPは当初RAマイコンのみに提供されていましたが、現在では、RZ/T2M・RZ/T2L用FSP、RZ/A3UL用FSPなど、比較的新しいRZファミリにも同様に提供されています。基本的なFSPの使い方は同じですので、一度FSPに慣れておけば、今後ルネサス社製マイコンのソフトウェア開発を効率化できると思います。
弊社でも、各CPUボード向けにFSPを使ったサンプルプログラムを提供しているので、是非ご活用ください。
製品のご案内
本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。
ご興味のある方は、ぜひ製品をご利用ください。
- ※ArmおよびCortexは、米国および/またはその他の地域におけるArm Limited(またはその子会社)の登録商標です。
- ※記載されている会社名、製品名は、各社の登録商標または商標です。
- ※記載の内容は改良のため、予告なく変更する場合がございます。