組み込みソフトウェアを開発する上で、ソフトウェアの動作する環境が必要です。本稿では、Windows PC 1台でソフトウェアのデバッグおよび動作確認を可能にする「Virtual Starter Kit」について紹介します。
近年の組み込みソフトの肥大化は著しく、製品開発のうちソフトウェア開発の占める割合も大きくなっています。ソフトウェアの効率的なデバッグ・テストが急務の中、高価な測定機器は必要な台数をそろえられないのが実情です。今までは、ICEなどでメモリの値やレジスタの値を基にデバッグし「たぶん、大丈夫」というソフトウェアを実装し、測定機器や外部デバイスのつながった環境で動作確認していました。ソフトウェアのバグの大部分は、このように動かせば、すぐに分かる「初期デバッグ」に集中します。しかし、従来の実機を使ったデバッグでは、開発者1人当たり1台のデバッグ環境が準備できなければ、環境の取り合いになってしまい開発効率がなかなか上がりません。
この問題を解決するために登場したのがスパンションの「Virtual Starter Kit」です。Virtual Starter Kitは、組み込みソフトウェア開発者向けに作られたWindowsPC1台で動作するマイコンシミュレーション環境で、波形を確認しながらの初期デバッグはもちろん、ペリフェラルのパラメータ調整などにも利用できます。
無償で提供されている評価版を利用してみましょう。
スパンションのVirtual Starter KitのWebページ(図1)へアクセスします。Virtual Starter Kitに関する資料や仕様書も同Webページからダウンロードすることができます。
ページ下方「評価版」の表内「Spansion_VSK_MB9B510R.zip」(図2:1)をクリックします。
使用許諾(図3:1)をよく読み、必要事項(図3:2)を記入し、同意ボタン(図3:3)を押します。
使用許諾に同意するとVirtual Starter Kit評価版がダウンロード(図4:1)できます。
ダウンロードしたzipファイルを展開するだけでインストール作業は完了です(図5)。
ファイルが正しく展開されていることを確認するために粗動作確認をします。
「 \Spansion_VSK_MB9B510R\VirtualStarterKit\VirtualStarterKit.bat 」を実行します。
FM3 Simulatorが図6のように、UARTモデルへターミナルプログラムが接続されるまで待ちつづけます。
ターミナルプログラム(TeraTermなど)を図7のような接続設定でFM3 Simulatorに接続します。
Host :localhost(図7:1)
TCP port# :1204(図7:2)
Service :Other(図7:3)
すると、GUI等含め図8のようにVirtual Starter Kitが起動します。
Virtual Starter Kit評価版は、図9に示すシステム構成になっています。
※評価版では、システム構成を変更することができません。製品版を利用することでシステム構成の変更が可能になります。
Virtual Starter Kitが正しく動作していることを確認するため、図10に示す外部割込みGUIのボタンを押してください(複数あるGUIウィンドウの内、タイトルバーに「INT0-7」と書かれたウィンドウ(図10:1)が外部割込みGUIです)。
押したボタンに応じて割込みが発生したことを通知するメッセージがターミナルプログラムウィンドウに表示されます(図11はbit2 → bit4 → bit7の順番に押した例)。
動作確認ができたら、図12に示す通りFM3 Simulatorウィンドウのxボタンを押して終了してください。
本稿では、FM3マイコンのペリフェラル(ベースタイマ)を利用して任意のPWM信号を出力する組み込みソフトウェアを作成します。ソフトウェアの処理フローは図13の通りです。
Virtual Starter Kitを利用してソフトウェアの初期デバッグをするところに主眼を置くため、PWM信号についての詳細や、Start up処理、ベースタイマ利用方法などについては説明しません。詳細は、スパンションで準備しているアプリケーションノートなどを参考にしてください。
今回はStart up処理記述や、IDEの設定があらかじめ行われているテンプレートプロジェクトを利用してソフトウェアを書いていきます。テンプレートプロジェクトはFM3ファミリのサンプルプログラムダウンロードのページからダウンロードすることができます(図14)。
Virtual Starter Kit評価版の対象マイコンはFM3 TYPE4(MB9B510Rシリーズ)です。
TYPE4の表内「MB9B510Rシリーズ Template Project」を選択します(図15:1)。
※執筆時点では「 mb9b510r-series-201408.zip 」でした。最新版を入手してください。
使用許諾(図16:1)をよく読み、必要事項(図16:2)を記入し、同意ボタン(図16:3)を押します。
使用許諾に同意するとMB9B510Rシリーズ テンプレートプロジェクトがダウンロードできます(図17:1)。
ダウンロードしたzipファイルを展開します。
IDEはIARシステムズ社のEWARMを利用してソフトウェア開発することにします(EWARMは事前にインストールしておいてください)。展開した\mb9b510r-series-201408\mb9bf51xr_template-v18\example\IAR\mb9bf51xr_template.ewwをダブルクリックしてIDEを起動します(図19)。
この状態で、クロックの設定などStart up処理に続いてmain関数がコールされるソフトウェアのプロジェクトが起動されます。あとは、main関数の中身を書き換えるだけで任意のソフトウェアが記述できるようになっています。
それでは、処理フロー「初期化処理」から「無限ループ」までのソースコードをmain関数に記述します。テンプレートプロジェクトのmain関数を削除して、下記の通りのmain関数に書き換えてください。
int32_t main(void) { /* PWMの設定 */ #define PERIOD 100.0 /* 周期100usec */ #define DUTY 60.0 /* デューティ60% */ /* |← 60% →| |← 60% →| */ /* : : : : */ /* _|~~~~~~~~~|______|~~~~~~~~~|______|~~~~~~~~~|_・・・ */ /* : : : */ /* |← 100usec →|← 100usec →| */ // // ローカル変数定義 // uint16_t tmcr = 0U; uint8_t tmcr2 = 0U; uint16_t period = 0U; uint16_t duty = 0U; float clock = 72000000.0; /* 周辺クロック 72MHz */ float tmpVal = 0.0; // // 初期化処理 // /* PWM出力のリロケート */ FM3_GPIO->PFR4 = FM3_GPIO->PFR4 | 0x0001; /* Unuse P40 */ FM3_GPIO->DDR4 = FM3_GPIO->DDR4 | 0x0001; /* Output BaseTimer */ FM3_GPIO->EPFR04 = (FM3_GPIO->EPFR04 & 0xFFFFFFF0) | 0x00000004; /* Use TIOA0_0 */ /* ベースタイマ設定 */ FM3_BT0_PWM->TMCR = 0U; /* ベースタイマ初期化 */ tmcr2 = (uint16_t)0U; /* カウントクロックφ */ tmcr = ((uint16_t)0 << 12) | /* カウントクロックφ */ ((uint16_t)0 << 11) | /* 再起動禁止 */ ((uint16_t)0 << 10) | /* パルス波形通常出力 */ ((uint16_t)0 << 8) | /* トリガ入力無効 */ ((uint16_t)1 << 4) | /* 16ビットPWMタイマモード */ // 出力波形の極性を反転にしています。 // ((uint16_t)0 << 3) | /* 正:出力極性:通常(初期出力:L -> デューティ一致:H -> アンダーフロー:L) */ ((uint16_t)1 << 3) | /* 誤:出力極性:反転(初期出力:H -> デューティ一致:L -> アンダーフロー:H) */ ((uint16_t)0 << 2) | /* 連続動作 */ ((uint16_t)0 << 1) | /* カウント動作禁止 */ ((uint16_t)0 << 0); /* カウント動作停止 */ FM3_BT0_PWM->TMCR = tmcr; /* タイマ制御レジスタ設定 */ FM3_BT0_PWM->TMCR2 = tmcr2; /* タイマ制御レジスタ設定 */ FM3_BT0_PWM->STC = 0U; /* 割込み禁止 */ // // PWM波形計算 // /* 周期 */ tmpVal = PERIOD / ( 1000000.0 / clock ); period = (uint16_t)tmpVal; /* デューティ比 */ tmpVal = tmpVal * DUTY / 100.0; duty = (uint16_t)tmpVal; // // PWM波形出力開始 // FM3_BT0_PWM->PCSR = period; /* 周期設定 */ FM3_BT0_PWM->PDUT = duty; /* デューティ設定 */ FM3_BT0_PWM->TMCR = FM3_BT0_PWM->TMCR | ((uint16_t)1 << 1); /* カウント動作許可 */ FM3_BT0_PWM->TMCR = FM3_BT0_PWM->TMCR | ((uint16_t)1 << 0); /* カウント動作開始 */ // // 無限ループ // while(1){ __WFI(); /* Wait For Interrupt(割込み待ち) */ } }
上のソフトウェアは周期100usec(H60% L40%)のPWM出力をさせることを意図したものです。ただし、バグが挿入してあり出力が反転してHとLのデューティ比が逆になるようにしてあります。このソフトウェアをVirtual Starter Kit評価版を利用してデバッグしていきます。
ソフトウェアをデバッグするためには、FM3 SimulatorにIDEを接続し、目的の信号(PWM出力信号)を確認する必要があります(図20)。
3-1.IDE接続方法
Virtual Starter Kit評価版とIDEの接続は、FM3 SimulatorのGDBサーバへIDEを接続することで実現します。
デバッグ用の実行バイナリを生成するためにワークスペースウィンドウの構成ドロップダウンメニューから「MB9BF512R_Debug」を選択します(図21:1)。
次にプロジェクトのオプションをVirtual Starter Kit評価版用の設定に変更します(図22:1)。
Virtual Starter Kit評価版のリセットベクタの配置先は、コアのデフォルト位置になります。カテゴリ「リンカ」(図23:1)の「デフォルトのオーバーライド」のチェックを外し(図23:2)、デフォルト配置に設定します。
Virtual Starter Kit評価版はデバッガの接続をGDBサーバで行います。
カテゴリ「デバッガ」(図24:1)の「ドライバ」をGDBサーバに設定(図24:2)します。
次にGDBサーバへの接続設定を行います。
カテゴリ「GDBサーバ」(図25:1)のホスト名をlocalhost、ポート番号を1234に設定(図25:2)します。
実行バイナリイメージファイルを生成するためプロジェクトのすべてを再ビルドします(図26:1)。
FM3 Simulatorの設定を変更します。
「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\cpu.ini 」をテキストエディタで編集します。
3-2.PWM出力信号確認方法
信号トレース機能を利用して、VCDフォーマットファイルの出力を行います。そのVCDフォーマットファイルを既存のビューアで表示しPWM出力信号を確認します。
信号トレースファイルの出力先を設定するために、「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\svcd.ini 」をテキストエディタで編集します(図28:1)。
トレースする信号の選択は「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\trace.ini 」の修正で行います。今回はPWM信号をトレースしたいので信号名「TIOA0」をONに修正します(図29:1)。
Virtual Starter Kit評価版でトレース可能な信号の一覧を表1に示します。
ペリフェラル | トレース可能信号 | ペリフェラル | トレース可能信号 | |
---|---|---|---|---|
電源 | VCC | マルチファンクション シリアル |
SINx | |
AVCC | SOTx | |||
AVRH | SCKx | |||
AVSS | 多機能タイマ | DTTIxX | ||
ADC | ADTG_x | FRCKx | ||
ANxx | ICxx | |||
BaseTimer | TIOAx | RTOxx | ||
TIOBx | DTIFx | |||
外部割込み | INTxx | クアッドカウンタ | AINx | |
NMIX | BINx | |||
GPIO | Pxx | ZINx | ||
リセット | INITX | クロック | Xx | |
外部バス | EXTBUS | XxA | ||
CROUT | ||||
注:“ x ”(小文字エックス)にはチャネル番号やポート番号などが入ります |
VCDフォーマットファイルのビューアは既存のものを利用します。今回はオープンソースソフトウェアの、GTKWaveを利用します。
http://sourceforge.net/projects/gtkwave/files/から最新のGTKWaveをダウンロードします(執筆時点での最新版は、gtkwave-3.3.61-bin-win32でした)。インストールは、ダウンロードしたzipファイルを展開するだけです。展開した「 \gtkwave\bin\gtkwave.exe 」をダブルクリックすると、GTKWaveを起動することができます(図30)。
3-3.Virtual Starter Kitを利用したデバッグ手順
全ての準備が整いましたので、Virtual Starter Kit評価版を利用してデバッグしましょう。
手順は以下になります。
3-3-1.Virtual Starter Kit起動
「 \Spansion_VSK_MB9B510R\VirtualStarterKit\VirtualStarterKit.bat 」を実行します。
FM3 Simulatorが図31のように、UARTモデルへターミナルプログラムが接続されるまで待ちつづけます。
3-3-2.ターミナルプログラムをFM3 Simulatorに接続
TeraTermなどターミナルプログラムを図32のような接続設定でFM3 Simulatorに接続します。
Host :localhost(図32:1)
TCP port# :1204(図32:2)
Service :Other(図32:3)
すると、GUIなど含めてVirtual Starter Kitが起動し、FM3 SimulatorはIDEからのデバッグ接続を待ちます。
3-3-3.IDEをFM3 Simulatorに接続
IDEを起動して、あらかじめ準備しておいた実行バイナリイメージファイルをダウンロードしてデバッグします(図33:1)。
3-3-4.デバッグ実行開始
ダウンロードが完了すると、デバッガはデバッグ開始待ち状態でブレーク(図34:1)します。
デバッグ実行すると、Virtual Starter Kitは、シミュレーションを開始し、PWM信号をトレースファイルに出力します。
3-3-5.波形確認
GTKWaveを起動したWindow内に信号トレースファイルをドラッグアンドドロップします。
するとGTKWaveは図35のように信号トレースファイルを読み込みます。
PWMの波形を確認するために以下の操作を行います。
ペリフェラルの「BTIMER」(図36:1)を選択した後、信号の「TIOA0」(図36:2)を選択し「Append」(図36:3)ボタンを押す。
信号波形が表示されたら、「+」「−」ボタン(図36:4)を押してタイムスケールを調整する。
それでは、PWM信号波形を確認しましょう。現在のソフトウェアが出力する信号波形は以下のようになっています。周期は、100usecで意図した通りですが、Hの区間が40usecということで、40%になっています。
原因を確認するために、IDEのブレークボタン(図38:1)を押してみます。
すると、無限ループ内でブレーク(図38:2)し、ペリフェラルのレジスタに設定した値を確認することができます(レジスタ表示に限らず、メモリダンプ、変数のウオッチも可能です)。周期を設定したPCSRレジスタ値(0x1C20)とデューティ比を設定したPDUTレジスタ値(0x10E0)の比を計算すると、59.75%とソフトウェアとしては正しく計算した値を設定していることが分かります(図38:3)。そこで他のレジスタ設定値を確認すると、タイマ制御レジスタ(TMCR)の出力極性ビット(OSEL)が反転(1)設定になっていることが確認できます(図38:4)。
それではソフトウェアを修正するために一度、デバッグ実行を停止して、ソースを修正し(図39:1)再ビルドして、同様の手順でデバッグ実行を行います。
修正後のソフトウェアが出力する波形は図40のようになります。PWM波形を解析してみると、意図した通り周期100usec、H60%のPWM波形が得られていることが確認できました。これでデバッグが完了です。
レジスタへの設定値も確認するために、IDEのブレークボタン(図41:1)を押してみます。
先ほどと同様、無限ループ内でブレーク(図41:2)します。タイマ制御レジスタ(TMCR)の出力極性ビット(OSEL)が通常(0)設定になっていることが確認できます(図41:3)。
このように、初期デバッグ時は、動作確認することができれば、すぐに分かるバグが大半です。しかし動作確認できない(信号を確認できない)環境では、なかなかバグに気付くことができません。Virtual Starter Kitは、WindowsPC1台で動作確認まで実施することが可能です。高価な計測機器(オシロスコープやロジックアナライザなど)も評価ボードもICEさえも必要ありません。初期デバッグには強い味方になるツールです。
製品版Virtual Starter Kitを利用すると、マイコンにつながるデバイスのモデルも一緒にシミュレーションすることができます。システム環境が再現されますので、フィードバックループ処理のパラメータ調整などもできます。
一例として、水をヒーターで設定温度にあたためるアプリケーションの開発を以下に紹介します。
図42のような構成のシステムを作成し、水をあたためるパワーの計算にフィードバックループ処理が入っています。
この環境を準備することで、ソフトウェアのPID制御用各定数を水温の変化を確認しながら調整することが可能になります。
まだまだ、シミュレータを利用したソフトウェア開発の歴史は浅く、今後期待されている分野です。Virtual Starter Kitも現在はFM3ファミリのみですが、スパンションではFM4ファミリ、FM0+ファミリへの展開も計画しています。効率的なソフトウェア開発のためにVirtual Starter Kitの活用をおススメします。
Copyright © ITmedia, Inc. All Rights Reserved.
提供:Spansion Inc.(スパンション)
アイティメディア営業企画/制作:EE Times Japan 編集部/掲載内容有効期限:2014年11月7日
大容量かつ機能安全適合が求められる車載環境に特化して設計されたSemper NORフラッシュが、次世代ADASシステムのさらなる進化に向けて東芝の先進運転支援システムViscontiファミリに採用。
12月9日13時(アメリカ東部時間)よりハンズオンワークショップを開催。超低電力かつ柔軟性と安全性を兼ね備えたPSoC 6 MCUの他、Modus 2.0とArm Mbedを用いてクラウド接続のIoTエッジノードの開発方法を解説します!
Modus Toolbox 2.0では、1つのプラットフォームでPSoC MCUとBLE、Wi-Fi、MeshなどCypressソリューションの設計が可能。MbedやFreeRTOSもサポートしており、GitHubでサンプルコードのダウンロードが可能
メインストリームおよびエントリーレベルのノートPC/デスクトップPC向けに、コスト効率に優れたシングルポートUSB-Cコントローラーを発表!従来のUSB Type-AポートからUSB Type-Cポートに移行する必要があるシステムに最適。
多くのHMIが容量センシング技術と誘導センシング技術に移行しています。サイプレスのCapSense容量センシングとMagSense誘導センシングを活用して、HMIアプリケーションの設計方法を解説します。ぜひご参加ください。
弊社の販売代理店よりサンプル品をオーダーすることが可能です。上記サイトより、ご希望の代理店を選択してください。
PSoCやCapSence、USBコントローラーなど、Cypress製品を使ったデザイン設計が可能なソフトウェアおよびドライバーを無償でダウンロードいただけます。
Cypress製品のあらゆるドキュメントをダウンロード可能なサイプレス ドキュメント マネージャー (CDM) を提供しています。CDMソフトウェアは上記よりダウンロードが可能です。