데이터시트와 센서 통신
전압·주소·형식을 읽어 I2C 센서와 UART·SPI 시뮬레이터를 연결합니다.
진도 0%
레슨
- 가상 센서 명세 읽기
제공할 자체 센서 명세에서 전압·7비트 주소·레지스터·단위·시간 제한을 찾아 표로 제출합니다.
- 원시값·단위와 ADC 변환
12비트 ADC와 부호 있는 16비트 센서 값을 정수 단위로 변환하고 경계를 검사합니다.
- I2C 주소와 오류 처리
가상 주소 0x48의 두 바이트 센서 읽기에 NACK·분리·시간 초과 반환을 구현합니다.
- 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의 대응이 드러납니다.
- 하드웨어 의존 경계와 실패 처리의 선택 이유를 설명합니다.
- 미션별 측정·관찰 증거를 실제 실행한 결과로 남깁니다.