Come progettare per il test nei sistemi embedded

Alexsander Tamari
|  Creato: ottobre 17, 2023  |  Aggiornato: luglio 1, 2024
test di sistemi embedded

Se stai progettando un PCB ad alta velocità o un sistema embedded complesso, avrà bisogno di un certo livello di test. Per i sistemi avanzati ad alta velocità e RF, ciò significa solitamente simulazioni confrontate con misurazioni VNA o oscilloscopio. Per il software e firmware embedded, i passaggi di test possono essere piuttosto diversi. Infatti, ci sono alcune cose che puoi fare nel tuo design prototipale per aiutarti ad accelerare il processo di test ed eliminare la necessità di sondare con un multimetro.

In questo articolo, ti mostrerò alcuni semplici trucchi che possono rendere il test e il debug di un prototipo molto più facili. Ciò significa adottare un approccio di progettazione orientato al test e applicarlo sia al software che all'hardware. Ecco un suggerimento: il miglior percorso per il test dei sistemi embedded comporta più che semplicemente posizionare pad di test o punti di test.

Progettazione Orientata al Test nell'Hardware Embedded

Abbiamo molti termini tecnici nell'industria dei PCB, e "progettazione orientata al test" è solitamente raggruppata con il più ampio pacchetto DfX. Molti progettisti affronteranno la progettazione orientata al test per una scheda che esegue codice embedded nello stesso modo in cui affronterebbero il test per qualsiasi altra scheda.

Questo significa solitamente che i progettisti posizioneranno molti punti di test su segnali importanti, ma forse non molto altro. Molti prototipi embedded inizieranno a sembrare una scheda di sviluppo Arduino, dove tutto ciò che puoi pensare sul processore principale è instradato verso pin header e punti di test.

test dei sistemi embedded
Le schede di sviluppo rompono sempre i pin header sul PCB come pratica standard per realizzare connessioni. Tuttavia, dovresti collegare insieme i pin da solo affinché il tuo MCU possa leggere segnali dai periferici o dai suoi stessi segnali.

Non ho nulla contro i pin header su una scheda di sistemi embedded, o su qualsiasi altra scheda per quel che riguarda. Ma, è difficile monitorare ogni segnale e pin mentre si cerca anche di testare e fare debug del software o firmware in esecuzione sulla scheda. In alcuni casi devi effettivamente scrivere un'applicazione solo per testare la tua applicazione. A volte, se vedi un errore nelle funzioni del tuo design, potrebbe non essere sempre ovvio se la causa principale è nel tuo codice o nel tuo PCBA.

Sul lato hardware, concentra l'attenzione su questo approccio semplificato alla progettazione orientata al test:

  • Non tutto necessita di un pin header. Porta un segnale a un header se effettivamente prevedi di collegarlo a qualcosa o se lo misurerai effettivamente.
  • Posiziona connettori che puoi effettivamente utilizzare. In questo modo potresti collegarti a una scheda di acquisizione dati, analizzatore logico, oscilloscopio, ecc.
  • Fai fare i test al software. Non dimenticare che la tua applicazione embedded può leggere segnali dai periferici, il che ti permette di costruire casi di test nel tuo codice.
  • Puoi guardare i dati sullo schermo, hai solo bisogno di una connessione al tuo PC, come attraverso una porta seriale, una scheda di acquisizione dati o software proprietario.

Alcuni di questi concetti sono stati ampiamente discussi da Ari Mahpour nelle sue discussioni su test e integrazione continua. Dai un'occhiata a questo articolo per saperne di più su questo approccio. Se vuoi inviare dati al tuo computer, il metodo più semplice è aggiungere un'interfaccia USB-seriale al tuo prototipo. Dai un'occhiata a questo progetto di Zach Peterson e ottieni i file di progetto del link.

test di sistemi embedded
Una porta seriale accessibile tramite USB è molto utile per visualizzare i dati dal tuo PCB embedded.

Casi di Test nel Software Embedded

In seguito, se stai eseguendo un'applicazione embedded sul tuo sistema, allora puoi includere la gestione degli errori o casi di test nel codice per accelerare i test. Aggiungere le connessioni alle interfacce con header, pad di test e un'interfaccia seriale di base sono tutti passaggi importanti che ti aiutano a monitorare la tua scheda embedded in tempo reale. L'obiettivo è vedere come si comporta l'applicazione software a fianco dell'hardware.

Quindi, come puoi monitorare il progresso della tua applicazione e dell'hardware contemporaneamente? Prendi spunto dagli sviluppatori di software: aggiungi la gestione degli errori e messaggi per visualizzare lo stato di ogni funzione nella tua applicazione. Questo può essere semplice come visualizzare messaggi che indicano se le funzioni importanti sono state superate o fallite nell'applicazione. Ci vuole un po' di tempo in più per scrivere tutti quei controlli degli errori, avere un messaggio sullo schermo che indica cosa sta facendo il tuo sistema durante l'esecuzione dell'applicazione può eliminare un sacco di debug.

Ecco un esempio che mostra come ciò sarebbe implementato in C/C++ usando una semplice funzione (chiamata myFunction()) e una libreria GPIO ipotetica. Supponiamo che tu stia lavorando con una piattaforma che fornisce una semplice libreria GPIO con funzioni come gpio_init(), gpio_read(), ecc.:

#include
#include   // per std::runtime_error
// Libreria ipotetica GPIO

namespace GPIO {
    void init(int pin) {
        // Inizializza il pin dato come input
        // Questa funzione è specifica della piattaforma
    }

    bool read(int pin) {
        // Legge il valore del pin dato (ALTO o BASSO)
        // Restituisce true se ALTO, false se BASSO
        // Questa funzione è specifica della piattaforma
        return false;  // Posto segnaposto, dipenderà dall'hardware effettivo
    }
}
 

int main() {
    const int GPIO_PIN = 5;  // Numero del pin per la lettura GPIO (scegliere in base alla propria configurazione)
    GPIO::init(GPIO_PIN);
    double a = 10.0, b = 2.0;
 

    // Se il segnale GPIO è ALTO, imposta b a zero
    if(GPIO::read(GPIO_PIN)) {
        b = 0.0;
    }
    try {
        double result = myFunction(a, b);
        std::cout << "Risultato: " << result << std::endl;
    }
    catch(const std::exception& e) {  // Cattura eccezioni di tipo std::exception
        std::cerr << "Errore: " << e.what() << std::endl;  // Visualizza il messaggio di errore
    }
    catch(...) {  // Gestore catch-all per altre eccezioni
        std::cerr << "Si è verificato un errore sconosciuto!" << std::endl;
    }
    return 0;
}

 

Se la tua applicazione monitora direttamente i segnali, può stampare questi risultati ad ogni passo nelle sue funzioni principali. Stampare questi sullo schermo insieme ai tuoi segnali indicatore chiave ti dirà esattamente cosa sta succedendo mentre la tua applicazione progredisce, e non avrai bisogno di misurare manualmente ogni segnale sulla tua scheda con un'unità esterna. Certo, richiede il tracciamento di qualche traccia extra verso i GPIO quando si progetta la scheda, ma potresti scoprire che un apparente errore logico era in realtà solo un semplice errore di connessione nel tuo PCB.

Non dimenticare, puoi comunque portare qualsiasi altro segnale che necessita di andare a una sonda verso un header. In questo modo, quei segnali possono ancora essere misurati con un oscilloscopio, o una scheda di acquisizione dati. Nel frattempo, la porta seriale farà gran parte del lavoro di aiutarti a interagire con la logica della tua applicazione.

Non importa cosa tu voglia progettare, puoi implementare pratiche innovative di progettazione per il test utilizzando il set completo di funzionalità di progettazione PCB in Altium Designer®. Per implementare la collaborazione nell'ambiente interdisciplinare di oggi, le aziende innovative stanno utilizzando la piattaforma Altium 365™ per condividere facilmente i dati di progettazione e mettere in produzione i progetti.

Abbiamo solo sfiorato la superficie di ciò che è possibile con Altium Designer su Altium 365. Inizia oggi la tua prova gratuita di Altium Designer + Altium 365.

Sull'Autore

Sull'Autore

Alexsander è entrato a far parte di Altium come Ingegnere tecnico di marketing, portando anni di esperienza al team. La sua passione per la progettazione elettronica, unita alla sua esperienza pratica, fornisce una prospettiva unica ad Altium. Alexsander si è laureato presso la UCSD, una delle 20 migliori università del mondo, dove ha conseguito una laurea in Ingegneria elettrica.v

Risorse correlate

Documentazione Tecnica Correlata

Tornare alla Pagina Iniziale
Thank you, you are now subscribed to updates.