embeded/i2c2012.01.10 23:32
i2c는 1선은 데이터 1선은 클럭을 보내는 구조인데
문서마다 조금씩 다르게 나오고 칩마다 설명이 달라서 모호한 감이 없진 않지만..

아무튼 용어를 정의하자면

i2c는 Master와 Slave로 구성되며

 - Master는 SCL을 통해 클럭을 생성하며, 데이터를 요청하는 주체가 되는 녀석이고
 - Slave는 Master의 요청에 따라 데이터를 받거나 요청시 보내주는 녀석이다.

2개의 선로를 통해 통신을 하며

 - SDA는 데이터를 주고 받으며(즉, Master 기준 Input / Output 전환이 필요하다)
 - SCL은 데이터 구분을 위한 클럭을 Master에 의해서 유지하게 된다.

통신을 주고 받기 위해 Slave에는 Address가 부여된다.

 - 7bit의 경우 상위 4bit의 host Address 하위 3bit의 동일 장치에 대한 구분용 device address가 존재한다.
 - 10bit도 존재한다.(자세한 내용은 http://www.i2c-bus.org/addressing/10-bit-addressing/ 참조)

Bus Empty / Start(start&start continue) / 1bit (data&ACK) / STOP 의 상황이 있다.

 - Bus Empty 는 SCL 과 SDA가 모두 High로 아무도 버스를 사용하지 않는 상황
 - Start는 SCL이 High인 상황에서 SDA가 High 에서 Low로 떨어지는 상황
 - Stop은 SCL이 High인 상황에서 SDA가 Low 에서 High로 올라가는 상황
 - 1bit는 SCL을 SDA가 감싸면서 Low -> High-> Low로 변화하는 상황이다.

통신은 다음의 순서를 따른다.
 - Bus Empty 인 것을 확인하고(둘다 high 임을 확인)
 - Start로 SDA와 SCL을 low로 설정하고
 - 7bit Address를 보내고 1bit의 Write/Read를 보내고(대개는 합쳐서 1byte로 처리함)
 - ACK를 수신하기 위해 SDA의 방향을 Master기준 input으로 변경하고 SCL만 출력한다. (클럭만 내고 처리안하기도 함)
 - 실어보낼 데이터를 전송하고(1byte)
 - ACK를 수신하기 위해 SDA의 방향을 Master기준 input으로 변경하고 SCL만 출력한다. (클럭만 내고 처리안하기도 함) 
 - 더이상 전송할 데이터가 없으면 SDA와 SCL을 high로 설정해 Stop임을 알리고 버스를 놓는다.

i2c 장치에 따라서 다음과 같이 전송을 하게 된다.
(장치내부의 레지스터 주소로 앞의 DATA를 1바이트나 2바이트로 사용하기도 한다.)
 - S / ADDR / ACK / DATA / P
 - S / ADDR / ACK / DATA / ACK / DATA / ACK / P
 - S / ADDR / ACK / DATA / ACK / DATA / ACK / Sr / DATA / ACK / DATA / ACK / P


 

 

 

음.. 이녀석은 STOP이 잘못그려진듯? SCL이 LOW에서 High 변화되어 한다.
[링크 : http://achiven.tistory.com/entry/I2c란]

2011/11/28 - [하드웨어] - I2C

'embeded > i2c' 카테고리의 다른 글

i2c mode - tm4c  (0) 2018.04.26
i2c BUS에 pull-up, pull-down  (0) 2018.04.26
i2c bank switching  (0) 2015.09.02
i2c 정리  (4) 2012.01.10
I2C  (2) 2011.11.28
SMBus 넌 머냐? - System Management Bus  (2) 2009.01.14
Posted by 구차니
TAG

댓글을 달아 주세요

  1. sunny

    음.. 이녀석은 STOP이 잘못그려진듯? SCL이 LOW에서 High 변화되어 한다. --> Low에서 High로 변화되어야 하는 것이 아니고, SCL이 "High일때" SDA가 Low에서 High로 변화되는 게 Stop 이라고 알고 있습니다. 즉, "High일때"가 중요한 조건이 되는 것이라고 저는 생각하고 있습니다... ^^

    2012.11.07 11:02 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 문서들 마다 우후죽순이라 어느게 맞는지 잘 모를때 요약한거라
      틀린게 있을수도 있습니다. 한번 다시 확인해서 본내용에 정정해야겠네요 ^^ 내용감사합니다.

      2012.11.07 11:17 신고 [ ADDR : EDIT/ DEL ]
  2. hotline

    음.. 지금 I2C 막 공부 시작해서 블로그 몇개 돌아다니고 있는데..
    그림4 를 말씀하시는거면
    STOP 맞게 그려진거 아닌가요?
    STOP 은 'SCL 이 High' 일때 'DATA' 가 low 에서 high 로 바뀌면 인거 같은데 맞지않나요?
    뒤에 쩜선이야 뭐. .SCL에 high 였다는걸 표현하기 위함인거같고..

    2013.03.18 17:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 위에 두개와 너무 다른 양상인게 혼돈을 일으키게 하더라구요 ㅠ.ㅠ

      2013.03.18 22:27 신고 [ ADDR : EDIT/ DEL ]