본문으로 건너뛰기

M04.04 · SPI·I2C/TWI·EEPROM

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • SPI의 모드/프레이밍·비트 순서와 값의 바이트 순서/관측 유효성을 구분한다.
  • I2C의 주소 공간/방향·ACK/NACK·전체 전송 예산과 실패/지연을 판정한다.
  • EEPROM의 별도 공간·쓰기 예산과 주어진 기록의 schema/범위·CRC/commit 유효성을 비교해 복구/미확인을 설명한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M04.03의 획득/결과 출처·sampling/driver 구분이 선수다. 가상 버스/기록표를 종이로 읽으며 일반 C/C++ 문법/버스 쓰기 코드를 요구하지 않는다. 실제 배선/장비 전송·EEPROM 쓰기/정전 시험·펌웨어 실행은 수행하지 않는다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

바이트가 왔다는 사실과 센서/설정이 유효하다는 판단은 다르다

센서 버스가 응답하고 EEPROM에 숫자가 남아 있어도 최신 관측/맞는 단위·현재 펌웨어에서 유효한 설정인지는 별도다. M04.03의 raw/변환/시각 구분을 버스 프레임·저장 기록으로 확장한다. 주소/모드·전송량·실패/버전이 먼저 맞아야 한다.

이 단위의 센서는 실제 제품이 아닌 가상 대상이다. 읽기 opcode/레지스터·바이트 의미와 기록의 CRC/commit 상태는 제공 입력이다. 실제 칩에 이 바이트를 전송하는 절차가 아니다. 공통 버스 원리와 ATmega328P의 해당 모드/내부 EEPROM을 참고하며 다른 장치/라이브러리에 숫자를 그대로 복사하지 않는다.

SPI는 clock/선택·샘플 edge와 대상의 프레임을 맞춘다

SPI의 이 예제에서는 전송을 주도하는 controller가 SCK/MOSI를 내보내고 대상이 MISO로 데이터를 돌려준다. CS는 이번 가상 대상의 active-low 선택 신호다. 두 장치의 역할/모드·bit 순서/clock·선택 구간을 함께 확인한다. 용어/핀 이름은 실제 문서와 대조한다.

SPI와 I2C의 선로 계약: SPI → I2C/TWI → 각 대상의 명세 → 완료 기록.그림 원본 크기로 보기

그림 M04.04-1. 각 칸은 서로 다른 역할/근거다. 나란히 비교할 항목이며 위아래가 시간 순서를 뜻하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.

mode0(CPOL0/CPHA0)은 clock이 idle-low이고 첫 상승 edge에서 샘플하는 규약이다. 다른 모드의 상대와 연결해도 우연히 바이트가 보일 수 있으나 그 결과를 정상으로 보장할 수는 없다. Microchip 데이터시트의 §18 SPI 모드를 참고한다.

가상 계약은 mode0·MSB-first·SCK1MHz, CS를 내린 뒤 읽기 명령0xA0·레지스터0x10·dummy0x00두개를 보내고 CS를 올린다. 처음 두 수신 바이트는 이 계약에서 사용하지 않고, 다음0x01/0x02가 unsigned16 big-endian 값의 payload라고 주었다.

순서보내는 바이트가상 수신/의미
10xA0이계약의명령구간·수신값미사용
20x10레지스터선택·수신값미사용
30x00payload첫바이트0x01
40x00payload둘째바이트0x02

4B×8=32clock, 이상 선로 시간은32/1000000=32µs다. CS setup/hold·장치 응답/처리·간격/호스트 지연은 제외했다. 이 opcode/프레임은 가상 대상의 명세이며 SPI 자체의 공통 읽기 명령이 아니다.

MSB-first는 각 바이트 안의 bit 순서다. 여러 바이트의 수치 순서와는 다르다. 주어진 big-endian 값은0x0102=258이고, 같은 두 바이트를 little-endian으로 해석하면0x0201=513이다. 같은 샘플의 두 바이트가 고정돼 나오는지, 중간에 측정값이 바뀔 수 있는지는 대상의 burst/latch·증분 주소 규약을 추가로 확인해야 한다. 빠르게 읽었다는 사실만으로 같은 시점의 관측이 되는 것은 아니다.

I2C의 7bit 주소·선로 방향 비트·내부 레지스터 주소를 나눈다

I2C는 SDA/SCL을 쓰는 버스다. 이 단위는 Standard-mode/7bit 주소의 예이며 TWI는 이 장치에서 관련 인터페이스를 부르는 이름이다. open-drain/pull-up·선로 부하/논리 조건과 양쪽 지원 모드를 확인한다. NXP UM10204 Rev.7.0의 §3.1을 참고한다. 다른 속도/10bit 주소·특수 모드까지 그대로 확장하지 않는다.

가상 대상의 7bit 주소는0x68이다. 선로의 주소 바이트는 주소7bit 뒤에 방향 bit를 붙여 write0xD0·read0xD1이 된다. 가상 driver API는7bit를 받으므로 인수는0x68이다. 어떤 API가7bit/8bit 표기를 요구하는지 실제 계약을 확인한다. 센서 내부 레지스터0x10은 또 다른 주소이며0x68이나0xD0의 별칭이 아니다.

가상 대상에서 레지스터0x10부터 두 바이트를 읽는 순서는 START → 주소W0xD0/ACK → 레지스터0x10/ACK → repeated START → 주소R0xD1/ACK → 데이터0x01/ACK → 데이터0x02/NACK → STOP이다. 주소/포인터·연속 읽기 의미는 이 대상의 계약이다. repeated START를 썼다고 내부 측정/레지스터 쌍의 동시성이 자동 보장되지는 않는다.

주소W·레지스터·주소R·두 데이터로5B, 각각8bit와ACK/NACK clock1개가 있어45SCL펄스다.100kHz의 이상 clock 구간은450µs다. START/STOP/설정·hold·clock 늘어남·큐/처리 시간은 추가다. payload16bit만 세어160µs라고 하면 주소/레지스터·응답 구간을 누락한다.

마지막 읽기 바이트 뒤 controller의 NACK는 이 전송을 끝내겠다는 정상 신호다. 주소에 대한 NACK·timeout과 같은 오류로 취급하지 않는다. 반대로 ACK가 있었다는 사실도 새 측정/맞는 단위/정상 센서의 보증이 아니다. 어느 단계/대상이 응답했는지와 받은 길이·상태/원본 시각을 기록한다.

계산한 버스 clock과 실제 완료 시간은 다르다

ATmega328P의 이 TWI 모드에서 실제 CPU clock16MHz·TWBR72·prescaler1이면 SCL 계산값은16000000/(16+2×72×1)=100kHz다(§21). clock/분주·pull-up/부하와 실제 선로 조건을 확인한다. clock stretching을 사용하는 대상이나 여러 controller의 중재·소프트웨어 처리로 전체 시간이 더 늘 수 있다.

앞의 SPI32µs/I2C450µs는 서로 다른 clock과 프레임의 제공 예제 구간 계산이다. 모든 센서에서 어느 버스가 더 정확/빠르다는 실험 결과가 아니다. 실제 timeout/오류·부분 전송, 중간 업데이트·호스트의 대기/미확인을 따로 남긴다. 재시도/상태기계는 M04.05로 연결한다.

내부 EEPROM은 센서 버스도 무한한 로그 RAM도 아니다

여기서 EEPROM은 ATmega328P 내부의 별도1KiB 비휘발 공간이다(§7.4). 앞선 가상 I2C 센서나 외부 I2C EEPROM을 뜻하지 않는다. 외부 저장 부품은 주소/페이지·쓰기/대기/완료 규약이 따로 있으므로 내부 용량/시간을 복사하지 않는다.

설정/보정·버전을 남길 수 있지만 쓰기 시간/내구·전원 조건을 확인해야 한다. 데이터시트의 erase+write3.4ms는 해당 동작의 typical 예이며 모든 기록의 최대 완료 시간이나 SRAM 쓰기 속도가 아니다. 레코드가 여러 바이트면 순서/완료와 전원 변화도 확인한다.

계획용 가정을 '한 셀에100000회·업데이트마다 같은 셀을1번·100updates/s'로 두면100000/100=1000s,16분40초다. 이때까지 보장되거나 정확히 그때 고장난다는 수명 예측이 아니다. 실제 조건/셀별 쓰기·메타데이터 반복/분산과 driver 동작이 남아 있다. raw 센서를 고속 반복 저장하는 RAM처럼 사용하지 말고 기록 목적/쓰기 빈도·변경만 저장하는 정책과 검증 범위를 정한다.

기록의 검사/commit과 설정 복구·출력 재개를 나눈다

다음은 실제 EEPROM을 쓰지 않고 주어진 기록 상태를 판단하는 모형이다. 유효 규칙은 schemaS1, sample_period_ms1~1000, CRC검사통과, commit1이다. seq는 예제 구간에서 wrap없이 증가한다고 가정한다. 유효한 기록 중 최신 seq를 고르며, 같은 seq의 서로 다른 내용/알 수 없는 규칙은 임의로 정상 처리하지 않는다.

기존 slotA는 seq10/period20ms/S1·CRC통과/commit1이다. 새 slotB도 schemaS1이라고 주었다. B의 다른 상태를 바꿔 보자.

새 B의 상태선택이유
seq11/period10·CRC실패/commit1A손상/불일치기록을새설정으로쓰지않음
seq11/period10·CRC통과/commit0A미완료후보기록
seq11/period10·CRC통과/commit1B이모형의모든검사충족
seq11/period0·CRC통과/commit1A범위위반·CRC만으로의미가유효하지않음

두 slot 모두 무효면 설정을 미확인/복구 실패로 두고, 확인되지 않은0이나 예전값으로 정상 출력을 만들어 쓰지 않는다.

CRC 결과는 제공 입력이며 이 단원에서 CRC/쓰기/복구 코드를 구현한 것이 아니다. CRC는 인증이나 물리적 타당성도 보장하지 않는다. 설정10ms가 형식 범위를 만족해도 실제 센서의 대역/처리/안전에 충분한지는 추가 확인이다.

새 slot에 내용/검사를 남긴 뒤 commit하고 기존 유효본을 보존하는 개념은 부분 쓰기를 구별하는 설계에 도움이 된다. 하지만 byte의 원자성·쓰기 순서/완료·저전압/정전 중 손상·복구 규칙을 실제 장치에서 검증하지 않고 정전 안전을 보장했다고 말하지 않는다. 여기서는 주어진 표의 선택/거부가 범위다.

설정을 읽어 복구한 일과 모터 출력을 재개하는 일도 다르다. 현재 관측/권한·장치 상태/감독 전제를 확인하기 전 과거 저장값으로 자동 동작했다고 보고하지 않는다. 다음 단위에서 요청/만료·상태 전이를 다룬다.

센서 원본에서 호스트까지 계약을 이어 적는다

SPI/I2C의 대상/장치·모드/clock/주소·CS/프레임·비트/바이트 순서, 수신 길이/응답·오류/timeout·원본/수신 시각을 나눈다. EEPROM은 공간/기록 schema·버전/단위/범위·검사/commit과 복구 선택·실제 미확인을 남긴다. 버스 ACK나 저장 완료를 전체 로봇/센서 성과로 바꾸지 않는다.

기존 4.4 센서 시간 정합과 M04.03의 출처/획득 시각·alias/driver를 연결한다. 기본 완료는 제공 프레임/기록의 계산과 의미·한계를 설명한 상태이며 실제 통신/쓰기/정전/장비 실증과 별개다.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

가상 센서 프레임과 A/B 기록표를 종이나 메모로 읽는다. 실제 장치에 바이트를 보내거나 EEPROM을 쓰지 않는다.

  1. SPI mode0/CS·MSB-first와 두 payload 바이트의 순서를 구분하고32µs·258/513을 계산한다. burst의 동시성에 필요한 대상 규약도 적는다.
  2. I2C의 API주소/선로방향주소·레지스터를 나누고 두 바이트 읽기의45펄스·450µs를 계산한다. 마지막 NACK와 주소 NACK/timeout을 구분한다.
  3. 내부 EEPROM의 공간/쓰기 시간·가정한 내구 예산을 계산하고, 새 B의 네 경우에 A/B를 선택한다.
  4. 부분 전송/쓰기·손상/범위 위반·현재 미확인과 설정 복구/출력 재개의 차이를 기록한다.

막히면 '주소' 옆에 API7bit/선로8bit/내부 레지스터/EEPROM 공간을 붙인다. bit 순서와 여러 바이트의 수치 순서도 나누고, 성공 응답/CRC만으로 새롭고 유효하다고 채우지 않는다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

SPI 수신이 성공했고 MSB-first라 두 payload0x01/0x02를 언제나258·최신 동일시각 측정이라고 한다. 주어진 big-endian/little-endian·mode/CS/clock과 대상의 갱신 계약을 구분해 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

7bit API에0xD0을 넣고, I2C 두 바이트 읽기를16bit/100kHz=160µs로 보고했다. 제공 프레임의 주소/방향·ACK/NACK와 전체 선로 예산을 바로잡아라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

같은 셀100updates/s·100000회 가정과 slotA가 유효한 상태다. B가 seq11/period0·CRC통과/commit1이면 새 설정/출력을 재개해도 되는가? 내구 예산·기록 유효성과 실제 정전/현재 상태를 나누어라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.