Wie man für den Test in eingebetteten Systemen entwirft

Alexsander Tamari
|  Erstellt: Oktober 17, 2023  |  Aktualisiert am: Juli 1, 2024
Testen eingebetteter Systeme

Ob Sie eine Hochgeschwindigkeits-PCB oder ein komplexes eingebettetes System entwerfen, es wird ein gewisses Maß an Tests benötigen. Für die fortgeschrittenen Hochgeschwindigkeits- und RF-Systeme bedeutet das normalerweise Simulationen im Vergleich zu VNA- oder Oszilloskop-Messungen. Für eingebettete Software und Firmware können die Testphasen ganz anders sein. Tatsächlich gibt es einige Dinge, die Sie in Ihrem Prototyp-Design tun können, um den Testprozess zu beschleunigen und die Notwendigkeit zu eliminieren, mit einem Multimeter herumzusondieren.

In diesem Artikel werde ich Ihnen einige einfache Tricks zeigen, die das Testen und Debuggen eines Prototyps erheblich erleichtern können. Das bedeutet, einen Design-for-Test-Ansatz zu nehmen und ihn sowohl auf Software als auch auf Hardware anzuwenden. Hier ist ein Hinweis: Der beste Weg für das Testen von eingebetteten Systemen beinhaltet mehr als nur Testpads oder Testpunkte zu platzieren.

Design für Test in eingebetteter Hardware

Wir haben viele Schlagwörter in der PCB-Industrie, und „Design für Test“ wird normalerweise mit dem breiteren DfX-Bündel gruppiert. Viele Designer werden Design für Tests für eine Platine, die eingebetteten Code ausführt, auf die gleiche Weise angehen, wie sie Tests für jede andere Platine angehen würden.

Dies bedeutet normalerweise, dass Designer viele Testpunkte auf wichtigen Signalen platzieren, aber vielleicht nicht viel mehr. Viele eingebettete Prototypen werden anfangen, wie ein Arduino-Entwicklungsboard auszusehen, wo alles, was man sich beim Hauptprozessor vorstellen kann, zu Stiftleisten und Testpunkten herausgeführt wird.

Testen eingebetteter Systeme
Entwicklungsboards führen immer Stiftleisten auf der PCB als Standardpraxis für Verbindungen aus. Jedoch müssten Sie Pins selbst verdrahten, damit Ihr MCU Signale von Peripheriegeräten oder seinen eigenen Signalen lesen kann.

Ich habe nichts gegen Stiftleisten auf einer Platine für eingebettete Systeme oder auf irgendeiner anderen Platine. Aber es ist schwierig, jedes Signal und jeden Pin zu überwachen, während man gleichzeitig versucht, Software oder Firmware, die auf der Platine läuft, zu testen und zu debuggen. In einigen Fällen müssen Sie tatsächlich eine Anwendung schreiben, nur um Ihre Anwendung zu testen. Manchmal, wenn Sie einen Fehler in den Funktionen Ihres Designs sehen, ist es möglicherweise nicht immer offensichtlich, ob die Ursache in Ihrem Code oder in Ihrer PCBA liegt.

Auf der Hardwareseite konzentrieren Sie sich darauf, diesen vereinfachten Ansatz für Design für Test zu nehmen:

  • Nicht alles benötigt eine Stiftleiste. Führen Sie ein Signal zu einer Leiste heraus, wenn Sie tatsächlich vorhaben, es mit etwas zu verbinden oder wenn Sie es tatsächlich messen werden.
  • Platzieren Sie Steckverbinder, die Sie tatsächlich verwenden können. Auf diese Weise könnten Sie eine Verbindung zu einer Datenerfassungskarte, Logikanalysator, Oszilloskop usw. herstellen.
  • Lassen Sie die Software die Tests durchführen. Vergessen Sie nicht, dass Ihre eingebettete Anwendung Signale von Peripheriegeräten lesen kann, was Ihnen ermöglicht, Testfälle in Ihren Code einzubauen.
  • Sie können Daten auf dem Bildschirm betrachten, Sie benötigen nur eine Verbindung zu Ihrem PC, wie über eine serielle Schnittstelle, Datenerfassungskarte oder proprietäre Software.

Einige dieser Konzepte wurden von Ari Mahpour in seinen Diskussionen über Tests und Continuous Integration ausführlich besprochen. Schauen Sie sich diesen Artikel an, um mehr über diesen Ansatz zu erfahren. Wenn Sie Daten zurück an Ihren Computer senden möchten, ist die einfachste Methode, eine USB-zu-Seriell-Schnittstelle zu Ihrem Prototyp hinzuzufügen. Schauen Sie sich dieses Projekt von Zach Peterson an und greifen Sie auf die Link-Design-Dateien zu.

Tests eingebetteter Systeme
Ein über USB zugänglicher serieller Port ist sehr nützlich, um Daten von Ihrer eingebetteten PCB zu betrachten.

Testfälle in eingebetteter Software

Als Nächstes, wenn Sie eine eingebettete Anwendung auf Ihrem System ausführen, dann können Sie Fehlerbehandlung oder Testfälle in den Code einfügen, um das Testen zu beschleunigen. Das Hinzufügen der Verbindungen zu Schnittstellen mit Headern, Testpads und einer grundlegenden seriellen Schnittstelle sind alles wichtige Schritte, die Ihnen helfen, Ihre eingebettete Platine in Echtzeit zu überwachen. Das Ziel ist zu sehen, wie sich die Softwareanwendung direkt neben der Hardware verhält.

Wie können Sie also den Fortschritt Ihrer Anwendung und Hardware gleichzeitig überwachen? Nehmen Sie sich ein Beispiel an Softwareentwicklern: Fügen Sie Fehlerbehandlung und Nachrichten hinzu, um den Status jeder Funktion in Ihrer Anwendung anzuzeigen. Das kann so einfach sein wie das Anzeigen von Nachrichten, die angeben, ob wichtige Funktionen in der Anwendung bestanden haben oder fehlgeschlagen sind. Es dauert etwas mehr Zeit, all diese Fehlerprüfungen zu schreiben, aber eine Bildschirmnachricht, die anzeigt, was Ihr System während der Ausführung der Anwendung tut, kann eine Menge Debugging ersparen.

Hier ist ein Beispiel, das zeigt, wie dies in C/C++ mit einer einfachen Funktion (genannt myFunction()) und einer hypothetischen GPIO-Bibliothek implementiert würde. Nehmen wir an, Sie arbeiten mit einer Plattform, die eine einfache GPIO-Bibliothek mit Funktionen wie gpio_init(), gpio_read() usw. bietet:

#include
#include   // für std::runtime_error
// Hypothetische GPIO-Bibliothek

namespace GPIO {
    void init(int pin) {
        // Initialisiere den gegebenen Pin als Eingang
        // Diese Funktion ist plattformspezifisch
    }

    bool read(int pin) {
        // Lese den Wert des gegebenen Pins (HIGH oder LOW)
        // Gibt true zurück, wenn HIGH, false, wenn LOW
        // Diese Funktion ist plattformspezifisch
        return false;  // Platzhalter, hängt von der tatsächlichen Hardware ab
    }
}
 

int main() {
    const int GPIO_PIN = 5;  // Pinnummer für GPIO-Lesen (wähle entsprechend deiner Konfiguration)
    GPIO::init(GPIO_PIN);
    double a = 10.0, b = 2.0;
 

    // Wenn das GPIO-Signal HIGH ist, setze b auf null
    if(GPIO::read(GPIO_PIN)) {
        b = 0.0;
    }
    try {
        double result = myFunction(a, b);
        std::cout << "Ergebnis: " << result << std::endl;
    }
    catch(const std::exception& e) {  // Fange Ausnahmen vom Typ std::exception
        std::cerr << "Fehler: " << e.what() << std::endl;  // Zeige die Fehlermeldung an
    }
    catch(...) {  // Fang-alles-Handler für andere Ausnahmen
        std::cerr << "Ein unbekannter Fehler ist aufgetreten!" << std::endl;
    }
    return 0;
}

 

Wenn deine Anwendung Signale direkt überwacht, kann deine Anwendung diese Ergebnisse bei jedem Schritt in ihren Kernfunktionen ausdrucken. Diese auf dem Bildschirm zusammen mit deinen Schlüsselsignalen auszugeben, wird dir genau zeigen, was während des Fortschritts deiner Anwendung passiert, und du musst nicht jedes Signal auf deiner Platine manuell mit einem externen Gerät messen. Sicher, es erfordert das Verlegen einiger zusätzlicher Leiterbahnen zu den GPIOs beim Entwerfen der Platine, aber du könntest feststellen, dass ein scheinbarer Logikfehler wirklich nur ein einfacher Verbindungsfehler in deiner PCB war.

Vergiss nicht, du kannst immer noch alle anderen Signale, die zu einer Sonde gehen müssen, zu einem Header führen. Auf diese Weise können diese Signale immer noch mit einem Oszilloskop oder einer Datenerfassungskarte gemessen werden. In der Zwischenzeit wird der serielle Port viel Arbeit leisten, um dir zu helfen, mit deiner Anwendungslogik zu interagieren.

Unabhängig davon, was du entwerfen möchtest, kannst du innovative Design-for-Test-Praktiken mit dem kompletten Satz von PCB-Designfunktionen in Altium Designer® implementieren. Um Zusammenarbeit in der heutigen disziplinübergreifenden Umgebung zu implementieren, nutzen innovative Unternehmen die Altium 365™-Plattform, um Design-Daten einfach zu teilen und Projekte in die Fertigung zu bringen.

Wir haben nur an der Oberfläche dessen gekratzt, was mit Altium Designer auf Altium 365 möglich ist. Starte heute deine kostenlose Testversion von Altium Designer + Altium 365.

Über den Autor / über die Autorin

Über den Autor / über die Autorin

Alexsander kam als Technical Marketing Engineer zu Altium und bringt jahrelange Erfahrung als Ingenieur in das Team ein. Seine Leidenschaft für Elektronikdesign kombiniert mit seiner praktischen Geschäftserfahrung bietet dem Marketingteam von Altium eine einzigartige Perspektive. Alexsander schloss sein Studium an einer der 20 besten Universitäten der Welt an der UCSD ab, wo er einen Bachelor-Abschluss in Elektrotechnik erwarb.

Ähnliche Resourcen

Verwandte technische Dokumentation

Zur Startseite
Thank you, you are now subscribed to updates.