Cómo diseñar para pruebas en sistemas embebidos

Alexsander Tamari
|  Creado: October 17, 2023  |  Actualizado: December 3, 2023
pruebas de sistemas embebidos

Ya sea que estés diseñando un PCB de alta velocidad o un sistema embebido complejo, necesitará algún nivel de prueba. Para los sistemas avanzados de alta velocidad y RF, eso generalmente significa simulaciones comparadas con mediciones de VNA o de osciloscopio. Para el software y firmware embebido, los pasos de prueba pueden ser bastante diferentes. De hecho, hay algunas cosas que puedes hacer en tu diseño de prototipo para ayudarte a acelerar el proceso de prueba y eliminar la necesidad de sondear con un multímetro.

En este artículo, te mostraré algunos trucos simples que pueden hacer que probar y depurar un prototipo sea mucho más fácil. Esto significa adoptar un enfoque de diseño para prueba y aplicarlo tanto al software como al hardware. Aquí tienes una pista: el mejor camino para la prueba de sistemas embebidos involucra más que solo colocar almohadillas de prueba o puntos de prueba.

Diseño Para Prueba en Hardware Embebido

Tenemos muchos términos de moda en la industria de PCB, y “diseño para prueba” generalmente se agrupa con el paquete más amplio de DfX. Muchos diseñadores abordarán el diseño para pruebas para una placa que ejecuta código embebido de la misma manera que abordarían las pruebas para cualquier otra placa.

Esto generalmente significa que los diseñadores colocarán muchos puntos de prueba en señales importantes, pero quizás no mucho más. Muchos prototipos embebidos comenzarán a parecerse a un tablero de desarrollo Arduino, donde todo lo que puedas pensar en el procesador principal se enruta a encabezados de pines y puntos de prueba.

pruebas de sistemas embebidos
Los tableros de desarrollo siempre sacan encabezados de pines en el PCB como una práctica estándar para hacer conexiones. Sin embargo, necesitarías conectar juntos los pines tú mismo para que tu MCU pueda leer señales de periféricos o sus propias señales.

No tengo nada en contra de los encabezados de pines en una placa de sistemas embebidos, o en cualquier otra placa, de hecho. Pero, es difícil monitorear cada señal y pin mientras también intentas probar y depurar software o firmware ejecutándose en la placa. En algunos casos tienes que escribir una aplicación solo para probar tu aplicación. A veces, si ves un error en las funciones de tu diseño, no siempre será obvio si la causa raíz está en tu código o en tu PCBA.

En el lado del hardware, concéntrate en tomar este enfoque simplificado para el diseño para prueba:

  • No todo necesita un encabezado de pines. Saca una señal a un encabezado si realmente planeas conectarla a algo o si realmente la medirás.
  • Coloca conectores que realmente puedas usar. De esta manera podrías conectar a una tarjeta de adquisición de datos, analizador lógico, osciloscopio, etc.
  • Deja que el software haga la prueba. No olvides que tu aplicación embebida puede leer señales de periféricos, lo que te permite construir casos de prueba en tu código.
  • Puedes mirar datos en pantalla, solo necesitas una conexión a tu PC, como a través de un puerto serie, tarjeta de adquisición de datos o software propietario.

Algunos de estos conceptos han sido ampliamente discutidos por Ari Mahpour en sus conversaciones sobre pruebas e integración continua. Echa un vistazo a este artículo para aprender más sobre este enfoque. Si quieres enviar datos de vuelta a tu computadora, el método más simple es añadir una interfaz USB-a-serial a tu prototipo. Echa un vistazo a este proyecto de Zach Peterson y obtén los archivos de diseño del enlace.

pruebas de sistemas embebidos
Un puerto serial accesible vía USB es muy útil para visualizar datos desde tu PCB embebida.

Casos de Prueba en Software Embebido

A continuación, si estás ejecutando una aplicación embebida en tu sistema, entonces puedes incluir manejo de errores o casos de prueba en el código para ayudar a acelerar las pruebas. Añadir las conexiones a interfaces con cabezales, almohadillas de prueba y una interfaz serial básica son todos pasos importantes que te ayudan a monitorear tu placa embebida en tiempo real. El objetivo es ver cómo se comporta la aplicación de software justo al lado del hardware.

Entonces, ¿cómo puedes monitorear el progreso de tu aplicación y hardware simultáneamente? Toma nota de los desarrolladores de software: añade manejo de errores y mensajes para mostrar el estado de cada función en tu aplicación. Esto puede ser tan simple como mostrar mensajes que indiquen si las funciones importantes pasaron o fallaron en la aplicación. Toma algo de tiempo extra escribir todas esas verificaciones de error, tener un mensaje en pantalla indicando lo que tu sistema está haciendo durante la ejecución de la aplicación puede eliminar una tonelada de depuración.

Aquí hay un ejemplo que muestra cómo se implementaría esto en C/C++ usando una función simple (llamada myFunction()) y una biblioteca GPIO hipotética. Supongamos que estás trabajando con una plataforma que proporciona una biblioteca GPIO simple con funciones como gpio_init(), gpio_read(), etc.:

#include
#include // para std::runtime_error
// Biblioteca hipotética de GPIO

namespace GPIO {
    void init(int pin) {
        // Inicializa el pin dado como entrada
        // Esta función es específica de la plataforma
    }

    bool read(int pin) {
        // Lee el valor del pin dado (ALTO o BAJO)
        // Devuelve verdadero si es ALTO, falso si es BAJO
        // Esta función es específica de la plataforma
        return false; // Marcador de posición, dependerá del hardware real
    }
}
 

int main() {
    const int GPIO_PIN = 5; // Número de pin para la lectura de GPIO (elige según tu configuración)
    GPIO::init(GPIO_PIN);
    double a = 10.0, b = 2.0;
 

    // Si la señal de GPIO es ALTA, establece b en cero
    if(GPIO::read(GPIO_PIN)) {
        b = 0.0;
    }
    try {
        double result = myFunction(a, b);
        std::cout << "Resultado: " << result << std::endl;
    }
    catch(const std::exception& e) { // Captura excepciones de tipo std::exception
        std::cerr << "Error: " << e.what() << std::endl; // Muestra el mensaje de error
    }
    catch(...) { // Manejador para otras excepciones
        std::cerr << "¡Ocurrió un error desconocido!" << std::endl;
    }
    return 0;
}

 

Si tu aplicación está monitoreando señales directamente, puede imprimir esos resultados en cada paso de sus funciones principales. Imprimir estos en pantalla junto con tus señales indicadoras clave te dirá exactamente qué está sucediendo a medida que tu aplicación progresa, y no necesitarás medir manualmente cada señal a través de tu placa con una unidad externa. Claro, requiere trazar algunas pistas adicionales a los GPIOs al diseñar la placa, pero podrías descubrir que un aparente error lógico era realmente solo un simple error de conexión en tu PCB.

No olvides, aún puedes llevar cualquier otra señal que necesite ir a una sonda a un encabezado. De esta manera, esas señales aún pueden ser medidas con un osciloscopio, o una tarjeta de adquisición de datos. Mientras tanto, el puerto serie hará gran parte del trabajo de ayudarte a interactuar con la lógica de tu aplicación.

No importa lo que quieras diseñar, puedes implementar prácticas innovadoras de diseño para prueba usando el conjunto completo de características de diseño de PCB en Altium Designer®. Para implementar la colaboración en el entorno interdisciplinario de hoy, las empresas innovadoras están utilizando la plataforma Altium 365™ para compartir fácilmente datos de diseño y poner proyectos en fabricación.

Solo hemos arañado la superficie de lo que es posible con Altium Designer en Altium 365. Comienza tu prueba gratuita de Altium Designer + Altium 365 hoy.

Sobre el autor / Sobre la autora

Sobre el autor / Sobre la autora

Alexsander se unió a Altium en calidad de ingeniero de marketing técnico y aporta años de experiencia en ingeniería al equipo. Su pasión por el diseño electrónico, combinada con su experiencia práctica en el mundo de la empresa, proporciona una perspectiva única al equipo de marketing de Altium. Alexsander se graduó en una de las 20 mejores universidades del mundo, la Universidad de California en San Diego (UCSD), donde obtuvo su licenciatura en ingeniería eléctrica.

Recursos Relacionados

Documentación técnica relacionada

Volver a la Pàgina de Inicio
Thank you, you are now subscribed to updates.