Special
» 2014年10月08日 10時00分 UPDATE

組み込みソフトウェア開発の革命:Virtual Starter Kitを活用した「組み込みソフトウェア初期デバッグ」のすすめ

組み込みソフトウェアを開発する上で、ソフトウェアの動作する環境が必要です。本稿では、Windows PC 1台でソフトウェアのデバッグおよび動作確認を可能にする「Virtual Starter Kit」について紹介します。

[PR/EE Times]
PR

動かせばすぐ分かる「初期デバッグ」の実情

 近年の組み込みソフトの肥大化は著しく、製品開発のうちソフトウェア開発の占める割合も大きくなっています。ソフトウェアの効率的なデバッグ・テストが急務の中、高価な測定機器は必要な台数をそろえられないのが実情です。今までは、ICEなどでメモリの値やレジスタの値を基にデバッグし「たぶん、大丈夫」というソフトウェアを実装し、測定機器や外部デバイスのつながった環境で動作確認していました。ソフトウェアのバグの大部分は、このように動かせば、すぐに分かる「初期デバッグ」に集中します。しかし、従来の実機を使ったデバッグでは、開発者1人当たり1台のデバッグ環境が準備できなければ、環境の取り合いになってしまい開発効率がなかなか上がりません。

 この問題を解決するために登場したのがスパンションの「Virtual Starter Kit」です。Virtual Starter Kitは、組み込みソフトウェア開発者向けに作られたWindowsPC1台で動作するマイコンシミュレーション環境で、波形を確認しながらの初期デバッグはもちろん、ペリフェラルのパラメータ調整などにも利用できます。

Virtual Starter Kitを使ってみよう

 無償で提供されている評価版を利用してみましょう。

1.まずはVirtual Starter Kitのインストール!
  ――ダウンロード〜インストール〜粗動作確認――

 スパンションのVirtual Starter KitのWebページ(図1)へアクセスします。Virtual Starter Kitに関する資料や仕様書も同Webページからダウンロードすることができます。

tt1410EIKI_001.png 図1 Virtual Starter KitのWebページ

 ページ下方「評価版」の表内「Spansion_VSK_MB9B510R.zip」(図2:1)をクリックします。

tt1410EIKI_002.png 図2 Virtual Starter Kit評価版

 使用許諾(図3:1)をよく読み、必要事項(図3:2)を記入し、同意ボタン(図3:3)を押します。

tt1410EIKI_003.png 図3 Virtual Starter Kit評価版の使用許諾画面

 使用許諾に同意するとVirtual Starter Kit評価版がダウンロード(図4:1)できます。

tt1410EIKI_004.png 図4 Virtual Starter Kit評価版ダウンロード画面

 ダウンロードしたzipファイルを展開するだけでインストール作業は完了です(図5)。

tt1410EIKI_005.png 図5 Virtual Starter Kit評価版インストール画面

 ファイルが正しく展開されていることを確認するために粗動作確認をします。

 「 \Spansion_VSK_MB9B510R\VirtualStarterKit\VirtualStarterKit.bat 」を実行します。

 FM3 Simulatorが図6のように、UARTモデルへターミナルプログラムが接続されるまで待ちつづけます。

tt1410EIKI_006.png 図6 Virtual Starter KitのFM3 Simulatorによるターミナルプログラム接続待ち画面

 ターミナルプログラム(TeraTermなど)を図7のような接続設定でFM3 Simulatorに接続します。

Host :localhost(図7:1

TCP port# :1204(図7:2

Service :Other(図7:3

tt1410EIKI_007.png 図7 ターミナルプログラム接続設定画面

 すると、GUI等含め図8のようにVirtual Starter Kitが起動します。

tt1410EIKI_008.png 図8 Virtual Starter Kit評価版スクリーンキャプチャ

 Virtual Starter Kit評価版は、図9に示すシステム構成になっています。

※評価版では、システム構成を変更することができません。製品版を利用することでシステム構成の変更が可能になります。


tt1410EIKI_009.png 図9 Virtual Starter Kit評価版システム構成

 Virtual Starter Kitが正しく動作していることを確認するため、図10に示す外部割込みGUIのボタンを押してください(複数あるGUIウィンドウの内、タイトルバーに「INT0-7」と書かれたウィンドウ(図10:1)が外部割込みGUIです)。

tt1410EIKI_010.png 図10 Virtual Starter Kit評価版 外部割込みGUIウィンドウ

 押したボタンに応じて割込みが発生したことを通知するメッセージがターミナルプログラムウィンドウに表示されます(図11はbit2 → bit4 → bit7の順番に押した例)。

tt1410EIKI_011.png 図11 外部割込みが発生したことを伝えるメッセージの表示画面

 動作確認ができたら、図12に示す通りFM3 Simulatorウィンドウのxボタンを押して終了してください。

tt1410EIKI_012.png 図12 Virtual Starter Kit評価版 FM3 Simulatorウィンドウ

2.組み込みソフトウェアの準備
  ――テンプレートプロジェクトの利用〜ソフトウェアコーディング――

 本稿では、FM3マイコンのペリフェラル(ベースタイマ)を利用して任意のPWM信号を出力する組み込みソフトウェアを作成します。ソフトウェアの処理フローは図13の通りです。

tt1410EIKI_013.png 図13 PWM信号出力ソフトウェア処理フロー

 Virtual Starter Kitを利用してソフトウェアの初期デバッグをするところに主眼を置くため、PWM信号についての詳細や、Start up処理、ベースタイマ利用方法などについては説明しません。詳細は、スパンションで準備しているアプリケーションノートなどを参考にしてください。

 今回はStart up処理記述や、IDEの設定があらかじめ行われているテンプレートプロジェクトを利用してソフトウェアを書いていきます。テンプレートプロジェクトはFM3ファミリのサンプルプログラムダウンロードのページからダウンロードすることができます(図14)。

tt1410EIKI_014.png 図14 FM3ファミリのサンプルプログラムダウンロードページ

 Virtual Starter Kit評価版の対象マイコンはFM3 TYPE4(MB9B510Rシリーズ)です。

 TYPE4の表内「MB9B510Rシリーズ Template Project」を選択します(図15:1)。

※執筆時点では「 mb9b510r-series-201408.zip 」でした。最新版を入手してください。


tt1410EIKI_015.png 図15 MB9B510Rシリーズ テンプレートプロジェクト

 使用許諾(図16:1)をよく読み、必要事項(図16:2)を記入し、同意ボタン(図16:3)を押します。

tt1410EIKI_016.png 図16 MB9B510Rシリーズ テンプレートプロジェクト使用許諾画面

 使用許諾に同意するとMB9B510Rシリーズ テンプレートプロジェクトがダウンロードできます(図17:1)。

tt1410EIKI_017.png 図17 MB9B510Rシリーズ テンプレートプロジェクトダウンロード画面

 ダウンロードしたzipファイルを展開します。

tt1410EIKI_018.png 図18 MB9B510Rシリーズ テンプレートプロジェクト展開画面

 IDEはIARシステムズ社のEWARMを利用してソフトウェア開発することにします(EWARMは事前にインストールしておいてください)。展開した\mb9b510r-series-201408\mb9bf51xr_template-v18\example\IAR\mb9bf51xr_template.ewwをダブルクリックしてIDEを起動します(図19)。

tt1410EIKI_019.png 図19 EWARM起動画面

 この状態で、クロックの設定など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(割込み待ち) */
  }
}
main関数コード

 上のソフトウェアは周期100usec(H60% L40%)のPWM出力をさせることを意図したものです。ただし、バグが挿入してあり出力が反転してHとLのデューティ比が逆になるようにしてあります。このソフトウェアをVirtual Starter Kit評価版を利用してデバッグしていきます。

3.デバッグしよう
  ――IDE接続〜信号トレース設定〜デバッグ――

 ソフトウェアをデバッグするためには、FM3 SimulatorにIDEを接続し、目的の信号(PWM出力信号)を確認する必要があります(図20)。

tt1410EIKI_020.png 図20 Virtual Starter Kit評価版とIDEの接続および、信号トレース

3-1.IDE接続方法

 Virtual Starter Kit評価版とIDEの接続は、FM3 SimulatorのGDBサーバへIDEを接続することで実現します。

 デバッグ用の実行バイナリを生成するためにワークスペースウィンドウの構成ドロップダウンメニューから「MB9BF512R_Debug」を選択します(図21:1)。

tt1410EIKI_021.png 図21 ワークスペースウィンドウの構成ドロップダウン画面

 次にプロジェクトのオプションをVirtual Starter Kit評価版用の設定に変更します(図22:1)。

tt1410EIKI_022.png 図22 プロジェクトのオプション設定画面

 Virtual Starter Kit評価版のリセットベクタの配置先は、コアのデフォルト位置になります。カテゴリ「リンカ」(図23:1)の「デフォルトのオーバーライド」のチェックを外し(図23:2)、デフォルト配置に設定します。

tt1410EIKI_023.png 図23 リンカ設定画面

 Virtual Starter Kit評価版はデバッガの接続をGDBサーバで行います。

 カテゴリ「デバッガ」(図24:1)の「ドライバ」をGDBサーバに設定(図24:2)します。

tt1410EIKI_024.png 図24 デバッガ設定画面

 次にGDBサーバへの接続設定を行います。

 カテゴリ「GDBサーバ」(図25:1)のホスト名をlocalhost、ポート番号を1234に設定(図25:2)します。

tt1410EIKI_025.png 図25 GDBサーバ接続設定画面

 実行バイナリイメージファイルを生成するためプロジェクトのすべてを再ビルドします(図26:1)。

tt1410EIKI_026.png 図26 実行バイナリイメージファイルのビルド画面

 FM3 Simulatorの設定を変更します。

 「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\cpu.ini 」をテキストエディタで編集します。

  • FM3 Simulatorで実行する実行バイナリイメージを上のプロジェクトで生成した実行バイナリイメージ「 mb9bf51xr_template.out 」に変更します(図27:1
  • GDBサーバを有効にするためにGDB_STUB_PORTのコメントアウト記述子「;」を削除します(図27:2
tt1410EIKI_027.png 図27 FM3 Simulator設定変更画面

3-2.PWM出力信号確認方法

 信号トレース機能を利用して、VCDフォーマットファイルの出力を行います。そのVCDフォーマットファイルを既存のビューアで表示しPWM出力信号を確認します。

 信号トレースファイルの出力先を設定するために、「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\svcd.ini 」をテキストエディタで編集します(図28:1)。

tt1410EIKI_028.png 図28 信号トレースファイル出力設定画面

 トレースする信号の選択は「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\trace.ini 」の修正で行います。今回はPWM信号をトレースしたいので信号名「TIOA0」をONに修正します(図29:1)。

tt1410EIKI_029.png 図29 トレースする信号の選択画面

 Virtual Starter Kit評価版でトレース可能な信号の一覧を表1に示します。

表1 Virtual Starter Kit評価版でトレース可能な信号名一覧
ペリフェラル トレース可能信号 ペリフェラル トレース可能信号
電源 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)。

tt1410EIKI_030.png 図30 GTKWave起動画面

3-3.Virtual Starter Kitを利用したデバッグ手順

 全ての準備が整いましたので、Virtual Starter Kit評価版を利用してデバッグしましょう。

 手順は以下になります。

  1. Virtual Starter Kit起動
  2. ターミナルプログラムをFM3 Simulatorに接続
  3. IDEをFM3 Simulatorに接続
  4. デバッグ実行開始
  5. 波形確認

3-3-1.Virtual Starter Kit起動

 「 \Spansion_VSK_MB9B510R\VirtualStarterKit\VirtualStarterKit.bat 」を実行します。

 FM3 Simulatorが図31のように、UARTモデルへターミナルプログラムが接続されるまで待ちつづけます。

tt1410EIKI_031.png 図31 Virtual Starter KitのFM3 Simulatorによるターミナルプログラム接続待ち画面

3-3-2.ターミナルプログラムをFM3 Simulatorに接続

 TeraTermなどターミナルプログラムを図32のような接続設定でFM3 Simulatorに接続します。

Host :localhost(図32:1

TCP port# :1204(図32:2

Service :Other(図32:3

tt1410EIKI_032.png 図32 ターミナルプログラム接続設定画面

 すると、GUIなど含めてVirtual Starter Kitが起動し、FM3 SimulatorはIDEからのデバッグ接続を待ちます。

3-3-3.IDEをFM3 Simulatorに接続

 IDEを起動して、あらかじめ準備しておいた実行バイナリイメージファイルをダウンロードしてデバッグします(図33:1)。

tt1410EIKI_033.png 図33 IDEのデバッグ接続画面

3-3-4.デバッグ実行開始

 ダウンロードが完了すると、デバッガはデバッグ開始待ち状態でブレーク(図34:1)します。

tt1410EIKI_034.png 図34 デバッグ開始待ちブレーク画面

 デバッグ実行すると、Virtual Starter Kitは、シミュレーションを開始し、PWM信号をトレースファイルに出力します。

3-3-5.波形確認

 GTKWaveを起動したWindow内に信号トレースファイルをドラッグアンドドロップします。

 するとGTKWaveは図35のように信号トレースファイルを読み込みます。

tt1410EIKI_035.png 図35 GTKWaveトレースファイル読み込み直後の画面

 PWMの波形を確認するために以下の操作を行います。

 ペリフェラルの「BTIMER」(図36:1)を選択した後、信号の「TIOA0」(図36:2)を選択し「Append」(図36:3)ボタンを押す。

 信号波形が表示されたら、「+」「−」ボタン(図36:4)を押してタイムスケールを調整する。

tt1410EIKI_036.png 図36 PWM信号表示画面

 それでは、PWM信号波形を確認しましょう。現在のソフトウェアが出力する信号波形は以下のようになっています。周期は、100usecで意図した通りですが、Hの区間が40usecということで、40%になっています。

tt1410EIKI_037.png 図37 PWM信号の波形解析画面(バグあり状態)

 原因を確認するために、IDEのブレークボタン(図38:1)を押してみます。

 すると、無限ループ内でブレーク(図38:2)し、ペリフェラルのレジスタに設定した値を確認することができます(レジスタ表示に限らず、メモリダンプ、変数のウオッチも可能です)。周期を設定したPCSRレジスタ値(0x1C20)とデューティ比を設定したPDUTレジスタ値(0x10E0)の比を計算すると、59.75%とソフトウェアとしては正しく計算した値を設定していることが分かります(図38:3)。そこで他のレジスタ設定値を確認すると、タイマ制御レジスタ(TMCR)の出力極性ビット(OSEL)が反転(1)設定になっていることが確認できます(図38:4)。

tt1410EIKI_038.png 図38 デバッグのためにブレークした画面

 それではソフトウェアを修正するために一度、デバッグ実行を停止して、ソースを修正し(図39:1)再ビルドして、同様の手順でデバッグ実行を行います。

tt1410EIKI_039.png 図39 ソフトウェアの修正画面

修正後のソフトウェアが出力する波形は図40のようになります。PWM波形を解析してみると、意図した通り周期100usec、H60%のPWM波形が得られていることが確認できました。これでデバッグが完了です。

tt1410EIKI_040.png 図40 PWM信号の波形解析画面(バグなし状態)

 レジスタへの設定値も確認するために、IDEのブレークボタン(図41:1)を押してみます。

 先ほどと同様、無限ループ内でブレーク(図41:2)します。タイマ制御レジスタ(TMCR)の出力極性ビット(OSEL)が通常(0)設定になっていることが確認できます(図41:3)。

tt1410EIKI_041.png 図41 正常動作確認のためにブレークした画面

 このように、初期デバッグ時は、動作確認することができれば、すぐに分かるバグが大半です。しかし動作確認できない(信号を確認できない)環境では、なかなかバグに気付くことができません。Virtual Starter Kitは、WindowsPC1台で動作確認まで実施することが可能です。高価な計測機器(オシロスコープやロジックアナライザなど)も評価ボードもICEさえも必要ありません。初期デバッグには強い味方になるツールです。

Virtual Starter Kit活用例:システム環境でパラメータ調整

 製品版Virtual Starter Kitを利用すると、マイコンにつながるデバイスのモデルも一緒にシミュレーションすることができます。システム環境が再現されますので、フィードバックループ処理のパラメータ調整などもできます。

 一例として、水をヒーターで設定温度にあたためるアプリケーションの開発を以下に紹介します。

 図42のような構成のシステムを作成し、水をあたためるパワーの計算にフィードバックループ処理が入っています。

tt1410EIKI_042.png 図42 Virtual Starter Kit貯湯器システム構成例
tt1410EIKI_043.png 図43 水温計算モデルとソフトウェアのフィードバックループ模式図

 この環境を準備することで、ソフトウェアのPID制御用各定数を水温の変化を確認しながら調整することが可能になります。

今後の展開

 まだまだ、シミュレータを利用したソフトウェア開発の歴史は浅く、今後期待されている分野です。Virtual Starter Kitも現在はFM3ファミリのみですが、スパンションではFM4ファミリ、FM0+ファミリへの展開も計画しています。効率的なソフトウェア開発のためにVirtual Starter Kitの活用をおススメします。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.


提供:Spansion Inc.(スパンション)
アイティメディア営業企画/制作:EE Times Japan 編集部/掲載内容有効期限:2014年11月7日

ニュースリリース/トピックス/イベント

JEDEC策定の新しいeXpanded SPIインターフェース規格に、サイプレスのHyperBus (8ビット シリアル メモリ インターフェース) が採用。HyperBusベースのメモリで車載、産業、IoTアプリケーションに高速ブートインスタントオン機能を容易に実装可能に。

サイプレスの6チャネル車載PMICとFL-S NORフラッシュメモリソリューションがデンソー社のステレオ画像センサに採用!小型フットプリントと世界クラスの性能を備えており、センサ全体の電力調整と、高速なプログラム実行を実現

3Dグラフィックスと最大6個の従来型メーターのハイブリッド インスツルメント クラスターおよびヘッドアップ ディスプレイ向けに、より大容量のメモリを搭載。アプリケーションの実現に向けて、高い拡張性とコスト効率を両立します。

業界で最も低消費電力で柔軟性の高いMCUであるPSoC 6 BLEに、Bluetooth Low Energyコネクティビティ機能とセキュリティ機能を搭載したPSoC 6 BLE Pioneer Kitを一般リリース開始しました!統合開発環境であるPSoC Creator 4.2も入手可能になりました。

新しいCYW43012 Wi-Fi/Bluetooth無線接続コンボソリューションは、消費電力を現行品と比べて受信モードで最大70%、スリープモードで最大80%削減し、バッテリー寿命を延長。高品質の接続性能と通信距離拡大により、電波環境の改善に貢献します。

無償サンプル/ツール

弊社の販売代理店よりサンプル品をオーダーすることが可能です。上記サイトより、ご希望の代理店を選択してください。

PSoCやCapSence、USBコントローラーなど、Cypress製品を使ったデザイン設計が可能なソフトウェアおよびドライバーを無償でダウンロードいただけます。

Cypress製品のあらゆるドキュメントをダウンロード可能なサイプレス ドキュメント マネージャー (CDM) を提供しています。CDMソフトウェアは上記よりダウンロードが可能です。

販売代理店(順不同)

RSSフィード

All material on this site Copyright © 2005 - 2017 ITmedia Inc. All rights reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.