2006년 8월 30일 수요일

I2C 통신에서 ACK신호에 관하여

* QUESTION - (2004-11-24 23:11 작성)

i2c 통신에서 timing도를 보면 한 바이트를 read하고난 후 stop condition이 뜨기전에 high signal이 data 라인에 뜨던데 이건 data line을통해 device에 write를 해주는 건가요 아니면 CLK만 하나 띄워줘서 device로부터 read하는 건가요?
제가 i2c통신을 통해서 device를 컨트롤하는 프로그램을 짰는데, 일단 코드는 아무리 뚫어져라 쳐다봐도 틀린부분이 없는데 device로부터 값을 read할 수 가 없네요.. read가 안되니 device에 write가 되는건지도 확인할 방법이 없습니다.
도와주세요. 뭔가를 알 것 같은데 질문이 난해하다면 쪽지 주세요.
참고로 device는 microtune사의 mt5100 라고 불리는 tuner입니다. datasheet도 구할 수가 없고.. 이거 완전 노가다중입니다.

* ANSWER - (2004-11-24 23:25 작성)

iic통신에서 액놀리지신호는 데이터를 받는 쪽에서 해주어야 됩니다.
그러니까 메인에서 디바이스 쪽으로 데이터를 쓸때는 데이터 8비트를 보내고 마지막 9비트째는 클록만 하나더 보내면 디바이스측에서 데이터선를 LOW로 하여 잘받았다고 ACK를 내보내 줍니다.
메인에서는 데이터라인이 로우가 되는지 확인하면 되겠습니다.
로가 확인이 되면 정상적으로 전송이 된것이므로 다음데이터를 똑같은 방식으로 보내면 됩니다.
만일 디바이스에서 읽어오는경우에는 클록을 8개보내면서 8비트데이터를 읽어낸후 메인에서 데이터 버스를 로우(ACK)로 해주고 클록을 띄우면 디바이스가 다음 데이터를 보내줄 준비가 됩니다.
만일 데이터받기가 끝났을 경우에는 마지막 ACK타임에 데이터버스를 High(NAK)로 하고 클록을 띄워서 데이터를 더 보내지 말라고 조작하면 됩니다.

(출처 : 'i2c 통신에서 ack신호에 관하여' - 네이버 지식iN
http://kin.naver.com/db/detail.php?d1id=11&dir_id=110209&eid=p7jHqDkkB2E8FxerkElaYV7OLmG+3iCS&qb=bWljcm90dW5l)

댓글 없음: