RA4E1 Fast Prototype BoardのFreeRTOS使い方

RA4E1 Fast Prototype BoardへFreeRTOSを適用
RA4E1 Fast Prototype BoardへFreeRTOSを適用

RAファミリ評価ボードRA4E1 Fast Prototype Board (Cortex-M33/100MHz、Flash/512KB、RAM/128KB)(以降FPB)の、スイッチS1でLED2を点灯するFreeRTOS適用例を示します。RAファミリビギナーズガイド9章記載のEK-RA6M4評価キットを使った処理内容と同じです。

e2 studio 2021-10は、Project>Change Deviceで対象MCUデバイス変更機能がありますが動作しません。そこで、ガイド掲載のEK-RA6M4を手動でRA4E1へ変更し、FPBでFreeRTOSのセマフォを利用し、S1押下げ割込みとLED2トグル点灯を同期させるFreeRTOSサンプルコードを示します。

このコードを使い、前稿よりも具体的にFPBとFlexible Software Package(以降FSP)の使い方、今回は使わないTrustZoneのメリットを示すのが、本稿の目的です。

RA4E1 Fast Prototype Board(FPB)のRTOSとTrustZone

IoT MCUをクラウド接続するには、RTOSが必要です。AWS(Amazon Web Services )接続にはFreeRTOSライブラリ、Microsoft Azure接続にはAzure RTOSライブラリの利用が前提だからです。

また、クラウド接続には、TrustZoneなどハードウェアによるセキュリティ対策も要求されますので、RTOSとTrustZoneは、IoT MCUの必須2技術です。

ハードウエアセキュリティは、開発後、簡単に追加することが困難です。今回はTrustZone未使用ですが、IoTプロトタイプ開発にTrustZone内蔵Cortex-M33を用いるのは、例え未使用でも製品セキュリティ処理の具体的検討ができるなど、IoTセキュリティを開発初期から考慮した設計となるからです。

これが使わないTrustZoneのメリットです(TrustZone使用例も、いずれ投稿予定)。

本稿は、先ずFreeRTOSをFPBへ適用します。FreeRTOS新規プロジェクト作成、API生成ツールFSP設定、FSP生成ファイルへのタスク追記の順に説明します。

Step1:FreeRTOS新規プロジェクト作成

最新版e2 studio(2021-10)の新規FreeRTOSプロジェクトは、File>New>C/C++Projectとクリックし、①~⑥の手順で作成します。

FreeRTOS新規プロジェクト作成
FreeRTOS新規プロジェクト作成

②プロジェクト名は、任意です。③Boardは、PFB-RA4E1を選択します。

④TrustZone未使用時のプロジェクトを、“Flat”と呼びます。これは、TrustZone使用時、セキュアと非セキュアの2プロジェクト並存が必要となりメモリ領域を分割することに対する、平坦なメモリ使い方に起因していると思います。

※メモリ領域分割は、PCハードディスクのパーティション分割をイメージして頂ければ判り易いでしょう。例えサイバー攻撃を受けても、物理的に侵入できないメモリ領域を作り、ここへ最重要情報やソフトウェアを保存する訳です。

⑤FreeRTOSを選択します。ベアメタル(No RTOS)とAzure RTOSも選択可能です。⑥Minimalを選択し、FinishクリックでFreeRTOS(TrustZone未使用)新規プロジェクトが完成です。

各選択肢を変えると、前稿で説明した多種類の新規プロジェクトが作成できることが解ります。

Step2:Flexible Software Package(FSP)設定

Flexible Software Package (FSP)設定
Flexible Software Package (FSP)設定

新規プロジェクト作成のFinishクリックで、FSPパースペクティブオープンを聞いてきますので、開きます。

①プロジェクトSummaryが表示されます。Stacksタブを選択、②New Stackをクリックし、External IRQ Driver on r_icuを選択します。新しい外部割込みドライバがStackに追加され、③プロパティが表示されます。

FPBのユーザスイッチS1は、P205(IRQ1)に接続済みです。そこで、③プロパティのirq0をirq1、TriggerをFalling、Digital FilteringをEnable、Callbackをexternal_irq1_callbackに変更します。

次にセマフォ追加のため、④ObjectsのNew Objectsをクリックし、Binary Semaphoreを選択します。⑤プロパティSymbolをg_s1_semaphoreに変更します。

RA4E1 Fast Prototype BoardのSW1 P205(IRQ1)の確認
RA4E1 Fast Prototype BoardのSW1 P205(IRQ1)の確認

最後に、⑥pinsタブをクリックし、ユーザスイッチS1:P205(IRQ1)とIOピン割当てをGUIで確認します。

以上でFSP設定は完了です。Generate Project Contentをクリックすると、APIや割込みコールバック関数、関連ファイルが自動生成されます。

Step3:FSP生成ファイルへタスク追記

FreeRTOSセマフォ同期処理
FreeRTOSセマフォ同期処理

FSPが生成したファイル:led_thread_entry.cに上記コードを追加します。このコードは、LED初期化と無限ループ処理から構成されます。RAビギナーズガイド掲載のirq10をirq1へ変更したLEDタスクです。

コールバック関数external_irq1_callbackは、Developer AssistanceのLED Threadを開くと一番下に割込みコールバック関数が生成済みですので、これをドラッグ&ドロップして追加します。

LEDタスク追加後、ビルドしFSBへダウンロード、デバッガ起動後、再開を2回クリックして実行中の様子が上図です。FSBのS1クリックでLED2がトグル点灯します。

FreeRTOS Queueサンプルコード

前章は、RAファミリビギナーズガイド9章のEK-RA6M4評価キットFreeRTOSセマフォサンプルコードを、RA4E1 Fast Prototype Board(FPB)へ流用したコードです。変更箇所は、irq10をirq1へ変えただけです。

FSPには、FreeRTOS Queueサンプルコード:freertos_fpb_ra4e1_epも付属しています。これら2つのサンプルコードを理解すれば、セマフォとQueueを使う基本的なFreeRTOSソフトウェア開発が可能です。

FreeRTOS待合せ手段としては、セマフォ/Queue以外にもMutexやイベントグループなどの手段もあります。弊社ではFreeRTOS基礎固めを目的として、Hardware Independent FreeRTOS Exampleを応用したセマフォ/Queue活用のFreeRTOSテンプレート化を目指しています。RA/REテンプレートもこの方針で開発する予定です。

この方針で開発したNXP版FreeRTOSアプリケーションテンプレートは、コチラから概要がダウンロード可能です。

まとめ

RA4E1 Fast Prototype Board(FPB)へ、RAファミリビギナーズガイド掲載FreeRTOSサンプルコードを流用し、ユーザスイッチS1とLED2点灯をセマフォで同期させました。

FreeRTOS新規プロジェクト作成、Flexible Software Package(FSP)設定、FSP生成ファイルへのタスク追記の具体的操作手順を示しました。

ガイド9章には、更に詳細な説明がありますので、参考になります。例えば、スイッチ割込み優先度12を利用する理由、systick優先度15が予約済みであるなどです。

TrustZoneは未使用ですが、プロトタイプ開発初期からIoTセキュリティを考慮した設計ができるメリットがあります。

FSP付属Queueサンプルコードと本セマフォコードを使ってFreeRTOS基礎固め目的のRA/REテンプレート開発を進めます。

RA4E1 Fast Prototype Boardの使い方

前稿のRAファミリ評価ボードRA4E1 Fast Prototype Board(以降FPB)を入手、RA/REテンプレート検討に着手しました。

FPB開発に用いるルネサスIDE:e2 studio(以降e2)とAPI生成ツール:Flexible Software Package(以降FSP)は、NXPやSTマイクロなどのEclipseベースIDEの利用者が?に思う箇所があると思います。

ルネサスIDE:CS+ユーザでも、同様にこの?を感じると思いますので、対策と評価ボードFPBの使い方を示します。

RA4E1 Fast Prototype Boardとe2 studio
RA4E1 Fast Prototype Boardとe2 studio

e² studio

Eclipse IDEをベースとしたRAファミリ統合開発環境:IDEが、e2、API生成ツールが、FSPです。

e2は、ARMコアを含む全てのルネサスMCU開発用の新世代IDEで、古くからあるRL78ファミリやRXファミリなどのルネサス独自コア専用統合開発環境CS+の後継IDEとして登場しました。但し、CS+は、現在でもRL78/RXファミリ開発に使えます。

e2は、MCUファミリ毎にコンパイラを切替えることにより、全ルネサスMCUの共通IDEとして動作します。MCUファミリのコンパイラは、普通1種類です。ところが、RAファミリには、GNUとARM Compiler V6の2種類が用意されており、どちらも無償です。

GNUとARM Compiler V6?

e2インストール時、デフォルトでインストールされるコンパイラは、GNUです。ARM Compiler V6は、後から追加インストールが必要です。最初の?は、両コンパイラの“違いは何か”です。

次章で示すFSPやTrustZone利用に差が生じるのであれば、問題です。

ルネサス資料を探しましたが、結局、コンパイラ差は分かりません。最近では殆ど行わないアセンブラデバッグが無ければ、コンパイラはどちらでも構いませんので、デフォルトGNUで当面はOKとします。

Flexible Software Package (FSP)?

RAファミリ専用のAPI生成ツールが、FSPです。動画:Generating Your First RA FSP Project(8:25)で使い方が分かります。

Flexible Software Package構成
Flexible Software Package構成

簡単に説明すると、スタックと呼ぶ開発プロジェクトで使用するHALドライバやRTOSなどのミドルウェアパタメタをGUIで設定後、e2のGenerate Project Contentをクリックすると、Developer Assistance内に全てのAPIが自動生成され、その中から使用するAPIを、ユーザ自身でソースコード任意場所にドラッグ&ドロップする使い方です。

ソースコード任意場所にAPIを配置できるのは、親切とは言えません。NXPやSTマイクロのコード生成ツールでも、API追加箇所にコメント付きのソースコードが生成されます。しかし、FSPは、ソースコード上のどこにでもAPIを設置できます。

API使用順序、設置場所、パラメタの意味が予め解ってないと、適切なコーディングは困難でしょう。後述する多くの公式サンプルコード(スタック利用例)がありますので、これらを参考に習得する必要があります。

hal_entry.c?

e2 studioのra_genとsrcフォルダ
e2 studioのra_genとsrcフォルダ

Generate Project Contentのクリックで生成されるのがAPI本体、つまり、ra_genフォルダ内のmain.cを含むスタックのドライバ関数群です。ra_genフォルダは、FSPが生成するコードの格納場所です。

これらとは別のsrcフォルダ内に見慣れないhal_entry.cファイルがあります。srcフォルダは、ユーザが追加するコードの格納場所です。

FPB出荷時にインストール済みのquickstart_fpb_ra4e1_epプロジェクトを読むと、main.c→hal_entry.c→user_main.cとコールされ、結局、user_main.cに一般的なIDEでユーザが追記する初期設定と無限ループを記述するのが、FSPでのユーザソースコード記述作法のようです。

※一般的なIDEでユーザが追記する初期設定と無限ループについては、基本のキ3章まとめを参照してください。

quickstart_fpb_ra4e1_epのuser_main処理
quickstart_fpb_ra4e1_epのuser_main処理

readme.txt?

公式サンプルコードをe2へインポート後、readme.txtでサンプル動作内容やFPB追加配線の必要性が分かります。バグだと思いますがe2(2021-07)は、サンプルコード付属readme.txtがプロジェクト内へインポートされません。

筆者は、手動でインポートしました。例えば、sci_uart_fpb_ra4e1_epプロジェクトは、追加配線無しではTera Term動作確認ができませんので、readme.txtを読み、追加配線が必須です。

RA4E1 Fast Prototype Board(FPB)の使い方

IoT MCUの機能と消費電力を最適化したRAファミリのRA4E1グループ評価ボード:RA4E1 Fast Prototype Board(FPB)の特徴は、以下2点です。

  • TrustZone
  • 低電力動作(Sleep > Snooze > Software Standby > Deep Software Standby)
RA4E1ブロック図
RA4E1ブロック図

TrustZoneの使い方は、RAファミリビギナーズガイドの11章が参考になります。

FreeRTOS利用を含むサンプルコードはコチラ、低電力動作サンプルコードはコチラからダウンロードできます。前章のquickstart_fpb_ra4e1_epやsci_uart_fpb_ra4e1_epプロジェクトは、初めのサンプルコード内にあります。

RTOSは、IoT接続先クラウドに応じてFreeRTOSかAzure RTOSの2種から選択可能です。また、通常の低電力動作:Sleepに加え、SnoozeやDeep Software Standbyなど超低電力動作モードも備えています。

プロジェクトは、ベアメタルまたはRTOS、TrustZone利用または非利用、の各選択肢がありますので4種類、FreeRTOSかAzureの選択を加えると、合計6種類の新規プロジェクト作成方法が可能です。

つまり、IoT MCUエッジ開発で必要となる様々なプロジェクト開発に、FPBだけで対応可能です。応用範囲の広い評価ボードで、IoTプロトタイプ開発に適しています。サンプルコード内容も豊富です。

まとめ

ユーザ視点からのベンダ各社がEclipse IDEをベースIDEに使うメリットは、IDEインタフェースがEclipseに似てくるので、ベンダが変わっても同じIDE操作性が得られることです。各社IDEで異なる部分は、周辺回路設定やAPI/コード自動生成の部分に限られるのが一般的です。

これら部分に加え、RAファミリ開発に使うe2 studioとFlexible Software Package は、無償コンパイラ選択、生成APIのソース追加方法、hal_entry.cなど、一般的なEclipseベースIDE利用者にとって?が生じる箇所が多数ありました。

ルネサス資料は多いのですが、肝心の?ポイントが解りにくいとも感じました。RAファミリ開発着手時は、これらに対し慣れが必要かもしれません。そこで、備忘録として本稿を作成しました。

なお、同じく前稿で示したREファミリについては、非常に良くまとまったREマイコンの使い方がルネサスサイトより入手できます。

RA4E1 Fast Prototype Board(Cortex-M33/100MHz、Flash/512KB、RAM/128KB)は、低価格で入手性もよくTrustZoneやRTOS、低電力動作など、幅広い知識や技術が要求されるIoT MCU開発の素材として優れています

現状RAファミリ資料の纏まりは、REファミリと比べると今一歩ですが、改善されると思います。開発に必要となる技術レベルが少し高いのですが、e2 studioとFlexible Software Package (FSP)、RA4E1 Fast Prototype Board(FPB)と豊富なサンプルコードを使ったIoT MCU開発は、好奇心を満たすIoT MCU習得へ向けたお勧めの開発環境と評価ボードと言えるでしょう。

弊社ブログは、RA/REテンプレート開発を目指し、継続して関連情報を投稿します。

Windows 11アップグレード可能通知:FYI

Windows 11を実行できます
Windows 11を実行できます

10月5日リリースWindows 11アップグレード可能通知が弊社PCへ届きました。今月リリースWindows 10 21H2で運用し、1年程度の11評価結果を見てアップグレードを予定しております。ご参考まで。

IoVとIoT

IoV:Internet of VehiclesやV2X:Vehicles-to-Everything通信により、車載半導体チップとソフトウェア需要が指数関数的に増加、ユーザの自動車選択基準が、エンジンなどのメカから車載ソフトウェアへ移行しつつある、という記事がEE Timesに記載されました。

これらIoV状況が、IoTへ与える影響について考えてみました。

IoVとIoT

IoVでユーザ選択基準が車載ソフトウェアへ変化
IoVでユーザ選択基準が車載ソフトウェアへ変化

車のカタログから、エンジン特性や足回りのメカ説明が消え、スマホ連動性や運転支援など車載ソフトウェアによるサービスの説明に変ったのはここ数年です。記事によると、車の新しいユーザ選択基準になりつつあるカーエレクトロニクスが、半導体業界にとってはスマホ以来の最大チャンスだそうです。

また、「CASE」で車載半導体はどう変わるのか(2021年9月15日、EE Times Japan)でも、自動運転と電動化が今後の車載半導体動向を左右すると結論付けています。
※CASE:Connected(通信機能)、Autonomous(自動運転)、Shared&Services(共有化/サービス化)、Electric(電動化)

年々向上するユーザのソフトウェア指向を満たす車載IoV業界、COVID-19の影響で停滞気味の民生IoT業界とは雲泥の差です。

車載半導体需要予測は初めの記事数値を参照して頂くとして、両記事のポイントは、ソフトウェア差別化や付加価値追加には、カスタムチップまたは、IP(Intellectual Property)などの組込みハードウェアが効果的という点です。これらIPには、セキュリティやエッジAIなどIoTへ流用できるものが数多くあります。

従って、IoVは、結果としてIoTも牽引すると思います。

但し、世界的半導体不足が続く状況では、優先度、調達コスト、多くの数量が確実に見込めるIoVが優勢、IoTはこの影響で、しばらくチップ供給不足や停滞が続くでしょう。

停滞気味のIoT側開発者として今できることは、IoV同様、IoTソフトウェア差別化に備えることだと思います。

IoT MCUのTrustZone、SOTB

IoTの観点から、IoTソフトウェア差別化や付加価値追加のための組込みIPと言えば、ARM TrustZone内蔵Cortex-M33コア、ルネサスの新製造プロセスSOTB:Silicon On Thin Buried Oxideなどが相当します。

アクティブ消費電力とスリープ消費電力両方を減らせるSOTBプロセス(出典:ルネサスサイト)
アクティブ消費電力とスリープ消費電力両方を減らせるSOTBプロセス(出典:ルネサスサイト)

例えば、TrustZoneが、高いセキュリティ効果を発揮するのはご存知の通りですし、SOTB製Cortex-M0+搭載ルネサスREファミリは、超低スタンバイ電流により太陽光発電環境などのエナジーハーベストでも電池交換不要を実現するなどです。

SOTBは、超低消費電力動作と高速動作を両立する革新的製造プロセスです。全てのルネサスMCUへ採用すれば強力な差別化技術になると思いますが、今のところ出し惜しみなのか(!?)戦略的なのか、REファミリにのみ採用中です。

一見、ASSP:Application Specific Standard Produceのようですが、これら差別化技術は、汎用MCUに採用された時に最も効果を発揮します。

従来のエッジMCUでの単純なアナログデジタル変換に加え、セキュリティや超低電力動作などのIoT化に伴う付加機能がIoT MCUには必須です。IoT付加機能内蔵MCUが、汎用IoT MCUになります。

IoT開発者は、これらIoT付加技術を今のうちに習得しておくことが必要です。

IoVとIoTの最も大きな差は、車載と民生半導体の電源仕様でしょう。IoVは、EV(Electric Vehicle)のモータ高出力要求に伴いバッテリーが12V供給から48Vへ高電圧化しつつあり、万一の耐圧やフェイルセーフが求められます。IoTは、低電圧(≦3.3V)電源で低圧化しつつあります。

RA/REテンプレート構想

残念ながらSOTB製REファミリ評価ボードは、まだ値段が高く、個人レベルでは手が出しにくい状況です。そこで、SOTBプロセスではありませんが、REファミリとソフトウェア互換性があると思われるCortex-M33コア搭載ルネサスRAファミリを、弊社テンプレート対象にと考えています。

RAファミリは、TrustZoneでIoTセキュリティへ対応しています。また、9月22日発売のRAファミリRA4E1グループの評価ボード:RA4E1 Fast Prototype Boardは、20米ドル台と低価格です。ルネサス独自コアではないため、コンパイラFlash容量制限もありません。

FPB-RA4E1 Fast Prototyping Board(出典:クイックスタートガイド)
FPB-RA4E1 Fast Prototyping Board(出典:クイックスタートガイド)

RL78/G1xテンプレートから新しいルネサスMCUをテンプレート対象に出来なかった理由の1つが、この容量制限です。ARMコア他社同様、GNUまたはARM Compiler V6が、e2 studioでRAファミリ開発に無償で使えます。

今のところRAテンプレートは、REへも使えると考えています。ARMコア差は、CMSIS:Cortex Microcontroller System Interface Standard やHAL:Hardware Abstraction Layerで吸収できるハズだからです。

ADC、SW、LED、UART(VCOM)などのIoT MCU基本動作をRA/REテンプレート共通部分でサポートし、TrustZoneや超低電力動作などRA/RE特徴を活かす部分は、共通部分へ特徴サンプルコードを追加する方法で実現できれば嬉しいと考えています。構想段階ですが、詳細は今後投稿します。