Devin.KR

데이터시트와 센서 통신

전압·주소·형식을 읽어 I2C 센서와 UART·SPI 시뮬레이터를 연결합니다.

진도 0%

레슨

  1. 가상 센서 명세 읽기

    제공할 자체 센서 명세에서 전압·7비트 주소·레지스터·단위·시간 제한을 찾아 표로 제출합니다.

  2. 원시값·단위와 ADC 변환

    12비트 ADC와 부호 있는 16비트 센서 값을 정수 단위로 변환하고 경계를 검사합니다.

  3. I2C 주소와 오류 처리

    가상 주소 0x48의 두 바이트 센서 읽기에 NACK·분리·시간 초과 반환을 구현합니다.

  4. UART 프레임과 SPI 기록 저장

    UART 길이·검사합 프레임과 SPI 모드·CS 순서를 구현해 링 버퍼 데이터를 전송·저장합니다.

데이터시트와 센서 통신 미션

m05-timer-events의 산출물을 이어받습니다. 독립 starter에도 직전 모듈의 검증된 산출물을 포함합니다. 센서 기록기와 상태 표시 장치를 PC에서 완성합니다.

요구사항

  • 100ms 수집 경로에 가상 I2C 온도 센서·ADC 보조 입력·UART 전송·SPI 저장 HAL을 붙이고 연결 및 통신 규격을 작성합니다.
  • C 코드는 gcc -std=c11 -Wall -Wextra -Werror로 빌드하고 Python 보조 코드는 표준 라이브러리만 사용합니다.
  • m05 solution의 소스와 회귀를 보존합니다. buses.c의 시간 초과·UART 검사합 TODO를 완성하고 메인 소비 경로에 bus_consume을 연결합니다.
  • 자체 가상 데이터시트는 3.3V 전원·입력 허용 0~3.3V·I2C 주소 0x48·레지스터 0x00·big-endian int16·1LSB=1/256도·시간 초과 20ms를 명시합니다. UART는 8N1·길이·XOR 검사합, SPI는 mode0·활성 낮음 CS로 정의합니다.
  • 기존 Buffer raw에는 ADC 원시값, UART/SPI에는 temp_mc와 adc_mv 정수 단위를 사용합니다. 고정 append 저장은 full을 거부하며 실패 시 새 기록을 공개하지 않습니다.
  • 가상 BUS-SPEC.md와 실제 make test 로그를 제출합니다. 실패한 SPI 쓰기 뒤에도 CS를 해제하며 ISR에서는 통신하지 않습니다.

완료 기준

  • 미션 압축 해제 디렉터리에서 make test가 종료 코드 0으로 끝나고 기존 모듈의 회귀 검사도 통과합니다.
  • 0xFF80은 -0.5도에 대응하는 -500밀리도이며 ADC 4095는 기준전압 3300mV이고 잘못된 주소·NACK·CS 누락·UART 검사합 오류는 구별된 코드로 거부됩니다.
  • sensor-buses: 79 cases, 0 failures이며 100~1000ms 수집 10회·분리 후 보존·지연 소비 시각·UART 공간 부족·SPI full 뒤 CS 해제를 확인합니다.
make test
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 요구사항과 테스트 fixture의 대응이 드러납니다.
  • 하드웨어 의존 경계와 실패 처리의 선택 이유를 설명합니다.
  • 미션별 측정·관찰 증거를 실제 실행한 결과로 남깁니다.