'I2C'에 해당되는 글 2건

  1. 2012.01.10 i2c 정리 (4)
  2. 2011.11.28 I2C (2)
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 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 I2C

댓글을 달아 주세요

  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 ]

embeded/i2c2011.11.28 17:54

I2C

SDA의 폭이 SCL 보다 크다는 점은
아마도.. SCL의 Rising edge에 트리거 되서 SDA의 값을 읽기 때문이 아닐까? 라는 망상중

Timing sheet


아무튼, ACK는 slave가 쓰는건데
그렇다면.. Master에서 ACK에 대한 SCL은 생성하지 않아도 되는걸려나?
흐음.. Slave->Master를 보면 ACK가  색상이 다르네 -_- 어렵다 ㅠ.ㅠ

Master -> Slave (Write)


Slave -> Master (Read)


[링크 : http://www.best-microcontroller-projects.com/i2c-tutorial.html]

[링크 : http://en.wikipedia.org/wiki/I2C]
[링크 : http://achiven.tistory.com/entry/I2c란]
[링크 : http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html]

[링크: http://i2c2p.twibright.com/spec/i2c.pdf]
신고

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

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 I2C

댓글을 달아 주세요

  1. sunny

    Slave->Master(Read)에서는 master가 Ack를 줘야 되는 걸로 알고 있습니다. 즉 master가 "나 데이터가 필요해(read)"라고 버스에 커맨드(slave read address)를 주면 slave가 버스에 데이터를 내보내고, master가 ack를 줘야만 다음 데이터를 진행하겠죠...

    2012.11.07 11:08 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 앗 i2c글을 다 보셨네요 ㅎㅎ
      처음에 직접구현하려고 했던건데 TI 칩에서는 i2c 라이브러리를 제공해서 신경을 안쓰고 있었네요. 나중에 한번 다시 정리해보도록 하겠습니다.

      2012.11.07 11:19 신고 [ ADDR : EDIT/ DEL ]