iokit을 통해 Apple Silicon MacBook에서 문서화되지 않은 MEMS 가속도계 읽기

발행: (2026년 2월 20일 오후 02:06 GMT+9)
4 분 소요

Source: Hacker News

이것은 무엇인가

Apple Silicon 칩(M1/M2/M3/M4)에는 Sensor Processing Unit(SPU)에서 관리하는 찾기 어려운 MEMS 가속도계가 있습니다.
공개 API나 프레임워크를 통해 노출되지 않습니다. 이 프로젝트는 IOKit HID 콜백을 통해 약 800 Hz로 원시 3축 가속도 데이터를 읽어옵니다.

  • 현재까지 MacBook Pro M3 Pro에서만 테스트되었습니다 – 다른 Apple Silicon Mac에서도 동작할 수 있지만 보장은 없습니다.

자세한 내용: Medium에 실린 기사 읽기

demo

작동 원리

센서는 IOKit 레지스트리의 AppleSPUHIDDevice 아래에 존재하며, 벤더 사용 페이지 0xFF00, 사용 ID 3을 사용합니다.
드라이버는 AppleSPUHIDDriver이며, SPU의 일부입니다.

  1. IOHIDDeviceCreate로 디바이스를 엽니다.
  2. IOHIDDeviceRegisterInputReportCallback을 통해 비동기 콜백을 등록합니다.
  3. 데이터는 22바이트 HID 리포트 형태로 도착하며, X/Y/Z는 바이트 오프셋 6, 10, 14에 있는 int32 리틀엔디안 값입니다.
  4. 각 값을 65536으로 나누어 가속도(g) 단위로 변환합니다.
  5. 콜백 호출 빈도는 약 100 Hz입니다.

다음 명령으로 머신에 디바이스가 존재하는지 확인할 수 있습니다:

ioreg -l -w0 | grep -A5 AppleSPUHIDDevice

빠른 시작

git clone https://github.com/olvvier/apple-silicon-accelerometer
cd apple-silicon-accelerometer
pip install -r requirements.txt
sudo python3 motion_live.py

Apple Silicon에서 IOKit HID 디바이스에 접근하려면 루트 권한이 필요합니다.

코드 구조

  • spu_sensor.py – 핵심: IOKit 바인딩, 디바이스 탐색, HID 콜백, 공유 메모리 링 버퍼.
  • motion_live.py – 진동 감지 파이프라인, 심박 BCG, 터미널 UI, 메인 루프.

센서 읽기 로직은 spu_sensor.py에 분리되어 있어 독립적으로 재사용할 수 있습니다.

심박 데모

노트북 트랙패드 근처에 손목을 올려두고 신호가 안정될 때까지 10–20 초 정도 기다리세요.
이 데모는 심장 박동에 의해 발생하는 기계적 진동(볼리스토카디오그래피)을 이용합니다. 실험적인 것이며 신뢰할 수 없고, 센서가 포착할 수 있는 것을 재미있게 보여주기 위한 목적입니다.

  • BCG 밴드패스: 0.8–3 Hz
  • 필터링된 신호에 대한 자동상관을 통해 BPM 추정

참고 사항

  • 실험적 / 문서화되지 않은 AppleSPU HID 경로
  • sudo 필요
  • 향후 macOS 업데이트에서 동작이 중단될 수 있음
  • 위험을 감수하고 사용하세요
  • 의료용으로 사용 금지

테스트 환경

  • MacBook Pro M3 Pro, macOS 15.6.1
  • Python 3.14

라이선스

MIT

Apple 또는 어떤 고용주와도 제휴되지 않았습니다.

0 조회
Back to Blog

관련 글

더 보기 »