banner

블로그

Jul 25, 2023

I2C의 세 가지 함정 모두가 없었으면 좋겠어

I2C의 가장 좋은 점은 어디에서나 사용할 수 있는 버스라는 점입니다. 이를 하드웨어 정의 인터페이스로 제공하는 광범위한 장치 에코시스템을 포괄하는 동시에 일반 GPIO의 소프트웨어로 순수하게 구현할 수도 있을 만큼 복잡하지 않습니다. 다리. 이러한 인기에도 불구하고 I2C는 몇 가지 인기 있는 구현을 특징으로 하는 유명한 비공식 표준 중 하나이며, 정확한 타이밍, 버스 커패시턴스 및 기타 지루한 세부 사항과 같은 많은 세부 사항은 제품 개발을 수행하는 가난한 사람들에게 맡겨져 있습니다. 따라서 우리는 I2C 슬레이브를 구현하는 동안 발견된 문제를 다루는 최근 블로그 [쌍의 껍질 벗긴 배]와 같은 기사로 마무리됩니다.

멀티 마스터 여부에 관계없이 모든 공유 버스와 마찬가지로 버스가 언제 비어 있는지 알아내는 것은 재미있는 주제이지만 끝없는 두통을 유발할 수 있습니다. 여기서 한 가지 문제는 I2C의 SMBus 버전이 빠른 읽기/쓰기를 호출하는 기능에서 비롯됩니다. 이를 통해 일부 데이터를 빠르게 전송할 수 있습니다. 그러나 슬레이브가 반환한 데이터에 따라 마스터에는 아직 아무 일도 일어나지 않은 것처럼 보일 수 있습니다. 왜냐하면 SDA는 정지 조건이 될 때까지 슬레이브에 의해 낮게 유지되어 본질적으로 버스가 잠기기 때문입니다.

상황이 훨씬 더 흥미로워지는 곳은 일반적으로 로직 분석가가 트라우마적으로 '가상 시작/중지 조건'이라고 부르는 형태로 나타납니다. 이는 SDA 및 SCL의 동작을 나타내며, SCL이 오류를 나타내기 전에 SDA가 낮아집니다. 이는 대기 시간이 너무 낮아서 버스의 다른 장치가 전환을 놓칠 수 있기 때문에 발생할 수 있습니다. 여기서 SMBus는 300ns의 전환 시간을 정의하고 I2C는 0초를 호출하지만 이제 300ns의 지연이 지날 때까지 시작/중지 조건 호출을 지연하는 것이 좋습니다. 본질적으로, 반대 증거가 나타날 때까지 보류 시간을 구현하는 것이 앞으로 나아갈 길인 것처럼 보입니다.

세 번째 함정은 FM(Fast-Mode) 및 FM+(Fast-Mode Plus)를 포함한 I2C의 고속 모드와 관련이 있습니다. 이러한 고속 버전과의 하위 호환성에는 흠집이 없습니다. FM+(2007년 NXP에서 도입)는 더 느린 속도와 역호환될 것으로 예상되지만 사실상 FM+와 FM 표준 간의 타이밍 요구 사항 차이가 너무 커서 보상할 수 없습니다. 적어도 현재 버전의 표준에서는 I2C의 즐거움 중 하나는 항상 기대할 수 있는 또 다른 새로운 개정판이 있다는 것입니다.

공유하다