iokit을 통해 Apple Silicon MacBook에서 문서화되지 않은 MEMS 가속도계 읽기
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에 실린 기사 읽기
![]()
작동 원리
센서는 IOKit 레지스트리의 AppleSPUHIDDevice 아래에 존재하며, 벤더 사용 페이지 0xFF00, 사용 ID 3을 사용합니다.
드라이버는 AppleSPUHIDDriver이며, SPU의 일부입니다.
IOHIDDeviceCreate로 디바이스를 엽니다.IOHIDDeviceRegisterInputReportCallback을 통해 비동기 콜백을 등록합니다.- 데이터는 22바이트 HID 리포트 형태로 도착하며, X/Y/Z는 바이트 오프셋 6, 10, 14에 있는
int32리틀엔디안 값입니다. - 각 값을 65536으로 나누어 가속도(g) 단위로 변환합니다.
- 콜백 호출 빈도는 약 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 또는 어떤 고용주와도 제휴되지 않았습니다.