2020년 6월 8일 월요일

Linux Device Driver for Embedded Processors 에피스드 2 - STM32MP157C Discovery Kit 소개

지난 주에 주문한 STM32MP157C Discovery Kit($99 - 배송비 포함하면 12~13만원 정도)가 일주일만에 도착했다. 😎  



참고: STM(ST Micro)은 익히 알고 있는 바와 같이 ARM Cortex-M microcontroller 업계의 선두 주자이다.

항상 느끼는 것이지만 새로운 보드를 접하는 것은 언제나 설레는 일이다. 😋  앞으로 이 보드를 이용해 몇차례에 걸쳐 다양한 주제를 다뤄 보도록 하겠다.


목차
1. STM32MP157C Discovery Kit 소개
8. References


내용이 길어질 수 있으니 이번 posting에서는 우선 STM32MP157C Discovery Kit 소개 부분만을 먼저 정리해 보기로 하겠다.

1.  STM32MP157C Discovery Kit 소개
STM32MP157C Discovery Kit(이하 DK2 보드라고 칭하겠음)는 STM(ST Micro)의 주력 기술인 Cortex-M4 micom(ST firmware를 탑재)과 32bit Cortex-A7 microprocessor(Linux or Android 탑재)를 하나로 합쳐 놓은 아주 재밌는 보드이다.

사실 이러한 형태의 보드는 일전에 아래 posting(UDOO Neo 보드)을 통해 한차례 소개한 바 있다. 따라서 두 보드 간의 차이를 분석해 보는 것도 재밌을 듯하다.

a) DK2 보드 개요
우선 DK2 보드 외관은 아래와 같다. 크기는 (남자) 손바닥 보다는 작고, Raspberry Pi 보다는 좀 큰 느낌이다.

[그림 1.1] STM32MP157C-DK2 top & bottom view - LCD를 제거한 모습

[그림 1.2] LCD가 장착된 모습

다음으로 DK2 보드의 주요 특징(H/W 특징)과  CPU core의 block diagram을 연이어 정리해 보면 다음과 같다.

CPU: Cortex-A7 Micro processor + Cortex-M4 Micro controller
OS: Linux(or Android) + ST code 기반의 firmware(or FreeRTOS 등 탑재 가능)
주요 주변 장치: 4인치 TFT LCD(MIPI DSI), HDMI, 1Gbps Ethernet, 802.11 b/g/n Wi-Fi, BLE 4.1
40 pin Raspberry Pi connector, Arduino Uno connector...
PMIC: STPMIC1A
Power input: 5V/3A
...

====================================================================
====================================================================

[그림 1.3] STM32MP157 Block diagram

b) DK2 보드 상세 소개
DK2 보드 전체의 block diagram을 그려보면 다음과 같다. 실제 DK2 보드에 대한 회로도(schematic)를 살펴보기 전에 block diagram을 훑어 보면 회로도를 이해하기가 좀 더 수월해 질 수 있다.


[그림 1.4] STM32MP157 Block diagram(2)
참고: 위의 그림을 보면 PMIC(STPMIC1), Touch panel, USB Type-C, Audio DAC, HDMI 등이 i2c를 사용하는 것을 알 수 있다.


<짝퉁(?) 개발자의 보드 분석 절차>
    1) brochure or 보드의 개요를 설명하는 문서를 훑어 봄.
    2) user manual을 꼼꼼히 읽어 봄.
            -> 전체적인 보드 구성(block diagram)을 파악해 보고, 상호 어떻게 연결되어 있는지를 살펴 봄.
            -> 상호 연결이라 하면, CPU(or MPU)와 주변 장치의 pin 연결 관계를 말함.
    3) 회로도를 훑어 봄.
            -> PMIC, USB power 부분
            -> RAM 연결 부분
            -> 나머지 주변 장치 연결 부분(LCD - MIPI DSI, HDMI, Audio, SD/MMC, Ethernet, Wi-Fi/BT, LED/Buttons, GPIO expansion 등)
    4) 여기까지 한 후, 부팅이 가능한 상태라면 부팅해 보고, 그렇지 않다면 ... 보드를 살리는 작업 시작함. 
    5) 보드 => 회로도/block diagram => device tree => device driver 개발로 이어짐.


[그림 1.5] STM32MP157 Schematic(1)


[그림 1.6] STM32MP157 Schematic(2)


다음으로 아래 3개의 그림(그림 1.7 ~ 1.9)은 DK2 board를 구성하는 내용(요소)을 상세히 보여준다.

[그림 1.7] STM32MP157C-DK2 top view



[그림 1.8] STM32MP157C-DK2 bottom view


[그림 1.9] STM32MP157C-DK2 MIPI DSI LCD 연결

최신 (규모가 좀 커다란) embedded board를 구성하는 요소 중 중요한 부분을 차지하는 것 중의 하나는 단연 PMIC(Power Management IC)가 아닐까 싶다. 아래 그림 1.10 ~ 1.12는 DK2 보드에 장착되어 있는 STPMIC1 chip에 관한 내용을 소개하고 있다. STPMIC1은 CPU(STM32MP1)는 물론이고 주변 장치(RAM, USB, Wi-Fi, BT, Micro SD 등)의 power를 control하는 역할을 담당한다.

[그림 1.10] STPMIC1 PMIC chip


[그림 1.11] STPMIC1 PMIC chip block diagram



[그림 1.12] STPMIC1 PMIC chip의 역할

다음으로 확인해 볼 사항은 DK2 보드의 gpio pinout과 더불어 전체((STM32MP1 SoC Ball) pinout(각 pin의 용도)에 관한 것이다. 지면 관계상 모든 pin의 용도를 기술할 수는 없지만, device driver 구현 시(특히 pinmux 설정 관련) pinout 내용을 제대로 알고 있는 것이 도움이 된다.

...
[그림 1.13] DK2 보드 GPIO connector pinout


...
[그림 1.14] DK2 보드 pinmap(I/O assignment)

c) DK2 보드 부팅하기
DK2 보드에는 (가격적인 이유로) SPI Flash나 eMMC 등이 포함되어 있지 않다. 따라사 SD card(micro SD)를 통한 부팅(아래 그림 우측)만이 가능하며, flash memory에 writing하는 상황을 대비하여 USB booting 모드(아래 그림 좌측)를 제공하고 있다.

[그림 1.15] STM32MP157C-DK2 부팅 모드 switch


이상으로 DK2 보드에 관한 내용을 대략적으로 살펴 보았으니, 이제 전원을 넣어 부팅을 시도해 보도록 하겠다. 불행하게도 (가격적인 이유로) DK2 보드 제품 패키지에는 power input(5V/3A) adapter(USB C type)가 포함되어 있지 않다(단, USB C to C cable은 포함되어 있음). 다행히 5V/2A 이기는 하지만 USB B to C adapter가 하나 있어, 이를 사용하여 부팅을 시도해 보기로 한다.
참고: DK2 package에는 부팅용 image가 포함되어 있는 microSD가 장착되어 있다.

minicom 115200, 8N1, /dev/ttyACM0

부팅 시, u-boot에서 아래와 같이 warning message를 출력하기는 하지만, 이후 문제 없이 부팅이 이루어 진다.

[그림 1.16] u-boot warning message 출력

[그림 1.17] DK2 보드 부팅 모습

와우, LCD에 예쁜 UI가 출력되었다. (당연히)touch도 먹힌다.

[그림 1.18] 보드 설치 모습
<target board>
# /usr/bin/python3 /usr/local/demo/demo_launcher.py

참고: 위의 UI는 Qt로 만든 것이 아니라 python3로 구현(GTK 기반)한 것이다.


2. Firmware(부팅 image) 설치하기

[그림 2.1] STM32MP1 S/W Architecture


  => prebuilt image 사용 방법 소개

   => kernel/bootloader source 사용 방법 소개

   => OpenEmbedded(Yocto Project) 기반

   => buildroot 이용하는 방법(by Bootlin)

To be continued...



8. References
    => DK2 board introduction pages
    => Data brief document
    => User manual
    => DK2 board schematic
    => PMIC introduction pages
    => PMIC data brief(data sheet)
    => PMIC overview document
    => 다양한 manual 문서 



Slowboot





댓글 없음:

댓글 쓰기