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
2011/11/28 - [하드웨어] - I2C
문서마다 조금씩 다르게 나오고 칩마다 설명이 달라서 모호한 감이 없진 않지만..
아무튼 용어를 정의하자면
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란]
[링크 : 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 (2) | 2011.11.28 |
SMBus 넌 머냐? - System Management Bus (2) | 2009.01.14 |