はじめに:RAファミリとは
RAファミリは、ルネサス エレクトロニクスが展開するArm Cortex-Mコア搭載の32bitマイコンファミリです。ルネサスには独自コアのRXファミリや16bitのRL78ファミリという長い歴史を持つ製品群がありますが、RAはそれらと並ぶ形で2019年に投入され、現在ではエントリ向けのRA0からCortex-M85搭載のハイエンドRA8まで、5つのシリーズを擁するArm系の主力ラインアップに成長しています。
RAの最大の特徴は、「ルネサスの周辺機能・品質」と「Armエコシステム」の両取りができる点です。コアがArmなので、CMSISベースのライブラリ、Arm Keil MDKやIAR Embedded Workbenchといった商用ツール、豊富なRTOS・ミドルウェアがそのまま使えます。一方でタイマやアナログなどの周辺機能、産業向けの長期供給体制はルネサスの流儀そのままです。
本記事では、RAファミリの各シリーズの位置づけを整理したうえで、公式開発環境であるe2 studioとFSP(Flexible Software Package)を使った開発の流れを、実際のコード例(Lチカ・UARTエコーバック)とともに解説します。
弊社はルネサス系(RX・RL78・H8)とArm系(STM32等)の両方で20年超の受託開発実績があり、既存ルネサス資産を持つお客様のRA移行のご相談にも対応しています。実績の詳細は 組込み開発実績 をご覧ください。
RA0/RA2/RA4/RA6/RA8 各シリーズの守備範囲
RAファミリは性能・用途別に5つのシリーズで構成されています。ルネサス公式の位置づけを整理すると次のとおりです。
| シリーズ | コア | 最大動作周波数 | 位置づけ・主な用途 |
|---|---|---|---|
| RA0 | Cortex-M23 | 32MHz | コスト最重視のバリューライン。超低消費電力で、小型家電・簡易制御などBOMコスト削減が効く用途 |
| RA2 | Cortex-M23 | 64MHz | エントリライン。低消費電力とコストのバランス。RL78の32bit移行先候補としてもよく検討される |
| RA4 | Cortex-M4(FPU付き)/ M33 | 100MHz | 低消費電力と機能のバランス型ミドルレンジ。M33品はTrustZone対応でセキュアIoT端末に向く |
| RA6 | Cortex-M4(FPU付き)/ M33 | 240MHz | ハイパフォーマンス帯の主力。Ethernet等の通信インターフェース統合が最も充実。産業機器・ゲートウェイ向け |
| RA8 | Cortex-M85(+M33のデュアルコア品あり) | 最大1GHz (製品により360MHz〜1GHz) |
最上位。Helium(ベクトル拡張)対応でDSP/ML処理に強い。グラフィックス(RA8D1)、モーター制御(RA8T1)等の特化品も展開 |
注目のRA8シリーズ:業界初のCortex-M85搭載
RA8シリーズは業界で初めてArm Cortex-M85コアを採用したマイコン群で、RA8M1/RA8D1/RA8T1は480MHz動作で3000 CoreMark超(6.39 CoreMark/MHz)の性能を公称しています。Cortex-M85はHelium(MVE:M-Profile Vector Extension)に対応しており、Cortex-M7比でDSP・機械学習処理を最大4倍高速化できるとされています。さらにエントリライン(RA8E1:360MHz、RA8E2:480MHz)が2024年に、1GHzのCortex-M85+250MHzのCortex-M33を組み合わせられるデュアルコア品RA8M2が2025年に加わり、Ethos-U55 NPU搭載品を含めてエッジAI用途への展開が進んでいます。
「マイコンでここまで要るのか」と思われるかもしれませんが、エッジ側での画像・音声のAI推論、モーターの高度なセンサレス制御、HMI(グラフィックス)といった用途では、従来はマイコン+外付けDSPや小型Linux SoCで組んでいた構成を1チップに収められる可能性があり、選定の幅が大きく広がっています。
RAファミリは同一シリーズ内で機能・ピン互換性が高く、小型品の周辺機能は大型品のサブセットになるよう設計されています。「まずRA4で作り、性能が足りなければRA6へ」といったスケールアップがしやすいのも、ファミリとして統一されたFSP(後述)があるおかげです。
FSP(Flexible Software Package)とは
FSP(Flexible Software Package)は、RAファミリ用の公式ソフトウェアパッケージです。STM32でいうSTM32Cube(HAL+CubeMX)、RXでいうFITモジュール+Smart Configuratorに相当するもので、次の要素で構成されます。
- BSP(Board Support Package):起動処理・クロック初期化・ピン設定などデバイス/ボード依存部分
- HALドライバ:UART・I2C・SPI・タイマ・ADC等のペリフェラルドライバ。
r_sci_uart、r_ioportのようにモジュール単位で追加する - RTOSサポート:FreeRTOSとAzure RTOS(現Eclipse ThreadX)の両方を公式サポート
- ミドルウェア:USB(CDC/HID/MSC)、TCP/IP(MQTT対応)、Mbed TLS/NetX Duo Secure等のセキュリティスタック
FSPとe2 studioはルネサスデバイス向けに無償で、FSPはソースコードがGitHubで公開されています。中身を追える・差分を確認できる・issueを検索できるという点は、受託開発で「ドライバの挙動を最後まで説明する」必要がある弊社のような立場では非常にありがたいポイントです。
FSPのHALドライバの考え方
FSPのAPIは「R_モジュール名_操作」という命名で統一されています。たとえばSCI(Serial Communication Interface)をUARTとして使う場合は R_SCI_UART_Open() / R_SCI_UART_Write() / R_SCI_UART_Read() / R_SCI_UART_Close() という4つが基本APIです。
もう一つの特徴がインターフェースと実装の分離です。UARTには共通インターフェース(uart_api_t)が定義されており、実装モジュール(従来SCI向けの r_sci_uart、新しいSCI_B搭載グループ向けの r_sci_b_uart 等)を差し替えても、アプリケーション側の考え方は共通です。デバイスを乗り換えても資産を活かしやすい構造になっています。
同じ「UART」でも、MCUグループによって使うモジュールが r_sci_uart か r_sci_b_uart かが異なります(関数プレフィックスも R_SCI_UART_ / R_SCI_B_UART_ と変わります)。FSP ConfiguratorのStacksタブに表示される候補が、そのデバイスで使える正しいモジュールです。
e2 studioでプロジェクトを作成する
e2 studioはEclipseベースのルネサス公式IDEで、RA向けにはGCC/LLVMツールチェーンが同梱されます。RAプロジェクトの新規作成は次の流れです。
- File → New → RA C/C++ Project → Renesas RA を選択
- 使用する評価ボード(EK-RA6M4等)またはデバイス型番を選択。ボードを選ぶとピン設定の初期値が自動で入る
- ツールチェーン・RTOS(なし / FreeRTOS / Azure RTOS)を選択
- プロジェクトテンプレートを選択。「Bare Metal - Minimal」(最小構成)か「Bare Metal - Blinky」(LED点滅サンプル入り)が基本
生成されたプロジェクトは、大きく次の3つの領域に分かれます。この区別を最初に押さえておくと迷いません。
MyProject/
├── src/
│ └── hal_entry.c // ユーザーコードのエントリポイント(ここを書く)
├── ra_gen/ // FSP Configuratorが生成(編集禁止・再生成で上書き)
├── ra_cfg/fsp_cfg/ // Stacksタブの設定が反映されるヘッダ群
├── ra/ // FSP本体(BSP・HALドライバのソース)
└── configuration.xml // FSP Configuratorの設定ファイル
ユーザーコードは src/hal_entry.c の hal_entry() に書きます。ra_gen/ 以下は「Generate Project Content」のたびに再生成されるため、直接編集してはいけません。STM32CubeMXの「USER CODE BEGIN/END」コメント方式と違い、生成コードとユーザーコードがディレクトリで完全に分離されているのがFSP流です。
FSP Configuratorでペリフェラルを設定する
プロジェクトの configuration.xml を開くと、GUIのFSP Configurationビューが立ち上がります。画面下部にタブが並んでおり、役割は次のとおりです。
| タブ | 役割 |
|---|---|
| Summary | プロジェクトの構成要素の一覧 |
| BSP | デバイス・ボード設定(スタックサイズ、ヒープ等) |
| Clocks | クロックツリーをグラフィカルに設定 |
| Pins | ピン機能の割り当て(競合は自動チェック) |
| Interrupts | ユーザー定義ISRの追加 |
| Event Links | ELC(イベントリンクコントローラ)の設定 |
| Stacks | FSPモジュール(ドライバ・ミドルウェア)の追加と設定 |
| Components | 選択済みモジュールの一覧 |
UARTを追加する実際の手順
例として、SCIチャネルをUARTとして追加する手順です。
- Stacksタブで HAL/Common を選択し、New Stack をクリック
- ドライバ一覧から Connectivity → UART (r_sci_uart) を選択
- Propertiesビューで設定:インスタンス名(
g_uart0)、チャネル番号、ボーレート(115200等)、Callback関数名(例:user_uart_callback) - Pinsタブで該当チャネルのTXD/RXDピンを割り当て(ボード選択済みなら初期設定済みのことが多い)
- 右上の Generate Project Content ボタンをクリック
Generateすると、ra_gen/ に g_uart0(インスタンス)、g_uart0_ctrl(制御構造体)、g_uart0_cfg(設定構造体)が生成されます。ユーザーコードからはこの生成済み構造体を使ってAPIを呼ぶだけです。ボーレートやビット構成の計算はすべてConfiguratorが済ませてくれます。
実装例:Lチカ と UARTエコーバック
例1:LED点滅(IOPORT+ソフトウェアディレイ)
まずは定番のLチカです。GPIOは r_ioport モジュールで、R_IOPORT_PinWrite() にポート/ピン定数(BSP_IO_PORT_xx_PIN_yy)と出力レベルを渡します。
#include "hal_data.h"
void hal_entry(void)
{
/* LEDピンはボードの回路図で確認して読み替えてください */
const bsp_io_port_pin_t led_pin = BSP_IO_PORT_04_PIN_00;
/* ピン設定は生成済みの R_BSP_WarmStart() 内で R_IOPORT_Open() が
実行済みのため、hal_entry で再度 Open する必要はありません */
while (1)
{
R_IOPORT_PinWrite(&g_ioport_ctrl, led_pin, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, led_pin, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
}
}
R_BSP_SoftwareDelay() はBSPが提供するビジーループ遅延で、単位は BSP_DELAY_UNITS_SECONDS / MILLISECONDS / MICROSECONDS から選べます。本番コードではタイマ(GPT/AGT)割り込みに置き換えるべきですが、動作確認には十分です。
例2:UARTエコーバック(割り込み+コールバック)
次に、受信した文字をそのまま送り返すエコーバックです。FSPのUARTドライバは割り込み駆動で、受信・送信完了などのイベントはConfiguratorで登録したコールバック関数に通知されます。コールバックには uart_callback_args_t が渡され、p_args->event でイベント種別、p_args->data で受信データ(UART_EVENT_RX_CHAR 時)を参照します。
#include "hal_data.h"
static volatile bool g_rx_flag = false;
static volatile uint8_t g_rx_byte = 0U;
static volatile bool g_tx_done = true;
/* FSP ConfiguratorのCallback欄に指定した関数名。ISRから呼ばれる */
void user_uart_callback(uart_callback_args_t *p_args)
{
switch (p_args->event)
{
case UART_EVENT_RX_CHAR: /* 1文字受信 */
g_rx_byte = (uint8_t) p_args->data;
g_rx_flag = true;
break;
case UART_EVENT_TX_COMPLETE: /* 送信完了 */
g_tx_done = true;
break;
default:
break;
}
}
void hal_entry(void)
{
fsp_err_t err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
if (FSP_SUCCESS != err)
{
__BKPT(0); /* 初期化失敗:デバッガで停止 */
}
static const uint8_t msg[] = "RA UART echo start\r\n";
g_tx_done = false;
R_SCI_UART_Write(&g_uart0_ctrl, msg, sizeof(msg) - 1U);
while (1)
{
if (g_rx_flag && g_tx_done)
{
g_rx_flag = false;
static uint8_t s_tx_byte; /* Writeはノンブロッキングのため送信完了まで生存する変数に */
s_tx_byte = g_rx_byte;
g_tx_done = false;
R_SCI_UART_Write(&g_uart0_ctrl, &s_tx_byte, 1U); /* エコーバック */
}
}
}
R_SCI_UART_Write() は送信完了を待たずに戻ります。送信中に次のWriteを発行しないよう、上のコードのように UART_EVENT_TX_COMPLETE をフラグで受けてから次を送るのが基本です。STM32のブロッキング版 HAL_UART_Transmit() の感覚で連続呼び出しすると失敗するので注意してください。
まとまった長さの受信には R_SCI_UART_Read() で受信バッファと長さを指定し、完了を UART_EVENT_RX_COMPLETE で受ける方法が使えます。公式のサンプル集(GitHubの ra-fsp-examples リポジトリ)には評価ボードごとのUART・I2C・タイマ等のサンプルプロジェクトが揃っており、最初の動作確認はここから始めるのが近道です。
評価ボードの選び方(EK / FPB)
RAの公式評価ボードは主にEK(Evaluation Kit)とFPB(Fast Prototyping Board)の2系統です。いずれもオンボードデバッガを搭載しており、ボード1枚とUSBケーブルだけで開発を始められます。
| 型番 | 搭載MCU(コア) | 特徴 |
|---|---|---|
| FPB-RA4E1 | RA4E1(Cortex-M33) | 低価格の試作向けボード。SEGGER J-Link OB相当のデバッガ回路内蔵。Arduino UNO/Pmodコネクタ、全ピンにスルーホールでアクセス可 |
| FPB-RA6E1 | RA6E1(Cortex-M33) | FPB-RA4E1の上位性能版。構成は同様で、無線モジュールやセンサー接続のサンプルも提供 |
| EK-RA6M4 | RA6M4(Cortex-M33、TrustZone対応) | RA6のフル機能評価キットの定番。Ethernet MAC搭載MCUで、FSP+e2 studioでの産業・IoT機器評価に向く |
| EK-RA8M1 | RA8M1(Cortex-M85 480MHz) | Cortex-M85/Heliumの性能評価用。コードフラッシュ最大2MB・SRAM 1MB。Pmod/Arduino/mikroBUS/Qwiic/Groveと接続コネクタが充実 |
選び方の目安は次のとおりです。
- まず触ってみたい・コスト重視:FPBシリーズ。数千円クラスで入手でき、J-Link OB内蔵なので追加投資ゼロで書き込み・デバッグまで完結
- 製品搭載予定のMCUグループを本格評価:EKシリーズ。Ethernetや各種センサーコネクタなど周辺回路が揃っており、ミドルウェア込みの評価がしやすい
- DSP/AI・グラフィックスの性能検証:EK-RA8M1(またはグラフィックス向けEK-RA8D1)でHeliumの効果を実測
評価ボードのオンボードデバッガは便利ですが、量産基板では SWD/JTAG 経由で SEGGER J-Link、Renesas E2/E2 Lite エミュレータ等を使うのが一般的です。基板設計の段階でデバッグコネクタ(SWD)を必ず確保しておきましょう。
RX・RL78との違いと、RAを選ぶ判断基準
ルネサスの既存ユーザーにとって最大の関心事は「RX・RL78とどう使い分けるか」でしょう。まず技術面の違いを整理します。
| 項目 | RA | RX | RL78 |
|---|---|---|---|
| コア | Arm Cortex-M(M23/M4/M33/M85) | ルネサス独自RXコア(32bit CISC) | ルネサス独自(16bit) |
| 主なIDE | e2 studio / IAR / Keil MDK(CS+は非対応) | e2 studio / CS+ | e2 studio / CS+ |
| コンパイラ | GCC / LLVM / IAR / Arm Compiler | CC-RX / GCC 等 | CC-RL / LLVM 等 |
| ドライバ/コード生成 | FSP(FSP Configurator) | FITモジュール+Smart Configurator | コード生成/Smart Configurator |
| エコシステム | Armの標準資産(CMSIS、RTOS、ミドルウェア)が広く使える | ルネサス独自・国内実績豊富 | ルネサス独自・低消費電力の定番 |
既存RX/RL78資産を持つ会社がRAを検討する判断基準
弊社がお客様と選定する際は、概ね次の基準で整理しています。
- 派生開発・改版が中心 → RX/RL78続行:実績あるコード・治具・ノウハウの価値は大きく、コア変更のリスクを取る理由がなければ既存ファミリの継続が合理的です。RXもRL78も現行で新製品が出ており、すぐに困ることはありません
- 新規設計でセキュリティ要件がある → RAが有力:TrustZone(Cortex-M33/M85)によるセキュア/ノンセキュア分離など、セキュリティを最初から作り込む設計はRAの得意分野です
- Armエコシステム・人材を重視 → RA:STM32等のArm経験者がそのまま戦力になり、CMSIS対応のライブラリや商用RTOS・ミドルウェアの選択肢も広がります。採用市場でも「Arm Cortex-M経験者」は独自コア経験者より圧倒的に見つけやすいのが実情です
- DSP/エッジAI性能が必要 → RA8:Helium対応のCortex-M85クラスは独自コア系にはない選択肢です
- 周辺機能の互換性は個別確認:コアは変わっても、SCI・タイマ等の周辺機能の「思想」はルネサス共通で移行の心理的障壁は低めです。ただしレジスタ互換ではないため、ドライバ層はFSPで書き直しになります
なお、さらに古いH8/SHからの移行を検討されている場合は H8/H8Sマイコン移行ガイド も参考にしてください。移行先の選択肢としてRXと並びRAも有力になっています。
STM32経験者から見たRA
STM32からRAに入るエンジニアは多く、実際、概念の対応関係を押さえればキャッチアップは速いです。
| STM32での概念 | RAでの対応物 | 補足 |
|---|---|---|
| STM32CubeIDE | e2 studio | どちらもEclipseベースで操作感は近い |
| STM32CubeMX | FSP Configurator(e2 studio内蔵) | ピン・クロック・ペリフェラルをGUI設定しコード生成 |
| HALドライバ(HAL_UART_Transmit等) | FSPモジュール(R_SCI_UART_Write等) | FSPは割り込み駆動が基本。ブロッキング版APIに頼らない設計 |
| HAL_UART_RxCpltCallback() | Configuratorで登録するコールバック+uart_callback_args_t | イベント種別をswitchで振り分ける |
| USER CODE BEGIN/END コメント | src/ と ra_gen/ のディレクトリ分離 | 生成コードとユーザーコードが混ざらないのはFSPの利点 |
| ST-LINK | SEGGER J-Link OB(評価ボード内蔵)/ E2エミュレータ | SWDデバッグという点は同じ |
体感として大きな違いは2つです。第一に、FSPは生成コードを一切手で触らせない設計のため、CubeMXでありがちな「USER CODEコメントの外に書いて再生成で消えた」事故が起きません。第二に、FSPのAPIは非同期(割り込み駆動)が基本で、STM32 HALのようなブロッキング版・割り込み版・DMA版の3兄弟という構成ではありません。最初は戸惑いますが、慣れるとイベント駆動で統一されている分、設計は素直になります。
まとめ
この記事のまとめ
- RAファミリはルネサスのArm Cortex-M系主力。RA0/RA2(M23・エントリ)〜RA4/RA6(M4/M33・主力)〜RA8(M85/Helium・最上位)の5シリーズ構成
- FSPは無償・GitHubでソース公開のドライバ/ミドルウェア群。FreeRTOS/Azure RTOS対応で、APIはR_SCI_UART_Write()のような統一命名
- 開発フローは「RA C/C++ Project作成 → FSP ConfiguratorのStacksタブでモジュール追加 → Generate Project Content → hal_entry.cに実装」
- 入門はFPBシリーズ(J-Link OB内蔵・低価格)、本格評価はEKシリーズが定番
- 既存RX/RL78資産があるなら無理に乗り換える必要はない。新規設計でセキュリティ・Armエコシステム・エッジAI性能を重視するならRAが有力
RAマイコンを使った新規開発、RX・RL78・H8からの移行検討でお困りのことがあれば、弊社にお気軽にご相談ください。デバイス選定から設計・実装・量産対応まで、20年超のマイコン開発実績で一貫してサポートします。
RAマイコンの試作・量産設計、既存ルネサス資産(RX・RL78・H8)からの移行、FSPベースのドライバ開発まで 組込み制御・マイコン開発 として対応しています。
Renesas RA / RX / RL78 の受託開発・移行支援
RAマイコンの新規開発、FSPベースのドライバ・RTOS設計、RX・RL78・H8からのリプレースまで、ルネサス系20年超の受託開発実績で一貫対応します。デバイス選定のご相談からお気軽にどうぞ。
よくある質問(FAQ)
RAファミリとRXファミリはどちらを選ぶべきですか?
既存のRX資産(コード・治具・ノウハウ)を活かす派生開発ならRXの継続が合理的です。一方、新規設計でArmエコシステム(ツール・ミドルウェア・エンジニア確保)やTrustZone等のセキュリティ機能を重視する場合はRAが有力です。RXの詳細は Renesas RXマイコン入門 をご覧ください。
FSP(Flexible Software Package)は無償で使えますか?
はい。FSPとe2 studioはルネサスデバイス向けに無償で利用でき、FSPのソースコードはGitHubで公開されています。HALドライバに加え、FreeRTOSとAzure RTOSのサポート、USB・TCP/IP・Mbed TLSなどのミドルウェアも含まれます。
STM32の開発経験はRA開発に活かせますか?
活かせます。STM32CubeMXに相当するのがe2 studio内蔵のFSP Configurator、HALドライバに相当するのがFSPのHALモジュール(R_SCI_UART_Write() 等)です。ピン設定・クロック設定・コード生成という開発フローはほぼ同じ発想で、Cortex-Mコアなのでデバッグ手法(SWD、CMSIS)も共通です。
RAマイコンの開発にCS+は使えますか?
使えません。CS+が対応するのはRH850・V850・RX・RL78・78K系で、RAファミリは対象外です。RAの開発環境はe2 studio(GCC/LLVM同梱)のほか、RA Smart Configuratorを併用したIAR Embedded WorkbenchやArm Keil MDKが利用できます。
RA入門用の評価ボードはどれを選べばよいですか?
低コストに始めるならFPB(Fast Prototyping Board)シリーズ(FPB-RA6E1、FPB-RA4E1等)がおすすめです。J-Link OB相当のデバッガ回路を内蔵し、追加ツールなしで書き込み・デバッグができます。フル機能評価ならEKシリーズ(EK-RA6M4、EK-RA8M1等)を選びます。
RA8シリーズのコアは何ですか?AI処理はできますか?
RA8シリーズはArm Cortex-M85コアを採用し、Helium(MVE)によるDSP/ML処理の高速化に対応します。360〜480MHz品に加え、1GHz Cortex-M85+250MHz Cortex-M33のデュアルコア品(RA8M2)や、Ethos-U55 NPU搭載品も展開されており、エッジAI用途にも使えます。