本初心者講座は、ルネサスエレクトロニクス社(以降、ルネサス)のArm® Cortex®-Aプロセッサ搭載マイクロプロセッサ RZファミリを初めて使うエンジニア向けの「Cortex-A|RZファミリ編」です。(注意:本講座では、マイクロプロセッサをプロセッサと称して説明いたします)
本初心者講座のゴールは次の3つです。
- マイコンとマイクロプロセッサ・RZファミリの違いを習得する。
- マイクロプロセッサ・RZファミリの機能と性能を理解する。
- マイクロプロセッサ・RZファミリの使い方を理解する。
本講座は次の5回シリーズの連載で構成されます。
第1回:RZ/Aシリーズから始めよう!
第2回:RZ(プロセッサ)とマイコンの違い
第3回:マイコンユーザーがRZファミリに移行する手法
第4回:マイコンとプロセッサの垣根を超える
第5回:RZファミリの紹介
今回は、第4回の「マイコンとプロセッサの垣根を超える」です。マイコンユーザーがプロセッサに移行する、または、プロセッサユーザーがマイコンに移行する際に直面する具体的な問題を取り上げて、解決策を説明します。マイコンはRAファミリのRA6M5を、プロセッサはRZ/Aシリーズを題材にします。
課題
1. マイコンとプロセッサの具体的な使い方の違いを習得する。
第2回と第3回は、概説論だったが、今回は具体論として使い方の違いを学習する。
2. マイコンユーザーがRZ/Aシリーズに移行する際の具体的方法を習得する。
ルネサスマイコンRA6M5を題材として、RZ/Aシリーズへ移行する具体的手順を学習する。
3. RZ/Aシリーズユーザーがマイコンに移行する際の具体的方法を習得する。
RZ/AシリーズからRA6M5へ移行する具体的手順を学習する。
マイコンユーザーがプロセッサに移行する際に直面する具体的な問題
(1)マイコンからプロセッサへの移行
最初に、マイコンを使っているユーザーがRZ/Aシリーズに移行する際に直面する問題点を挙げます。
①ハードウェア
- 大容量RAM内蔵のRZ/Aシリーズ以外(RZ/A3ULなど)は、外付けDRAMが必要。
- 外付けフラッシュ・メモリが必要。
- 基板上のDRAM、フラッシュ・メモリ、プロセッサ本体など用に電源(レギュレータなど)が必要。
②ソフトウェア
- ブートローダ、OS、ユーザープログラムのカスタマイズが必要。
- MMU(Memory Management Unit:メモリ管理ユニット)に対応したメモリ管理ソフトウェアが必要。
③開発環境
- RZファミリ用の統合開発環境(e2studioなど)が必要。
(2)ハードウェア
①外付けDRAM(DDR4)
RZ/AシリーズのRZ/A3UL以外では、大容量RAMを内蔵しているので、外付けRAMは不要です。したがって、DRAMコントローラも必要ありません。内蔵のRAMの使い方は、マイコンと同じですので、ユーザーは統合開発環境に任せて使用することができます。
RZ/Aシリーズ製品のなかでRZ/A3ULは、外付けRAMが必要です。図1に、RZ/A3ULとDDR4の接続例のイメージを示します。詳細な配線情報は、各デバイスのデータシートを参考にしてください。
DDR4はRZファミリに内蔵されている DDR3L/DDR4 SDRAMメモリコントローラ(MEMC)によって制御されます。このインターフェ―スは、最大DDR4-1600 SDRAM、16ビットのデータ バス幅、およびインラインECCをサポートします。また、インターフェースはJEDEC STANDARD JESD79-4Cに準拠しています。
②外付けフラッシュ・メモリ
RZ/AシリーズはSPIインターフェースを用いて、シリアルフラッシュ・メモリを接続できます。SPIインターフェースは、内蔵のSPIマルチI/Oバスコントローラ(以下、SPIBSC)で行います。SPIBSCは、SSPIマルチI/O バス空間に接続されたシリアルフラッシュに対し制御信号を出力し、シリアルフラッシュ・メモリを直接アクセスすることができます。
SPIBSCは、1チャネルあたりでシリアルフラッシュ(データ幅 1/2/4 ビット)を直接1個または2個接続することができます。シリアルフラッシュを1個と2個接続したシステム構成例を図2と図3に示します。
RZ/A2MおよびRZ/A3ULでは、Octaメモリコントローラーを搭載していますので、OctaFlash™ および OctaRAM™ にアクセスすることができます。
(注)OctaFlash™ 及びOctaRAM™ はMacronix International Co., Ltd.の商標です。
シングル データ レート(SOPI: Single Octa I/O)とダブル データ レート(DOPI: Double)の両方をサポートします。Octaペリフェラルインターフェースのブロック図を図4に示します。
③外付けメモリ用の電源回路
プロセッサ自身や、外付けフラッシュ・メモリや外付けRAMには電源回路が必要です。電源回路は、アプリケーションによって様々ですので、色々な回路が考えられます。例えば、非同期整流タイプの降圧コンバータ回路を使う場合、基本回路構成は図5(a)の様になります。図5(b)~(c)には、構成部品の特性を変えた場合の回路シミュレーションの例を示します。
非同期整流タイプ以外でも、同期整流コンバータ回路やDC/DCコンバータ回路も用いられています。最初に使用する電源のタイプを決めます。電源回路の構成が決まったら、構成部品のショットキーバリアダイオードや、インダクタ、コンデンサ、MOSFET(金属酸化膜半導体電界効果トランジスタ: Metal-Oxide-Semiconductor Field-Effect Transistor)などの最適なパラメータを検討する必要があります。
参考までに、電源回路の構成部品を選択する際の注意事項を表1(a),(b)に示します。
(3)ソフトウェア
①ブートローダ
RZ/Aシリーズには大容量RAMが内蔵されていますので、ユーザープログラムを内蔵RAMにダウンロードして実行すれば、外部フラッシュなど必要せずに、マイコンの様に使えます。ただし、内蔵RAMは電源を切ると、ダウンロードされたプログラムは消えてしまいます。
実際のアプリケーションで使用する場合は、外部フラッシュ・メモリなどからプログラムをブートして実行する必要があり、そのためブートプログラムが必要になります。
RZ/A1LU グループには「 シリアルフラッシュ・メモリからのブート例」というアプリケーションノートが提供されています。実際にブートモードを設計する際は、こちらを参照してください。
RZ/A1グループのブートモードを表2に示します。
ブートモード0で言うCS0空間とは、0x0000_0000~0x03FF_FFFFの64MBの空間です。
チップセレクト信号0(CS0)で選択されます。ブートモード1はSPIに接続されたシリアルフラッシュ・メモリから、ブート2ではSDホストインタフェースから、ブートモード3では、MMCホストインタフェースからブートします。それぞれのブートモードで使用されるハードウェアを表3に示します。
(A)ブートモード0
パワーオンリセット解除後、CS0空間に接続されたメモリのH’0000_0000番地からプログラムを実行します。
(B)ブートモード1
SPIマルチI/Oバス空間に接続されたシリアルフラッシュ・メモリからブートするモードです。動作内容を図6に示します。
(C)ブートモード2
SDコントローラ内蔵NANDフラッシュ・メモリからブートするモードにも対応します。
(D)ブートモード3
MMCコントローラ内蔵NANDフラッシュ・メモリからブートするモードにも対応します。
②OS (Operation System)
マイコンではOSを使用しない場合もありますが、プロセッサは、ほとんどの場合でOSが使われます。マイコンで使用していたOSをRZ/Aシリーズに移植するというよりは、e2studioのGUIツール(FSPコンフィグレータ)上の操作で、新たにOSを作った方が簡単です。e2studioのFSPコンフィグレータを使うとFreeRTOS、AzureRTOSのRTOS機能を実装できます。
RTOSを利用したプログラムを開発する場合は、サンプルプログラムをベースにすることが一番の近道ですRZ/A2Mグループでは FreeRTOS™ ソフトウェア開発キットが提供されており、この中にRTOSを使ったサンプルプログラムがありますので、それらをベースにコンポーネントを追加していくと比較的楽にプロジェクトを作れます。
しかし、ここではe2studioのGUIツール(FSPコンフィグレータ)で最初からRTOSを使ったプロジェクトを作ってみます。
通常のプロジェクトを作る手順で、File → New → Renesas C/C++ Project → Renesas RZに移動し、Templates for Renesas RZ Projectのウィンドウまで行きます。GNU for Renesas RZ C/C++ Executable Projectを選択します。次のウィンドウでプロジェクト名(ここではRZFreeRTOS)を入力します。
New GCC for Renesas RZ Executable ProjectウィンドウでRTOSを選択します。すると「FreeRTOSのパッケージが見つかりませんでした。」というエラーメッセージが出ますので、Manage RTOS Versionsをクリックします。次のウィンドウでダウンロード可能なRTOSのModuleが表示されますので、選択してダウンロードをクリックすると、免責事項のウィンドウが出てきます。Acceptをクリックするとダウンロードが始まります。PCとネット環境に依存しますが、ダウンロードには時間がかかります。
次にターゲットデバイスを選択します。
次のウィンドウはSelect Coding Assistant Settingsです。終了をクリックすると、FSP Configuration Perspectiveに切り替えるか聞かれます。許可するとプロジェクトが開きます。
これでFreeRTOSのプロジェクトの作成準備が整いましたので、ここからユーザーはユーザープログラムをコーディングしていきます。
③MMUの設定ソフトウェア
基本的にマイコンにはMMUがありません。Cortex-Mシリーズの場合はMPU(Memory Protection Unit:メモリ保護ユニット)がMMUの代替機能ですが、MMUと完全互換ではありません。そのため、MMUに対応したプログラムを新規作成しなければなりません。
まずはMMUの基礎知識を説明します。
(A)メモリタイプ
メモリタイプとして3種類を定義しており、用途によって設定しなければなりません。
プログラムやデータを配置する領域は、ノーマルメモリでキャッシュを有効に設定し、ペリフェラルを配置する領域は、デバイスメモリまたはストロングリオーダメモリに設定します。RZ/Aグループの場合、メモリタイプ(ノーマルメモリ・デバイスメモリ・ストロングリオーダメモリ)・キャッシュ・アクセス権の設定はMMUで行います。
(B)キャッシュの設定
SCTLR(システム制御レジスタ)のIビットとCビットで命令キャッシュとデータキャッシュを有効にできますが、データキャッシュはMMUを有効にしないと使用できません。
(C)MMUの設定方法
e2studioのFSPコンフィギュレータ機能で簡単に設定できます。プロジェクト・エクスプローラーのなかの.scfgを選択すると概説が現れます。概説の下のタグでMMUを選択するとMMU設定画面が現れます。MMU設定を使用するにチェックを入れて、設定したいアドレス名(アドレス領域)を選択し、右側にある編集をクリックすると、指定したアドレス領域の編集画面が現れます。右の画面でMMUレイアウトのタグをクリックすると、現在設定されているメモリの状態を確認できます。
また、MMUビューを用いることで、RZ/A向けプロジェクトのデバッグ時にMMUの設定を確認することができます。レジスタの設定内容のほか、仮想/物理アドレスの対応状態なども確認することができます。
MMUビューは、メニューのRenesasViews → デバッグ → MMUから開きます。
(4)開発環境
①パソコン(PC)
RZファミリでは、Windows上のe2studioが使えます。そのため、PCのOSはWindowsに、統合開発ソフトはe2studioに統一すれば、マイコンのRAファミリからRZファミリに移行の際には、PCや開発ソフトなどの使い回しができて、最も効率の良い開発環境を選択することができます。
②統合開発環境
RZファミリを使うために必要な開発環境は、次の4つです。
- コンパイラ
- 統合開発ソフト(e2studio)
- RZ搭載の開発ボード(ユーザーのアプリケーションボード)
- デバッグ用プローブ(JTAG-ICE)
(A)コンパイラ
コンパイラにはGNU C/C++を使います。GNU C/C++を ダウンロードできます。
最新版のGNUARM-NONE v16.01 Windows Toolchain(ELF)をダウンロードします。ダウンロードにはユーザー登録が必要ですので、必要な情報を入力して登録してください。
ダウンロードしたファイルgcc-8.3.0.202311-GNURX-ELF.exeを実行すると、インストールが始まります。「すべてのユーザー用にインストール(A)(推奨)」を選択して、「次へ」を何回か押します。
(B)統合開発ソフト(e2studio)
e2studioにはWindowsでもLinuxでも使えるバージョンが提供されていますので、ダウンロードする際にWindows版を ダウンロードします。ダウンロードにはユーザー登録が必要です。
すると、setup_e2_studio_202y-xx_x.zip(yは年、xはバージョン情報)がダウンロードされます。
setup_e2_studio_202y-xx_x.zipを展開するとsetup_e2_studio_202y-xx_x.exeが現れますので、実行します。
インストールタイプを選び、デバイスはRAファミリとRZファミリにチェックを入れます。これでどちらのファミリにも使えることができるようになります。
ライセンスに同意し、ショートカットを作るかどうかを選択すると、インストールの準備が整いますので、「インストール」をクリックして、インストールを始めます。
途中で、インストールするファイルを指定するWizardなど色々出てきますが、基本的に「次へ」を押していけば、段階的に進みます。
結構時間がかかりますが、インストール完了画面が現れたら、インストール完了です。
(C)RZ搭載の開発ボード(ユーザーのアプリケーションボード)
ユーザーのアプリケーションを開発する際に、試作ボードを作ると思いますが、その試作ボードを作る際にルネサスが提供している評価キットを使用すると、回路構成や仕様部品などの参考になり、開発期間を短縮できます。RZ/Aシリーズの評価キットを表4に示します。
《参考URL》
(D)デバッグ用プローブ(JTAG-ICE)
ルネサスでは、基本的にデバッグ用プローブは、SEGGER J-Linkを使います。その他ではIAR Systems殿のI-Jet、Arm殿のULINKなどがあります。表5に各社のデバッグ用プローブをまとめます。ユーザーは、使用する統合開発ツールによって、選択します。
プロセッサユーザーがマイコンに移行する際に直面する具体的な問題
(1)プロセッサからマイコンへの移行
ここでは、プロセッサ(RZファミリ)を使っているユーザーがマイコン(RAファミリ)に移行する際に直面する問題点を挙げます。
①ハードウェア
- 外付けDRAMやDRAMコントローラは不要。
- 外付けフラッシュ・メモリは不要。
- 電源は、基本的にマイコン本体用の電源のみ(USBなどの特殊機能用電源は別途必要)。
②ソフトウェア
- ブートローダは作成不要。
- OS(必要に応じてカーネル)とユーザープログラムはカスタマイズが必要。
- MMUに対応したメモリ管理はMPUに変更。
③開発環境
- Windows用の統合開発環境(e2studioなど)が必要。
「マイコンユーザーがプロセッサに移行する際に直面する具体的な問題」の(4)開発環境の②統合開発環境の(B)統合開発ソフト(e2studio)の章を参照してください。
(2)ハードウェア
①外付けDRAM(DDR4)
マイコンの場合、内蔵RAMを使うので、基本的に外付けDRAMやDRAMコントローラは不要です。もし、RAM容量が不足する場合は外付けしますが、外部メモリを接続する機能が内蔵されているマイコンだけが、外付けメモリを付けることができます。
②外付けフラッシュ・メモリ
マイコンの場合は、基本的に内蔵フラッシュ・メモリを使うので、外付けフラッシュ・メモリは不要です。容量が不足する場合は、外付けしますが、その際のインターフェースは、プロセッサの場合と異なる場合が多いので、各製品のマニュアルを参照してください。
SPIインターフェースを内蔵しているマイコンでは、シリアルフラッシュ・メモリを接続できます。例えば、RA6M5ではQuad-SPI機能やOcto-SPI機能を内蔵していますので、 Quad-SPI フラッシュ・メモリやOcto-SPI フラッシュ・メモリ を接続することができます。インターフェースの構成は、「マイコンユーザーがプロセッサに移行する際に直面する具体的な問題」の(2)ハードウェアの「外付けフラッシュ・メモリ」の章を参照してください。ただし、実際に使用の際は、各製品のマニュアルの使用上の注意事項をよく確認してください。
参考URL:
https://www.renesas.com/jp/ja/document/man/ek-ra6m5-v1-users-manual
③外付けメモリ用の電源回路
基本的に、電源は、マイコン本体用の電源で十分ですが、マイコンの仕様によっては、複数の電源(レギュレータ)が必要になる場合があります。例えば、USB用の電源やLCD用電源です。また、A-Dコンバータでは参照用電源が必要になる場合があります。
レギュレータICを用いて電源回路を設計する際の注意事項は、「マイコンユーザーがプロセッサに移行する際に直面する具体的な問題」の(2)ハードウェアの③外付けメモリ用の電源回路の章を参照してください。
(3)ソフトウェア
①ブートローダ
マイコンの場合、ユーザープログラム用のフラッシュ・メモリが内蔵されていますから、プロセッサのような、起動時の外付けフラッシュ・メモリからのブートは必要ありません。統合開発ツール(JTAG-ICE)やROMライター、内蔵のブートプログラムで、一旦内蔵フラッシュ・メモリにプログラムを書き込んだら、書き換えや消去しない限り、消えません。
一方、一旦ユーザープログラムをフラッシュ・メモリに書き込み、アプリケーションに実装した後でも、内蔵の通信用インターフェースを利用して、フラッシュ・メモリを書き換えることができます。マイコンでは、この書き換え動作の事をブートと呼んでいます。使用できる通信用インターフェースは、SCIとUSBです。例として、表6にRA6M5のブートモードを示します。
②OS (Operation System)
マイコンではOSを使用しない場合もありますが、組み込みシステムに使用されるほとんどのマイコンではOSが使われています。
プロセッサからマイコンに移行する場合は、プロセッサで使用していたOSをマイコンに移植するというよりは、e2studioのGUIツール(FSPコンフィグレータ)上の操作で、新たにOSを作った方が楽です。e2studioのFSPコンフィグレータでは、FreeRTOS、AzureRTOSのRTOS機能が実装可能です。
例として、RA6M5でFreeRTOSを実装する方法の概要を説明します。プロジェクト名は「OStest」にします。通常のプロジェクトを作る手順で、File → New → Renesas C/C++ Project → Renesas RAに移動し、Build Artifact and RTOS Selectionのウィンドウまで行きます。Build Artifact SelectionでExacutbleを選択し、RTOS SelectionでFree RTOSを選択します。そして、Next をクリックします。そして、Project Template Selection という名前の画面で、FreeRTOS – Minimal – Static Allocation を選択します。
プロジェクトがコンフィギ ュレータによって生成された後、FSP Configuration Perspectiveに切り替えるか聞かれます。Perspectiveが表示されたら、Stacksタブに移動します。このタブには、HAL/共通スレッドの2つのエ ントリが表示されています。スレッド枠の1つはI / Oポート用のドライバーで、もう1つはFreeRTOS用です。上部にあるNew ThreadアイコンをクリックするとNew Threadが現れます。
Propertiesビューで新しいスレッドのプロパティを変更します。Symbolの名前をOStest_threadに、Name をOStestに変更します。その他のプロパティはデフォルト値のままにします。するとThreadの名前がOStestに変わります。
使用する機能のStackを追加します。ここでは、例としてADC(r_adc)のスタックを追加します。これは、通常のプログラム作成の過程と同じです。
左下にプロパティのタグがあるので そこでA-Dコンバータの設定をするのですが画面が狭いので境界線をつまんで上に上げてプロパティの画面を広げます
プロパティのGeneralでA-Dコンバータの仕様を設定します
- Nameはg_adc0
- 分解能は12-Bit
- AlignmentはRight
- ModeはSingle Scan
- 入力チャネルはChannel0にチェック
とします。
- Stackの設定が終わったのでプロパティの画面を小さくします。
- セマフォを使用する場合は、セマフォを追加します。
- ThreadsのOStestを選択して、強調表示し、New Objectボタンをクリックします。
- Binary Semaphoreを選ぶと、プロパティにSymbolとMemory Allocation が現れます。
- Symbolのg_new_binary_semaphore0をg_s1_semaphoreに変更し、Memory Allocation はStatic のままにしておきます。
- ウィンドウの右上隅にあるGenerate Project Contentをクリックすればコンフィギュレータは必要な設定ファイルをすべて作成しプロジェクトに追加します。
左のプロジェクト・エクスプローラーの中のscrをクリックして開けます。その中のOStest_thread_entry.cをダブルクリックして開けます。OStest_thread_entry.cをダブルクリックすると、ソースコードが表示されます。Threadのユーザーコードは、void OStest_thread_entryの記述の下に /* TODO: add your own code here */という記述がありますのでこの下に追記します。
セマフォを読み取るための行をいくつか記述し、セマフォを設定するコールバック関数を作成する必要があります。
while(1)ループ内で、いくつかのユーザーコードのステートメントを追加し、vTaskDelay(1); ステートメントを削除します。スマフォの扱いはユーザーに依存しますが、例えばwhile(1) ループ内の最後の文に、セマフォの住所と定数をパラメータとして指定した関数の呼び出しを入れます。
あとは、通常のプロジェクトを作るように、OStest_thread_entry.c とhal_entry.cにユーザープログラムを入力していきます。
参考URL: ルネサスRAファミリビギナーズガイド
③MPUの設定
Cortex-Mのメモリ管理は、MPUというオプション機能が行います。オプションと言ってもマイコンのユーザーが選択できるオプションではなく、マイコンベンダーが自社の製品に搭載するかしないかを選択できるオプションです。
MPUには次のような機能が備え付けられています。
- ユーザーアプリケーションが、OSが使用するメモリ領域を破壊することから保護する。
- プロセスを分離し、プロセッシングタスク間のデータを分ける。
- 予期せぬメモリアクセス(例:スタック破損)を検出する。
- 保護領域の属性と許可を指定できる。
マイコンベンダー向けのオプションなので、どこまでの機能が製品に実装されているかは、各製品のマニュアルを確認する必要があります。
MPUの詳細についてはAPS Academy Cortex-M編の メモリマップを参照してください
RA6M5の場合、マニュアルを確認すると、以下のように記載されています。
本MCUはバスマスタMPUを内蔵しており、全アドレス空間(0x0000_0000~0xFFFF_FFFF)を対象にマスタがアクセスするアドレスを監視しています。アクセス制御情報は、DMAC/DTCで8領域まで設定可能です。EDMACでは、4領域まで設定可能です。各領域へのアクセスの監視は本情報に従います。
これは、バスマスタになり得るDMAC, DTC、EDMAC (Ether)などのモジュールで、それぞれMPUの設定ができるという意味です。
設定項目は、次の様になります。いずれもレジスタで設定します。
- マスタメモリプロテクションセキュリティ属性
- スタートアドレス
- エンドアドレス
- アクセスの種類(領域有効、読み出し保護、書き込み保護など)
- MPUの機能の有効/無効(レジスタの書き換え保護を含)
「第4回:マイコンとプロセッサの垣根を超える」は、以上です。ここまで来れば、後はユーザーアプリケーションの仕様に沿って、プロジェクトを作って、ユーザープログラムをコーディングしていきます。次回の「第5回:RZファミリの紹介」では、RZ/Aシリーズ以外のRZファミリを紹介します。