콘텐츠로 바로가기

now0930 일지

이런저런 생각

  • 홈
  • 비공개
  • 강좌
  • 잔여 작업 조회
  • 위치

i2c 세부 사항

slva704다운로드

I2C의 **중재(Arbitration)**는 여러 개의 마스터가 동시에 대화를 시작하려고 할 때, **”교통정리”**를 하는 아주 똑똑한 규칙입니다.

앞서 배운 **오픈 드레인(Open-Drain)**과 **와이어드 AND(Wired-AND)**의 특징을 생각하면 아주 쉽게 이해할 수 있습니다. 핵심은 **”0(Low)을 보낸 사람이 1(High)을 보낸 사람을 이긴다”**는 것입니다.


1. 중재의 핵심 원리: “말하면서 듣기”

I2C 마스터들은 데이터를 보낼 때 그냥 던지기만 하는 게 아니라, **내가 보낸 데이터가 선(SDA)에 똑같이 나타나고 있는지 실시간으로 확인(모니터링)**합니다.

  • Logic 1을 보낼 때: 마스터는 스위치를 엽니다. (풀업 저항에 의해 선이 High가 되길 기대함)
  • Logic 0을 보낼 때: 마스터는 스위치를 닫아 선을 바닥(GND)으로 강제로 끌어내립니다.

2. 중재 과정 (Step-by-Step)

상황: 마스터 A와 마스터 B가 정확히 동시에 통신을 시작했다고 가정해봅시다.

  1. 비트 단위 비교: 두 마스터는 각자의 데이터를 한 비트씩 보냅니다.
  2. 공통 구간: 처음 몇 비트가 둘 다 ‘0’이거나 둘 다 ‘1’이라면, 두 마스터는 서로 다른 누군가가 같이 말하고 있다는 사실을 전혀 모른 채 계속 전송합니다.
  3. 충돌 발생 (결정적 순간):
    • 마스터 A: 이번 비트에서 **’1′(High)**을 보내려고 스위치를 열었습니다.
    • 마스터 B: 이번 비트에서 **’0′(Low)**을 보내려고 선을 꽉 붙잡아 내렸습니다.
    • 결과: SDA 선은 마스터 B 때문에 **’0′(Low)**이 됩니다. (Wired-AND 특성)
  4. 패배자 발견: ‘1’을 보냈던 마스터 A는 선을 확인해보니 ‘0’이 되어 있는 것을 발견합니다. “어? 난 1을 보냈는데 선은 0이네? 나보다 우선순위가 높은 누군가가 있구나!”라고 판단합니다.
  5. 즉시 항복: 마스터 A는 그 즉시 전송을 중단하고 손을 뗍니다. 이를 **’중재 패배’**라고 합니다.
  6. 승자 계속: 마스터 B는 자기가 보낸 ‘0’이 선에도 그대로 ‘0’으로 나타나므로, 방해받지 않았다고 생각하고 계속 데이터를 보냅니다. 이를 **’중재 승리’**라고 합니다.

3. 왜 I2C 중재가 훌륭한가요?

  • 데이터가 깨지지 않음: 승리한 마스터(마스터 B)는 상대방이 중간에 포기했다는 사실조차 모를 정도로 신호에 아무런 간섭을 받지 않고 통신을 이어갑니다.
  • 하드웨어 자동 처리: 개발자가 코드로 “누가 먼저 보낼지” 정해줄 필요가 없습니다. 칩 내부의 로직이 알아서 처리합니다.
  • 자연스러운 우선순위: 주소 값이 낮은 장치(앞부분에 ‘0’이 더 많은 장치)가 자연스럽게 우선순위를 갖게 됩니다.

요약하자면

I2C 중재는 **”누가 더 먼저 선을 Low(0)로 당기느냐”**를 겨루는 게임입니다.

‘1’을 보내며 버스 상태를 관찰하던 마스터가, ‘0’을 보내며 선을 장악한 마스터에게 조용히 자리를 양보하는 질서 정연한 방식입니다.

이해가 좀 더 되셨나요? 중재가 끝난 뒤 패배한 마스터가 어떻게 행동하는지 등 추가로 궁금한 점이 있으시면 말씀해 주세요!

이 글 공유하기:

  • Tweet
발행일 2025-12-24글쓴이 이대원
카테고리 산업계측제어기술사 태그 arbitration, i2c, isquarec, 중재

댓글 남기기응답 취소

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.

글 탐색

이전 글

12월23일 달리기

다음 글

Charge-to-Voltage Converter

2026 3월
일 월 화 수 목 금 토
1234567
891011121314
15161718192021
22232425262728
293031  
2월    

최신 글

  • 현대전력전자공학, 5장 2026-02-25
  • 현대전력전자공학, 4장 2026-02-20
  • 현대전력전자공학, 2장 2026-02-20
  • 현대전력전자공학 1장 2026-02-19
  • code assistant 사용 소감 2026-02-19

카테고리

  • 달리기
  • 산업계측제어기술사
  • 삶 자국
    • 책과 영화
    • 투자
  • 생활코딩
    • LEGO
    • ROS
    • tensorflow
  • 전기기사
  • 피아노 악보

메타

  • 로그인
  • 입력 내용 피드
  • 댓글 피드
  • WordPress.org

페이지

  • 소개
  • 잔여 작업 조회
    • 작업 추가
    • 작업의 사진 조회
    • 작업 수정 페이지
  • 사진
    • GPS 입력된 사진
    • 사진 조회
  • 위치
    • 하기 휴가 방문지
    • 해외 출장

태그

android bash c docker driver FSM gps java kernel LEGO linux mysql network program opcua open62541 plc programmers python raspberry reinforcementLearning ros state space system program tensorflow transfer function 경제 달리기 러닝 미국 민수 삼국지 세계사 실기 역사 일본 임베디드 리눅스 전기기사 조선 중국 채윤 코딩 테스트 통계 한국사 한국어

팔로우하세요

  • Facebook
now0930 일지
WordPress로 제작.