[Rust 공식문서 한국어 정리] 60. Rust 임베디드 HAL 가이드
[Rust 공식문서 한국어 정리] 60. Rust 임베디드 HAL 가이드
원문 제목: embedded-hal — Hardware Abstraction Layer
작성자: Rust Embedded Working Group
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 embedded-hal 크레이트가 제공하는 임베디드 하드웨어 추상화 계층(HAL)을 소개합니다.
다양한 마이크로컨트롤러에서 공통으로 사용할 수 있는 GPIO, SPI, I2C, UART, PWM 등의 인터페이스를 다룹니다.
HAL 트레이트를 구현하는 PAC(Peripheral Access Crate)와, HAL 기반으로 작성된 플랫폼 독립적 드라이버의 개념을 중심으로 설명합니다.
임베디드 Rust 생태계의 핵심 표준 인터페이스로서, 코드의 이식성과 재사용성을 극대화하는 방법을 제시합니다.
MCU 펌웨어 개발과 임베디드 드라이버를 작성하려는 Rust 개발자에게 필수적인 기반 지식입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① embedded-hal: 임베디드 주변 장치를 추상화하는 공통 트레이트 집합입니다.
② PAC: 특정 MCU의 레지스터를 타입 안전하게 매핑한 저수준 크레이트입니다.
③ Implementation: PAC 위에 embedded-hal 트레이트를 구현하여 특정 칩용 HAL을 제공합니다.
④ Driver: HAL 트레이트에 의존하여 특정 칩에 구애받지 않는 주변 장치 드라이버를 작성합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
embedded-hal은 입출력, 디지털, 아날로그, 직렬 통신 등을 트레이트로 정의합니다.
InputPin, OutputPin, Spi, I2c, Uart, Pwm, ADC 등의 트레이트가 포함됩니다.
각 트레이트는 블로킹(blocking) 버전과 논블로킹(nb) 버전을 모두 제공합니다.
PAC은 svd2rust 도구로부터 특정 MCU의 SVD 파일을 분석하여 생성됩니다.
레지스터와 필드를 Rust 타입으로 매핑하며, HAL 구현의 기반으로 사용됩니다.
PAC은 칩 벤더별로 제공되며, stm32-pac, nrf-pac, rp2040-pac 등이 있습니다.
HAL 구현체는 PAC을 사용하여 embedded-hal 트레이트를 구현합니다.
예를 들어 stm32f4xx-hal은 stm32f4 PAC의 레지스터를 제어하여 InputPin, Spi 등을 구현합니다.
사용자는 HAL 트레이트에 대해 코딩하므로, 동일한 드라이버를 다른 MCU로 쉽게 이식할 수 있습니다.
플랫폼 독립적 드라이버는 HAL 트레이트를 제네릭 매개변수로 받습니다.
struct Driver { spi: SPI } 형태로, 구체적인 SPI 구현체에 의존하지 않습니다.
이를 통해 하나의 드라이버로 여러 HAL 구현체에서 동작하며, 생태계의 모듈화가 극대화됩니다.
embedded-hal-async는 async 버전의 HAL 트레이트를 제공합니다.
Embassy와 같은 비동기 임베디드 프레임워크와 함께 사용하여, 논블로킹 주변 장치 제어를 async/await로 구현합니다.
이는 이벤트 기반 임베디드 시스템에서 코드 복잡도를 크게 줄입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
새로운 센서 드라이버를 embedded-hal 트레이트에 맞춰 작성하여, 여러 MCU에서 재사용합니다.
Embassy와 embedded-hal-async를 조합하여 비동기 I2C/SPI 통신으로 여러 센서를 동시에 폴링합니다.
HAL 트레이트를 Mock으로 구현하여, 실제 하드웨어 없이도 드라이버 로직을 단위 테스트합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
embedded-hal은 임베디드 Rust의 핵심 표준 인터페이스로, 이식성과 모듈화를 가능하게 합니다.
PAC → HAL → Driver 계층을 이해하면 거의 모든 MCU 프로젝트에 Rust를 적용할 수 있습니다.
비동기 HAL은 현대적 임베디드 개발의 새로운 표준으로 자리 잡고 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://docs.rs/embedded-hal/latest/embedded_hal/
Rust Embedded Book: https://docs.rust-embedded.org/book/
#Rust #EmbeddedHAL #MCU #Embedded #IoT #Hardware #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30