본문 바로가기

카테고리 없음

I2C Multi-Master 상황에서 Clock Sync 맞추는 방법

I2C에서 Multi-Master  환경에서 여러 마스터가 동시에 버스를 사용할 수 있습니다. 이때 중요한 요소 중 하나는 클럭 동기화(clock synchronization)입니다. 여러 마스터가 동시에 클럭 신호를 발생시킬 수 있으므로, 모든 마스터가 동일한 클럭 속도로 동작해야 통신의 일관성을 유지할 수 있습니다.

 

I2C는 open-drain 방식으로 동작하므로, 클럭 동기화는 자연스럽게 이루어지며, 여러 마스터가 동시에 버스를 제어하려고 해도 시스템이 안정적으로 동작할 수 있도록 설계되어 있습니다. 이 과정은 SCL의 제어를 통해 이루어집니다.

 

I2C의 클럭 동기화 방법

클럭 동기화는 여러 마스터가 동시에 SCL을 제어하려고 할 때, SCL 선이 Low 상태일 때는 모든 마스터가 클럭을 Low로 유지해야 하고, SCL이 High 상태일 때는 마스터 중 가장 느린 클럭이 시스템 클럭을 결정하는 방식으로 동작합니다. 즉, 클럭 신호의 Low 구간은 모든 마스터가 Low를 유지하는 동안 계속 유지되며, High 구간은 가장 느린 마스터가 클럭을 High로 전환할 때 결정됩니다.

 

동작 과정을 살펴보겠습니다.

  1. SCL이 Low 상태일 때: 각 마스터는 자신이 제어하는 SCL 신호를 Low로 유지합니다. 여러 마스터가 SCL을 제어할 때, 어떤 마스터라도 SCL을 Low 상태로 유지하고 있으면 전체 SCL은 Low 상태가 됩니다. 즉, 여러 마스터 중 가장 오랫동안 SCL을 Low로 유지하는 마스터가 전체 클럭의 Low 상태를 결정합니다. 이때 모든 마스터는 해당 마스터가 SCL을 High로 전환할 때까지 대기합니다.
  2. SCL이 High 상태로 전환될 때: 각 마스터는 자신의 SCL 신호를 High로 전환하려고 시도합니다. 하지만 I2C의 오픈 드레인 특성상, 모든 마스터가 SCL을 High로 전환할 때까지 SCL은 Low 상태로 유지됩니다. 즉, 마스터 중 가장 느린 클럭 신호를 생성하는 마스터가 SCL을 Low로 유지하는 한, 모든 마스터는 그 마스터의 클럭 속도에 동기화됩니다.
  3. 가장 느린 클럭이 기준: 동기화 과정에서는 가장 느린 마스터가 클럭 속도를 결정하게 됩니다. 다른 마스터는 이 마스터의 클럭 속도에 맞춰 동작하게 되며, 클럭 신호의 주기는 해당 마스터가 SCL을 High로 전환하는 순간에 맞춰집니다.
  4. 동기화 유지: 클럭 신호가 High로 전환되면, 모든 마스터는 데이터를 전송할 수 있습니다. 다시 SCL이 Low로 전환될 때는 동일한 방식으로 동기화가 이루어집니다. 이 과정은 각 클럭 사이클마다 반복되며, 여러 마스터가 동시에 버스를 사용하는 환경에서도 안정적인 통신이 가능하게 됩니다.

예를 들어 보겠습니다.

  • 마스터 A마스터 B가 동시에 슬레이브와 통신하려고 한다고 가정해봅시다. 마스터 A는 400kHz의 클럭 신호를 생성하고, 마스터 B는 300kHz의 클럭 신호를 생성하려고 합니다.
  • 두 마스터는 모두 동시에 SCL 신호를 Low로 전환합니다. 이때 300kHz 클럭을 생성하는 마스터 B가 SCL을 더 오래 Low로 유지하려고 할 것입니다. 따라서 전체 SCL 신호는 마스터 B의 클럭 속도에 맞춰 Low 상태가 유지됩니다.
  • SCL이 다시 High로 전환될 때도 마찬가지로, 마스터 B가 SCL을 High로 전환할 때까지 모든 마스터는 기다립니다. 즉, 가장 느린 마스터(B)의 클럭 주기가 전체 클럭을 결정하게 됩니다.

I2C 클럭 동기화의 장점

  • 자동 동기화: I2C는 오픈 드레인 방식과 클럭 신호의 상태 모니터링을 통해 여러 마스터 간의 클럭을 자동으로 동기화할 수 있습니다.
  • 안정성: 여러 마스터가 동시에 클럭을 발생시키려고 해도 가장 느린 클럭에 자동으로 맞춰지기 때문에 통신이 안정적으로 이루어집니다.
  • 복잡한 제어가 필요 없음: 각 마스터가 별도로 클럭 속도를 조정하거나 제어할 필요 없이, 오픈 드레인 특성에 의해 자연스럽게 동기화가 이루어집니다.

결론

I2C에서 여러 마스터 간의 클럭 동기화오픈 드레인 방식의 SCL 제어를 통해 자동으로 이루어집니다. 각 마스터는 자신의 클럭을 Low로 유지하지만, 전체 클럭 신호는 가장 느린 마스터의 클럭 속도에 맞춰 동작합니다. 이를 통해, 여러 마스터가 동시에 버스를 사용하더라도 통신 충돌 없이 안정적으로 클럭 동기화가 유지될 수 있습니다