개발 소개
이 챕터에서는 새 플랫폼에서 TouchGFX 프로그래밍을 시작하는 보드 브링업 과정을 안내합니다. 보드를 브링업하는 것은 TouchGFX를 프로젝트에 추가하기 앞서 보드의 모든 필수 부품과 해당하는 드라이버가 올바르게 동작하는지 확인하는 것을 의미합니다.
디스플레이에서 이미 작동 중인 보드가 있는 경우에는 이 단계의 많은 활동들이 쉬워집니다. 완전히 새로운 사용자 제작 보드를 가지고 있는 경우에는 이 단계를 완료하는 데 며칠이 소요된다는 것을 감안해야 합니다. 하지만 플랫폼이 불안정하면 좋은 애플리케이션을 작성하기 어렵다는 점에서 이러한 작업은 시간을 투자할 가치가 있습니다. 반면, 안정적이고 입증된 플랫폼에서는 애플리케이션에 집중할 수 있습니다.
이 챕터는 보드에서 하드웨어 및 하위 레벨의 소프트웨어 구성 요소가 예상대로 작동하는 것을 보장 하는 업무를 담당하는 개발자를 위해 작성되었습니다. 애플리케이션의 실제 UI를 개발하는데만 관심이 있는 개발자를 위한 것이 아닙니다.
보드를 브링업할 때는 보드 상의 구성 요소 및 주변 장치와 이들 간의 연결, 이들이 통신에 사용하는 프로토콜, 각각에서 사용 가능하거나 필요한 드라이버 코드 등에 대해 완벽히 이해하고 있어야 합니다.
새 챕터인 TouchGFX AL 개발 에서는 TouchGFX가 하드웨어와 드라이버를 토대로 실행되도록 AL을 생성하는 방법에 대해 설명합니다.
작업 도구
STM32 기반 보드를 브링업할 때 중요한 몇 가지 도구가 아래 표에 나와 있습니다.
도구 | 설명 |
---|---|
STM32CubeMX | 프로젝트와 내부 주변 장치에서 MCU를 구성하고 초기화 소스 코드를 생성할 때 손쉽게 사용할 수 있는 도구입니다. |
STM32Cube 펌웨어 패키지 | MCU 제품군을 위한 STM32Cube 펌웨어에는 다양한 주변 장치의 사용 방법을 보여주는 예제 프로젝트와 애플리케이션이 다수 포함되어 있습니다. |
공급업체 데이터 시트 | 디스플레이나 플래시 같은 외부 장치에 대한 데이터 시트에는 MCU(예: STM32CubeMX를 통한)와 외부 장치 모두를 올바르게 초기화하기 위한 타이밍이나 전압 등 중요 정보가 포함되어 있습니다. |
공급업체 드라이버 코드 | 시간 절약을 위해 공급업체에게 외부 장치에 대한 예제 코드를 요청해야 합니다. 드라이버 코드는 STM32 MCU에 포팅해야 하는 경우가 많지만, 그래도 드라이버 코드를 처음부터 새로 작성하는 것보다는 간단합니다. |
보드 브링업 단계에서 수행되는 모든 작업은 TouchGFX와 무관하게 이루어지기 때문에 TouchGFX 코드가 일체 관여되지 않습니다. 대신, 이러한 작업과 그 결과로 생성된 코드는 TouchGFX Abstraction Layer를 개발하기 위한 견고한 토대 역할을 합니다.
하드웨어 및 하위 레벨의 소프트웨어가 실제로 최종 애플리케이션에서 기대에 부합하게 작동하게 만드는 것이 주된 목적입니다.
기능 확인
보드 브링업 단계에서 생성된 코드는 1개 이상의 테스트 프로젝트 형태를 가지고 있으며, 두 가지 용도로 사용됩니다:
AL(Abstraction Layer) | 보드 초기화 코드는 TouchGFX AL과 궁극적으로 작동하게 될 UI 애플리케이션을 구축하는 토대가 됩니다. |
테스트 코드 | 보드 초기화 코드와 함께 작성된 인증 코드는 보드가 예상대로 작동하지 않을 때 궁극적으로 확인해 보는 코드입니다. 보드 브링업 단계에서는 보드와 각각의 특정 구성 요소가 예상대로 작동 중인지 확인하기 위해 소규모 검증 프로그램을 다수 생성하게 됩니다. 이러한 검증 프로그램들은 작업이 진행 중일 때 큰 가치가 있으며, 무언가가 불확실해진 경우에는 다시 찾아가서 기능을 개선할 수 있습니다. |
위의 두 가지 이유로 인해 확인 프로그램을 체계적으로 저장하면 매우 유용합니다. 따라서 추후에 테스트 프로그램을 다시 사용할 수 있습니다. 예를 들어 대상 애플리케이션에서 예기치 않은 오류가 발생할 때 새롭게 수정된 버전의 하드웨어를 테스트하거나 근본 원인을 파악하는 데 사용할 수 있습니다. 개발 단계에서 수행된 측정 작업(예: 메모리 대역폭)을 체계적으로 기록해 놓는 것도 좋은 방법입니다.
전반적인 프로세스
우리는 하드웨어의 구체적인 구성을 알 수 없기 때문에 아래와 같은 사용 가이드가 TouchGFX의 실행 시, 보드를 브링업 및 준비하기 위한 단계별 가이드 역할을 하게 됩니다.
가이드의 각 단계는 하드웨어와 소프트웨어 구성 요소에서 특정한 한 부분과 이에 대한 브링업에 관련이 있습니다. 예를 들어 하드웨어의 사용자 제작 구성 요소 부분으로 터치 컨트롤러가 있습니다. 전반적인 목표는 터치 컨트롤러와 통신하여 디스플레이에서의 모든 터치에 대한 정보를 수집하는 것입니다. 터치 컨트롤러에 전송할 명령은 하드웨어에서 사용 중인 컨트롤러에 따라 다르므로 가이드에서는 완벽한 드라이버를 제시할 수 없습니다. 이를 위해서는 터치 컨트롤러 데이터 시트의 정보에 가이드를 결합해야 합니다.
Note
- 한 번에 한 단계씩 수행
- 다음 단계로 넘어가기 전에 각 단계를 철저하게 확인
- 무언가가 의도한 대로 작동하지 않을 때 가이드를 디버깅 수단으로 활용하거나 이전 단계로 돌아가서 잘못 진행한 부분이 없는지 확인
- 보드 브링업은 사소한 작업이 아니기 때문에 예기치 않은 동작이 발생하더라도 경고를 받지 않음
가이드의 각 단계는 다음의 구조를 따르게 됩니다:
- 개요
이 부분에서는 해당 단계를 설명하고, TouchGFX를 하드웨어에서 실행할 준비를 하는 데 있어 이 단계가 왜 중요한지 그 동기를 부여합니다. - 목표
목표 부분에는 이 단계의 목표가 나와 있습니다. 확인 사항 목록에는 수행해야 하는 특정 테스트가 자세히 설명되어 있습니다. 이러한 확인 사항을 통해 소프트웨어가 하드웨어에서 TouchGFX를 성공적으로 실행하는 데 필요한 기능들을 구현할 수 있습니다. - 전제 조건
여기에는 작업을 수행하는 데 필요한 항목들이 나와 있습니다. - 실행
이 부분에서는 하드웨어의 구성 및 사용에 필요한 소프트웨어를 작성하는 방법을 가능한 한 구체적으로 설명합니다. 일부 단계의 경우, 소프트웨어가 사용 중인 하드웨어에 상당 부분 의존하고 있기 때문에 정확도가 떨어질 수 있습니다. 이러한 경우를 위해 이 부분에는 상위 레벨에서 단계들을 나열하고 있어 하드웨어와 관련이 있는 세부 정보를 직접 찾아봐야 합니다.
각각의 방법 단계들은 다음과 같습니다.
단계 | 내용 |
---|---|
프로젝트 생성 | STM32CubeMX에서 빈 프로젝트 생성 |
실행 중인 CPU | MCU가 원하는 속도로 실행 중인지 확인 |
내부 RAM에서 프레임 버퍼를 가지는 디스플레이 | 내부 RAM에서 프레임 버퍼를 할당하고 이를 디스플레이에 전송 |
외부 RAM | 외부 RAM 활성화 |
외부 RAM에서 프레임 버퍼를 가지는 디스플레이 | 외부 RAM으로 프레임 버퍼를 옮기고 이를 디스플레이에 전송 |
주소 지정이 가능한 외부 플래시 | 메모리 매핑된 외부 플래시 활성화 |
블록 모드의 외부 플래시 | 블록 모드의 외부 플래시 활성화 |
하드웨어 가속 | Chrom-ART 그래픽 가속기 활성화 |
터치 컨트롤러 | 터치 컨트롤러에 대한 통신 설정 |
물리적 버튼 | 물리적 버튼에 대한 액세스 구성 |
플래시 로더 | 외부 플래시에 데이터를 기록하는 방법 개발 |