Как разрабатывать с учетом тестирования во встроенных системах

Alexsander Tamari
|  Создано: 17 Октября, 2023  |  Обновлено: 1 Июля, 2024
тестирование встраиваемых систем

Независимо от того, разрабатываете ли вы высокоскоростную печатную плату или сложную встроенную систему, потребуется некоторый уровень тестирования. Для передовых высокоскоростных и РЧ систем это обычно означает симуляции в сравнении с измерениями VNA или осциллографа. Для встроенного программного обеспечения и прошивок этапы тестирования могут быть совершенно другими. Фактически, есть некоторые вещи, которые вы можете сделать в своем прототипе, чтобы ускорить процесс тестирования и избежать необходимости ковыряться мультиметром.

В этой статье я покажу вам несколько простых трюков, которые могут сделать тестирование и отладку прототипа намного проще. Это означает применение подхода проектирования с учетом тестирования как к программному, так и к аппаратному обеспечению. Вот подсказка: лучший путь для тестирования встроенных систем включает в себя нечто большее, чем просто размещение тестовых площадок или тестовых точек.

Проектирование с учетом тестирования во встроенном аппаратном обеспечении

В индустрии печатных плат много модных слов, и «проектирование с учетом тестирования» обычно объединяется с более широким пакетом DfX. Многие разработчики подходят к проектированию с учетом тестирования для платы, на которой работает встроенный код, так же, как они подходили бы к тестированию любой другой платы.

Обычно это означает, что разработчики размещают множество тестовых точек на важных сигналах, но, возможно, не много чего еще. Многие встроенные прототипы начинают выглядеть как разработческая плата Arduino, где все, что только можно придумать на основном процессоре, выводится на штыревые разъемы и тестовые точки.

тестирование встроенных систем
Разработческие платы всегда выводят штыревые разъемы на печатной плате как стандартную практику для создания соединений. Однако, вам нужно будет соединить штыри самостоятельно, чтобы ваш MCU мог считывать сигналы от периферии или свои собственные сигналы.

Я ничего не имею против штыревых разъемов на плате встроенных систем или на любой другой плате. Но сложно контролировать каждый сигнал и контакт, одновременно пытаясь тестировать и отлаживать программное обеспечение или прошивку, работающую на плате. В некоторых случаях вам приходится действительно писать приложение только для тестирования вашего приложения. Иногда, если вы видите ошибку в функциях вашего дизайна, не всегда очевидно, в вашем коде или в вашей PCBA находится корень проблемы.

С аппаратной стороны, сосредоточьтесь на принятии этого упрощенного подхода к проектированию с учетом тестирования:

  • Не все требует штыревого разъема. Выводите сигнал на разъем, если вы действительно планируете подключить его к чему-то или если вы действительно собираетесь его измерять.
  • Размещайте разъемы, которые вы можете действительно использовать. Таким образом, вы могли бы подключиться к карте сбора данных, логическому анализатору, осциллографу и т. д.
  • Пусть программное обеспечение проводит тестирование. Не забывайте, что ваше встроенное приложение может считывать сигналы от периферии, что позволяет вам встроить тестовые случаи в ваш код.
  • Вы можете смотреть данные на экране, вам просто нужно соединение с вашим ПК, например, через последовательный порт, карту сбора данных или собственное программное обеспечение.

Некоторые из этих концепций были подробно обсуждены Ари Махпуром в его дискуссиях о тестировании и непрерывной интеграции. Ознакомьтесь с этой статьей, чтобы узнать больше об этом подходе. Если вы хотите отправить данные обратно на свой компьютер, самый простой метод - добавить интерфейс USB-to-serial к вашему прототипу. Ознакомьтесь с этим проектом от Зака Петерсона и получите ссылку на файлы дизайна.

тестирование встроенных систем
Последовательный порт, доступный через USB, очень полезен для просмотра данных с вашей встроенной печатной платы.

Тестовые случаи во встроенном программном обеспечении

Далее, если вы запускаете встроенное приложение на вашей системе, то вы можете включить обработку ошибок или тестовые случаи в код, чтобы ускорить тестирование. Добавление соединений к интерфейсам с заголовками, тестовыми площадками и базовым последовательным интерфейсом - все это важные шаги, которые помогают вам отслеживать вашу встроенную плату в реальном времени. Цель - увидеть, как программное приложение ведет себя вместе с аппаратным обеспечением.

Так как же можно одновременно отслеживать прогресс вашего приложения и аппаратного обеспечения? Возьмите пример с разработчиков программного обеспечения: добавьте обработку ошибок и сообщения для отображения статуса каждой функции в вашем приложении. Это может быть так же просто, как отображение сообщений о том, прошли ли важные функции или нет в приложении. На написание всех этих проверок ошибок уходит дополнительное время, но наличие сообщения на экране, указывающего, что делает ваша система во время выполнения приложения, может исключить тонны отладки.

Вот пример, который показывает, как это может быть реализовано на C/C++ с использованием простой функции (называемой myFunction()) и гипотетической библиотеки GPIO. Допустим, вы работаете с платформой, которая предоставляет простую библиотеку GPIO с функциями вроде gpio_init(), gpio_read() и т. д.:

#include
#include   // для std::runtime_error
// Гипотетическая библиотека GPIO

namespace GPIO {
    void init(int pin) {
        // Инициализация указанного пина как входа
        // Эта функция специфична для платформы
    }

    bool read(int pin) {
        // Чтение значения указанного пина (HIGH или LOW)
        // Возвращает true, если HIGH, false, если LOW
        // Эта функция специфична для платформы
        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 при проектировании платы, но вы можете обнаружить, что казавшаяся логическая ошибка на самом деле была просто ошибкой соединения на вашей печатной плате.

Не забывайте, что любые другие сигналы, которые нужно отправить на пробник, можно вывести на разъем. Таким образом, эти сигналы все еще можно измерять с помощью осциллографа или карты сбора данных. Между тем, последовательный порт сделает большую часть работы по взаимодействию с логикой вашего приложения.

Независимо от того, что вы хотите спроектировать, вы можете реализовать инновационные практики проектирования для тестирования, используя полный набор функций проектирования печатных плат в Altium Designer®. Для реализации сотрудничества в современной междисциплинарной среде инновационные компании используют платформу Altium 365™ для легкого обмена данными проектирования и запуска проектов в производство.

Мы только коснулись поверхности возможностей Altium Designer на Altium 365. Начните ваш бесплатный пробный период Altium Designer + Altium 365 сегодня.

Об авторе

Об авторе

Александр Тамари (Alexsander Tamari) является инженером отдела технического маркетинга в Altium, к которому он присоединился уже опытным специалистом. Его увлечение проектированием электроники в сочетании с практическим деловым опытом открывает уникальные перспективы для команды маркетинга Altium. Александр окончил один из 20 лучших университетов мира, Калифорнийский университет в Сан-Диего, где получил степень бакалавра в области электротехники.

Связанные ресурсы

Связанная техническая документация

Вернуться на главную
Thank you, you are now subscribed to updates.