# 1. 하드웨어 드라이버 계층: `src/drivers/` 상세

# 1. 하드웨어 드라이버 계층: src/drivers/ 상세

비행 제어 로직이 아무리 아름다워도, 물리적인 센서에서 가속도 값을 읽어오지 못하거나 모터로 PWM 신호를 쏘지 못하면 드론은 한낱 고철에 불과하다. src/drivers/ 디렉토리는 0과 1의 소프트웨어 세계와 전자 회로의 아날로그 세계가 격돌하는 영점(Ground Zero)이다. 이곳의 코드는 수학이 아니라 통신 규격(I2C, SPI)과 데이터시트(Datasheet)의 레지스터 주소가 지배한다.

센서 종단 드라이버 (Sensor Endpoints)

  • src/drivers/imu/: Invensense(ICM 시리즈), Bosch(BMI 시리즈) 등 제조사별 IMU 칩셋 커스텀 드라이버들이 모여있다. 이 드라이버들의 핵심 임무는 버스(SPI/I2C)를 통해 날아온 칩셋 고유의 16비트/24비트 쓰레기(Raw) 헥스(Hex) 데이터를 섭씨, m/s^2, rad/s 단위의 국제표준단위계(SI Unit) 부동소수점(float)으로 스케일링(Scaling)하는 것이다. 변환된 데이터는 즉시 sensor_accel, sensor_gyro uORB 토픽으로 포장되어 시스템 버스에 던져진다.
  • src/drivers/magnetometer/barometer/: 나침반(지자기) 및 기압계 드라이버 역시 마찬가지다. 칩셋 온도에 따른 보정 상수(Calibration Parameter)를 공장 출하 데이터시트 공식에 대입하여 온도 편차를 상쇄하는 저수준 연산이 이곳에서 일어난다.
  • src/drivers/distance_sensor/: LiDAR, Sonar 등 고도 측정을 위한 거리 센서 드라이버들이다.

통신 및 페이로드 인터페이스

  • src/drivers/telemetry/: FrSky, TBS Crossfire 등 수신기 모델별 텔레메트리 프로토콜 파서들이 위치한다.
  • src/drivers/uavcan/ (또는 DroneCAN): 최신 드론 아키텍처의 총아인 CAN 버스 통신을 담당한다. 기존 PWM 선들의 묶음을 단 4가닥의 CAN 케이블로 대체하기 위해, 복잡한 노드(Node) 식별과 패킷 분할/재조립 로직이 거대하게 자리 잡고 있다.

드라이버 계층의 객체 지향 추상화
PX4 드라이버 코드를 열어보면 class BMI088 : public SPIpublic I2C 와 같은 상속 구조를 흔히 볼 수 있다. 칩셋 드라이버 자체는 src/lib/나 OS 코어에서 제공하는 범용 버스 클래스를 상속받아, 단순히 “내 칩의 0x12 레지스터를 읽어줘“라고 부모 클래스에게 명령만 내린다. OS가 NuttX든 리눅스든 상관없이 드라이버 코드를 그대로 재사용할 수 있게 만드는 객체 지향 추상화의 극치다. 드라이버 개발자는 통신 레이어를 신경 쓸 필요 없이 오직 센서의 레지스터 맵만 파고들면 된다.