임베디드 시스템에서의 테스트 설계 방법

Alexsander Tamari
|  작성 날짜: 시월 17, 2023  |  업데이트 날짜: 칠월 1, 2024
임베디드 시스템 테스팅

고속 PCB를 설계하든 복잡한 임베디드 시스템을 설계하든, 일정 수준의 테스트가 필요합니다. 고속 및 RF 시스템의 경우, 보통 VNA나 스코프 측정과 비교한 시뮬레이션을 의미합니다. 임베디드 소프트웨어와 펌웨어의 경우, 테스트 단계는 상당히 다를 수 있습니다. 실제로, 프로토타입 설계에서 테스트 과정을 가속화하고 멀티미터로 측정할 필요를 없애는 데 도움이 되는 몇 가지 방법이 있습니다.

이 글에서는 프로토타입을 테스트하고 디버깅하는 것을 훨씬 쉽게 만들 수 있는 몇 가지 간단한 팁을 보여드리겠습니다. 이는 소프트웨어와 하드웨어 모두에 테스트를 위한 설계 접근 방식을 적용하는 것을 의미합니다. 여기에는 테스트 패드나 테스트 포인트를 배치하는 것 이상의 임베디드 시스템 테스트를 위한 최선의 방법이 포함됩니다.

임베디드 하드웨어에서의 테스트를 위한 설계

PCB 산업에서는 많은 유행어가 있으며, “테스트를 위한 설계”는 보통 더 넓은 DfX 묶음과 함께 그룹화됩니다. 많은 설계자들은 임베디드 코드를 실행하는 보드의 테스트를 다른 보드의 테스트와 같은 방식으로 접근할 것입니다.

이는 보통 설계자들이 중요한 신호에 많은 테스트 포인트를 배치하지만, 그 이상은 아닐 수도 있다는 것을 의미합니다. 많은 임베디드 프로토타입은 Arduino 개발 보드처럼 보이기 시작할 것입니다. 여기서 메인 프로세서의 모든 것이 핀 헤더와 테스트 포인트로 라우팅됩니다.

임베디드 시스템 테스트
개발 보드는 항상 PCB에 핀 헤더를 표준 연결 방식으로 분리합니다. 그러나 MCU가 주변 장치나 자체 신호에서 신호를 읽을 수 있도록 핀을 직접 연결해야 합니다.

임베디드 시스템 보드나 다른 보드에 핀 헤더가 있다는 것에 반대하는 것은 아닙니다. 하지만, 모든 신호와 핀을 모니터링하면서 보드에서 실행되는 소프트웨어나 펌웨어를 테스트하고 디버깅하기는 어렵습니다. 경우에 따라서는 애플리케이션을 테스트하기 위해 실제로 애플리케이션을 작성해야 할 수도 있습니다. 설계의 기능에서 오류를 발견하면 그 원인이 코드에 있는지 PCBA에 있는지 항상 명확하지 않을 수 있습니다.

하드웨어 측면에서, 테스트를 위한 설계에 대해 이 간소화된 접근 방식에 집중하세요:

  • 모든 것이 핀 헤더를 필요로 하는 것은 아닙니다. 실제로 무언가에 연결하거나 실제로 측정할 계획이 있는 신호를 헤더로 빼세요.
  • 실제로 사용할 수 있는 커넥터를 배치하세요. 이렇게 하면 데이터 수집 카드, 로직 분석기, 오실로스코프 등에 연결할 수 있습니다.
  • 소프트웨어가 테스트를 수행하게 하세요. 임베디드 애플리케이션이 주변 장치에서 신호를 읽을 수 있으므로 코드에 테스트 케이스를 구축할 수 있습니다.
  • 화면에서 데이터를 볼 수 있습니다. 단지 PC와의 연결이 필요할 뿐이며, 이는 직렬 포트, 데이터 수집 카드 또는 독점 소프트웨어를 통해 가능합니다.

Ari Mahpour가 테스트와 지속적 통합에 대한 논의에서 많이 다룬 개념들입니다. 이 기사를 살펴보세요 이 접근법에 대해 더 알아보기 위해서입니다. 컴퓨터로 데이터를 다시 보내고 싶다면, 가장 간단한 방법은 프로토타입에 USB-to-serial 인터페이스를 추가하는 것입니다. 이 프로젝트를 살펴보세요 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를 0으로 설정
    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(...) {  // 기타 예외를 위한 catch-all 핸들러
        std::cerr << "알 수 없는 오류가 발생했습니다!" << std::endl;
    }
    return 0;
}

 

어플리케이션이 직접 신호를 모니터링하는 경우, 핵심 기능의 각 단계에서 그 결과를 출력할 수 있습니다. 주요 지표 신호와 함께 화면에 이러한 내용을 출력하면 어플리케이션이 진행됨에 따라 정확히 무슨 일이 일어나고 있는지 알 수 있으며, 외부 장치를 사용하여 보드 전체의 모든 신호를 수동으로 측정할 필요가 없습니다. 물론, 보드를 설계할 때 GPIO로 몇 개의 추가 트레이스를 라우팅해야 하지만, PCB의 간단한 연결 오류가 명백한 논리 오류로 보였을 수도 있다는 것을 알게 될 수 있습니다.

물론, 프로브로 전달해야 하는 다른 신호들은 헤더로 가져갈 수 있습니다. 이렇게 하면 그러한 신호들도 스코프나 데이터 수집 카드로 측정할 수 있습니다. 한편, 시리얼 포트는 어플리케이션 로직과 상호 작용하는 데 많은 작업을 수행할 것입니다.

무엇을 설계하고자 하든, Altium Designer®의 완벽한 PCB 설계 기능 세트를 사용하여 혁신적인 테스트 설계 관행을 구현할 수 있습니다. 오늘날의 다학제 환경에서 협업을 구현하기 위해 혁신적인 기업들은 Altium 365™ 플랫폼을 사용하여 설계 데이터를 쉽게 공유하고 프로젝트를 제조 단계로 넘길 수 있습니다.

Altium Designer와 Altium 365에서 가능한 것의 표면만 긁어냈습니다. 오늘 Altium Designer + Altium 365의 무료 체험을 시작하세요.

작성자 정보

작성자 정보

Alexsander joined Altium as a Technical Marketing Engineer and brings years of engineering expertise to the team. His passion for electronics design combined with his practical business experience provides a unique perspective to the marketing team at Altium. Alexsander graduated from one of the top 20 universities in the world at UCSD where he earned a Bachelor’s degree in Electrical Engineering.

관련 자료

관련 기술 문서

홈으로 돌아가기
Thank you, you are now subscribed to updates.