2014-07-21 4 views
3

여러분은 I2C 슬레이브의 클럭 스트레칭을 활성화하는 방법을 알고 있습니까?I2C 슬레이브 클록 스트레칭

이 기능을에 넣으면 충분합니까?

시계의 확장은 어떻게 작동합니까?

답변

9

나를위한 것 같습니다. 그렇습니다.

클럭 생성

SCL 클럭이 항상 I2C 마스터에 의해 생성됩니다 여기에 배경입니다. 이 사양은 클록 신호의 저 위상 및 고 위상에 대해 최소주기를 요구한다. 따라서, 실제 클럭 속도는 공칭 클럭 속도보다 낮을 수있다. 높은 커패시턴스로 인한 상승 시간이 큰 I2C 버스.

클럭 SCL을 연신하여 통신 속도가 느려질 수

I2C 디바이스 스트레칭 : SCL이 낮은 단계에서, 버스상의 I2C 디바이스를 추가 할 수 있도록, 다시 높은 증가를 방지하기 SCL을 길게 할 수있다 SCL 클럭 속도를 늦추거나 잠시 동안 I2C 통신을 중지하십시오. 이를 클록 동기화라고도합니다.

참고 : I2C 사양은 클럭 스트레칭에 대한 시간 초과 조건을 지정하지 않습니다. 즉, 모든 장치는 SCL을 원하는만큼 오래 유지할 수 있습니다.

I2C 통신에서 마스터 장치는 클럭 속도를 결정합니다. RS232와는 달리 I2C 버스는 마스터와 슬레이브가 사전 정의 된 보드 율과 정확하게 동기화되는 것을 방지하는 명시적인 클럭 신호를 제공합니다.

그러나 I2C 슬레이브가 마스터가 제공 한 클럭 속도와 상호 작용할 수없고 약간 느려야하는 상황이 있습니다. 이것은 클럭 스트레칭이라고하는 메커니즘에 의해 수행됩니다.

I2C 슬레이브는 버스 속도를 줄여야하는 경우 시계를 누르고있을 수 있습니다. 반면 마스터는 클럭 신호를 하이 상태로 해제 한 후 클록 신호를 다시 읽고 라인이 실제로 하이가 될 때까지 기다려야합니다.

I2C 클럭 속도는 I2C 슬레이브가 도입 한 클럭 스트레칭 기간에 어떻게 영향을 줍니까?

클럭 스트레칭은 I2C 데이터 전송 (ACK 단계 이전)의 9 번째 클록에서 I2C 슬레이브가 SCL 라인을 로우로 풀링하는 현상이다. 클록은 CPU가 I2C 인터럽트를 처리하여 마스터가 수신 한 데이터를 처리하거나 주소를 평가하거나 마스터가 슬레이브에서 읽을 때 다음 데이터를 준비 할 때 로우가된다.

클럭이 낮아지는 시간은 CPU가 인터럽트를 처리하는 데 걸리는 시간에 따라 달라지며 따라서 CPU 속도와 I2C 클럭 속도에 의존합니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 지연() 함수를 인터럽트 처리기 안에 넣어 CLOCK STRETCHING 함수를 테스트하는 좋은 방법입니까? – kai

+1

슬레이브가 마스터로부터 읽기 명령을 받으면 클럭 라인을 로우로 유지합니다. 그러면 CPU/MCU는 요청 된 데이터를 가져 와서 전송 레지스터에 넣고 클록 라인을 해제하여 풀업 저항으로 최종적으로 하이로 끌어 올 수있게한다. 마스터 관점에서 볼 때 SCL을 하이로 만들어 첫 번째 클럭 펄스를 출력 한 다음 실제로 하이가되었는지 확인합니다. 여전히 낮 으면 슬레이브가 로우 상태를 유지하고 마스터는 계속 진행하기 전에 하이 상태가 될 때까지 기다려야합니다. 다행히도 대부분의 마이크로 프로세서의 하드웨어 I2C 포트가 자동으로이를 처리합니다. –

0

우리는 왜 시계가 필요합니까 스트레칭? 시계의 9 번째 비트에서 슬레이브가 응답 할 때도 같은 결과를 얻을 수 있습니다.

슬레이브 내부 프로세스가 넘어갈 때까지 데이터 라인을 유지하면됩니다.