nutblog

실무 기반 반도체 지식과 취업·직무 경험을 공유하는 엔지니어링 Blog 입니다.

  • 2025. 5. 1.

    by. nutblog

    멀티 마스터 I2C가 필요한 이유

    I2C 버스는 단순한 두 신호선만으로 통신을 수행할 수 있어 매우 간단하고 효율적인 구조를 가지고 있습니다. 대부분의 경우 하나의 마스터만 존재하는 구조로 사용되지만, 특정한 임베디드 시스템에서는 두 개 이상의 마스터가 버스를 공유해야 하는 경우가 존재합니다. 예를 들어, 이중화 MCU 시스템이나 독립된 기능을 수행하는 두 마스터가 필요할 때 멀티 마스터 구성이 필수가 됩니다. 하지만 단일 마스터 구성보다 고려할 요소가 많고 설계 난이도도 상승하게 됩니다.


    I2C 프로토콜의 멀티 마스터 지원 여부

    I2C 프로토콜 자체는 기본적으로 멀티 마스터를 허용하도록 설계되어 있습니다. 하지만 실제 사용하려는 MCU나 디바이스가 이 기능을 완전히 지원하지 않을 수 있습니다. 특히 저가형 MCU에서는 Collision Detection이나 Arbitration 기능이 생략되거나 제한적으로 작동하는 경우가 많습니다. 따라서 설계를 시작하기 전에 사용하려는 MCU의 데이터시트를 검토하여 멀티 마스터 기능이 지원되는지 확인하는 것이 우선입니다.


    마스터 간 우선순위 정의의 필요성

    멀티 마스터 환경에서는 두 마스터가 동시에 START 신호를 전송할 수 있습니다. 이를 방지하기 위해 소프트웨어적으로 마스터 간 우선순위를 정하고, 우선순위가 낮은 마스터는 일정 시간 대기한 후에 통신을 시도하도록 설계해야 합니다. 우선순위 기반 버스 점유 정책을 적용하면 충돌 가능성을 사전에 줄일 수 있습니다.


    Arbitration Lost 감지 방식 이해

    I2C에서는 SDA 라인의 상태를 통해 충돌 여부를 감지합니다. 마스터가 SDA를 Low로 출력했음에도 실제로는 High로 유지된다면, 이는 다른 마스터가 동시에 신호를 보내고 있다는 뜻입니다. 이 경우 Arbitration Lost가 발생하고, 해당 마스터는 통신을 즉시 중단해야 합니다. 일부 MCU는 이 기능을 하드웨어로 자동 지원하지만, 그렇지 않은 경우에는 펌웨어에서 직접 SDA 라인을 모니터링하는 로직을 구현해야 합니다.


    랜덤 백오프를 활용한 충돌 회피

    마스터 간 충돌을 줄이는 효과적인 방법 중 하나는 ‘랜덤 백오프’ 기법입니다. 각 마스터가 통신을 시작하기 전에 랜덤한 시간만큼 대기하게 되면, 동시에 START 조건을 발생시킬 확률이 낮아집니다. 이는 특히 동일한 이벤트로 동시에 트리거되는 구조에서 유용하게 작동하며, 단순하면서도 효과적인 방식입니다.


    슬레이브 디바이스의 반응 시간 고려

    멀티 마스터 환경에서는 슬레이브 디바이스가 연속적으로 다른 마스터의 요청을 받아야 할 수 있습니다. 이때 슬레이브의 응답 지연이 발생하면 마스터는 에러를 감지하고 통신을 종료할 수 있습니다. 슬레이브가 충분히 빠른 응답 시간을 제공하는지 확인하고, 슬레이브 내부에 ACK 지연을 최소화하는 로직이 있는지도 검토해야 합니다.

     

    I2C 멀티 마스터 시스템 설계 팁

     

    클럭 스트레칭 사용 시 주의점

    I2C는 기본적으로 클럭 스트레칭 기능을 지원하지만, 모든 디바이스가 이를 지원하는 것은 아닙니다. 마스터가 클럭을 제공하는 중에 슬레이브가 준비되지 않았을 경우, 슬레이브는 SCL을 Low로 유지하면서 시간을 벌 수 있습니다. 그러나 멀티 마스터 환경에서는 두 마스터가 서로 클럭 스트레칭을 유발할 수 있어 타이밍 충돌 문제가 발생할 수 있으므로, 사용 여부를 신중하게 결정해야 합니다.


    풀업 저항 값 조정의 필요성

    멀티 마스터 시스템에서는 I2C 라인에 연결된 디바이스 수가 많아짐에 따라 총 로드가 증가합니다. 이로 인해 신호의 상승 시간이 느려지고 타이밍 에러가 발생할 수 있습니다. 이를 보완하기 위해서는 풀업 저항 값을 일반적인 4.7kΩ보다 낮춘 2.2kΩ 수준으로 설정하거나, 필요시 버퍼를 삽입해 신호 품질을 유지하는 설계가 요구됩니다.


    로직 애널라이저를 통한 디버깅 접근법

    멀티 마스터 환경에서 통신 오류를 분석하려면 로직 애널라이저를 사용하는 것이 효과적입니다. SDA와 SCL 라인의 상태를 시간 축으로 확인함으로써 마스터 간 START 타이밍, ACK 오류, Arbitration Lost 등의 원인을 파악할 수 있습니다. 또한 MCU의 통신 에러 플래그나 로그 기능을 활용하면 시스템 상태를 보다 쉽게 진단할 수 있습니다.


    펌웨어 기반의 회복 루틴 구현

    실제 시스템에서는 마스터 중 하나가 비정상 종료되거나 슬레이브가 응답하지 않는 상황이 자주 발생할 수 있습니다. 이런 경우를 대비해 펌웨어 상에서 Timeout 감지, Bus Recovery 시퀀스, 버스 리셋 기능을 추가해야 전체 시스템이 정지되는 상황을 방지할 수 있습니다. 특히 SDA가 Low에 고정된 상태가 지속되면 수동으로 START/STOP 조건을 만들어 강제로 버스를 해제하는 방식도 필요합니다.


    안전한 멀티 마스터 구현을 위한 종합 정리

    멀티 마스터 시스템은 단순한 I2C 통신 구조를 복잡하게 만들지만, 신뢰성이 필요한 시스템에서는 반드시 고려해야 하는 요소입니다. 마스터 간 충돌 회피, 슬레이브 타이밍, 하드웨어 타이밍 대응, 오류 복구 루틴 등 다양한 측면에서 완성도 높은 설계가 필요합니다. 이러한 세부 요소들을 펌웨어와 하드웨어 설계에 균형 있게 반영해야 실제 운용 환경에서도 안정적으로 동작하는 시스템을 만들 수 있습니다.


    실전 적용 시 고려해야 할 MCU 선택 기준

    멀티 마스터 I2C 시스템을 실제로 구현할 때는 MCU 선택도 전략적으로 접근해야 합니다. 단순히 I2C를 지원하는 MCU가 아니라, 하드웨어 레벨에서 Arbitration, Clock Stretching, Bus Recovery, Multi-Master 지원 여부가 명시된 제품을 우선적으로 고려해야 안정적인 운용이 가능합니다. 특히 STM32, NXP, Renesas 계열의 MCU는 일부 모델에서 멀티 마스터를 공식 지원하므로 데이터시트와 레퍼런스 매뉴얼을 면밀히 분석해야 합니다. 또한, 펌웨어 라이브러리나 HAL 드라이버에서 관련 기능이 얼마나 잘 구현되어 있는지도 중요한 판단 요소입니다.