組み込みシステムにおけるテスト設計の方法

Alexsander Tamari
|  投稿日 October 17, 2023  |  更新日 December 3, 2023
組み込みシステムのテスト

高速PCBや複雑な組み込みシステムを設計している場合でも、ある程度のテストが必要になります。高速およびRFシステムの場合、通常はVNAやスコープ測定と比較したシミュレーションが必要です。組み込みソフトウェアやファームウェアの場合、テスト手順はかなり異なる場合があります。実際、プロトタイプ設計で行うことで、テストプロセスを加速し、マルチメーターで探る必要をなくすことができることがいくつかあります。

この記事では、プロトタイプのテストとデバッグをはるかに簡単にするいくつかの簡単なコツを紹介します。これは、ソフトウェアとハードウェアの両方にテストのための設計アプローチを適用することを意味します。ヒント:組み込みシステムのテストに最適な方法は、テストパッドやテストポイントを配置するだけではありません。

組み込みハードウェアのテスト設計

PCB業界には多くのバズワードがあり、「テストのための設計」は通常、より広範なDfXバンドルにグループ化されます。多くの設計者は、組み込みコードを実行するボードのテストにアプローチする方法と同じ方法でテストのための設計に取り組みます。

これは通常、設計者が重要な信号に多くのテストポイントを配置することを意味しますが、それ以上のことはあまりありません。多くの組み込みプロトタイプは、メインプロセッサ上の考えられるすべてのものがピンヘッダーとテストポイントにルーティングされたArduino開発ボードのように見え始めます。

組み込みシステムのテスト
開発ボードは常にPCB上のピンヘッダーを標準的な接続方法としてブレイクアウトします。しかし、MCUが周辺機器や自身の信号から信号を読み取るためには、ピンを自分で配線する必要があります。

組み込みシステムボードや他のボードにピンヘッダーがあることに対して何も反対はありません。しかし、すべての信号とピンを監視しながら、ボード上でソフトウェアやファームウェアのテストとデバッグを試みるのは困難です。場合によっては、アプリケーションをテストするために実際にアプリケーションを書かなければならないこともあります。設計の機能にエラーが見られる場合、根本原因がコードにあるのか、PCBAにあるのかは常に明らかではありません。

ハードウェア側では、テストのための設計にこの簡略化されたアプローチに焦点を当てます:

  • すべてがピンヘッダーを必要とするわけではありません。実際に何かに接続する予定がある場合、または実際に測定する予定がある場合にのみ、信号をヘッダーに出します。
  • 実際に使用できるコネクタを配置します。この方法では、データ取得カード、ロジックアナライザー、オシロスコープなどに接続できます。
  • ソフトウェアでテストを行います。組み込みアプリケーションは周辺機器からの信号を読み取ることができるため、コードにテストケースを組み込むことができます。
  • 画面上でデータを見ることができます。シリアルポート、データ取得カード、または専用ソフトウェアを介してPCに接続するだけで済みます。

Ari Mahpourがテストと継続的インテグレーションについて話し合ったこれらの概念については、多く議論されています。この記事を見ることで、このアプローチについてもっと学ぶことができます。コンピュータにデータを送り返したい場合、最も簡単な方法は、プロトタイプにUSBからシリアルインターフェースを追加することです。このプロジェクトを見ることで、Zach Petersonからリンク設計ファイルを入手できます。

組み込みシステムのテスト
USB経由でアクセス可能なシリアルポートは、組み込みPCBからのデータを表示するのに非常に便利です。

組み込みソフトウェアのテストケース

次に、システムで組み込みアプリケーションを実行している場合、コードにエラーハンドリングやテストケースを含めることで、テストを迅速化することができます。ヘッダー、テストパッド、基本的なシリアルインターフェースへの接続を追加することは、組み込みボードをリアルタイムで監視するのに役立つ重要なステップです。目標は、ソフトウェアアプリケーションがハードウェアと並行してどのように動作するかを見ることです。

では、アプリケーションとハードウェアの進行状況を同時にどのように監視できるでしょうか?ソフトウェア開発者からヒントを得て、エラーハンドリングと各機能のステータスを表示するメッセージを追加します。これは、アプリケーション内の重要な機能が合格したか失敗したかを示すメッセージを表示するほど簡単なことです。すべてのエラーチェックを書き出すのには少し余分な時間がかかりますが、アプリケーション実行中にシステムが何をしているかを示す画面上のメッセージがあると、大量のデバッグを省略できます。

これは、C/C++で単純な関数(myFunction()と呼ばれる)と仮定のGPIOライブラリを使用して実装される方法の例です。gpio_init()、gpio_read()などの関数を提供する単純なGPIOライブラリを備えたプラットフォームで作業しているとしましょう:

#include
#include   // std::runtime_error用
// 仮想のGPIOライブラリ

namespace GPIO {
    void init(int pin) {
        // 指定されたピンを入力として初期化
        // この関数はプラットフォーム固有です
    }

    bool read(int pin) {
        // 指定されたピンの値(HIGHまたはLOW)を読み取る
        // HIGHの場合はtrue、LOWの場合はfalseを返す
        // この関数はプラットフォーム固有です
        return false;  // プレースホルダー、実際のハードウェアに依存します
    }
}
 

int main() {
    const int GPIO_PIN = 5;  // GPIO読み取り用のピン番号(セットアップに応じて選択)
    GPIO::init(GPIO_PIN);
    double a = 10.0, b = 2.0;
 

    // GPIO信号がHIGHの場合、bをゼロに設定
    if(GPIO::read(GPIO_PIN)) {
        b = 0.0;
    }
    try {
        double result = myFunction(a, b);
        std::cout << "結果: " << result << std::endl;
    }
    catch(const std::exception& e) {  // std::exception型の例外をキャッチ
        std::cerr << "エラー: " << e.what() << std::endl;  // エラーメッセージを表示
    }
    catch(...) {  // その他の例外のキャッチオールハンドラ
        std::cerr << "未知のエラーが発生しました!" << std::endl;
    }
    return 0;
}

 

アプリケーションが直接信号を監視している場合、そのコア機能の各ステップで結果を出力できます。重要な指標信号とともにこれらを画面上に表示することで、アプリケーションが進行するにつれて正確に何が起こっているかがわかりますし、外部ユニットでボード上のすべての信号を手動で測定する必要はありません。確かに、ボードを設計する際にGPIOへのいくつかの追加トレースをルーティングする必要がありますが、明らかな論理エラーが実際にはPCBの単純な接続エラーであることがわかるかもしれません。

忘れないでください、プローブに送る必要がある他の信号をヘッダーに持っていくこともできます。この方法で、それらの信号はスコープやデータ取得カードで測定することができます。一方、シリアルポートはアプリケーションロジックとの対話を助けるための多くの作業を行います。

何を設計したいかに関わらず、Altium Designer®の完全なPCB設計機能セットを使用して、革新的なテスト設計の実践を実装することができます。今日のクロスディシプリナリーな環境でのコラボレーションを実装するために、革新的な企業はAltium 365™プラットフォームを使用して設計データを簡単に共有し、プロジェクトを製造に移行しています。

Altium Designer on Altium 365で可能なことの表面をかすめただけです。今日からAltium Designer + Altium 365の無料トライアルを開始してください

筆者について

筆者について

Alexsanderは、テクニカル マーケティング エンジニアとしてAltiumに入社し、多年にわたるエンジニアリングの専門知識をチームにもたらしてくれています。エレクトロニクス設計への情熱と実践的なビジネスの経験は、Altiumのマーケティング チームに彼ならではの視点を提供してくれます。Alexsanderは、世界の上位20校であるカリフォルニア大学サンディエゴ校を卒業し、電気工学の学士号を取得しています。

ホームに戻る
Thank you, you are now subscribed to updates.