I2C 정리

2019. 6. 21. 22:45임베디드/ATmega128

연산능력이 없는 데이터들을 주고받을 때 사용되는 통신방식(+SPI)

 

1. Philips사에서 제안한 근거리용 직렬 동기식 양방향 통신 프로토콜로, 컨트롤러에서 여러가지 메모리, I/O 소자를 연결할 때 사용된다

 

2. 오직 2가지 클럭과 데이터라인으로 통신을 할 수 있으며, Slave 주소로 장치를 구분하게 된다. 장치 주소는 디바이스의 데이터시트를 참고하면 I2C 메뉴얼 부분에서 확인할 수 있다. 오직 2개의 라인으로 송수신하기 때문에 전송 포맷이 정해져 있다

- 시작, 정지 : SCL이 High인 상태에서 SDA가 움직인다

- 데이터 전송 : SDA는 데이터값을 유지하고 SCL이 움직인다

 

3. 하드웨어 회로 구성은 Open Drain 또는 Open Collector 구성으로 외부에 풀업저항으로 연결된 외부 전원이 연결이 필수다. ATmega128의 경우네는 내부 풀업이 있기 때문에 이를 사용해도 무방하다

 

4. 속도는 표준, 고속, 초고속모드 총 3가지가 있지만, ATmega128에서는 표준(100KHz)과 고속(400KHz)만 지원한다. 최대 400KHz까지 SCL을 설정할 수 있다

+추가

SCL은 디바이스가 지원하는 SCL clock period를 보고 적절하게 선택하면 된다

 

5. 슬레이브 장치의 복잡도에 따라서 Slave 주소를 보내고 나서 바로 데이터를 읽을 수도 있고 다시 한 번 읽으려고 하는 주소로 한 번 더 접근하는 경우도 있다(Command Register). 보통 이러한 경우가 대다수다

 

6. 속도 정할 때의 TWPS의 Prescaler Value는 4^(TWPS)를 통합해서 말하는 것이다

 

7. Command Register Format이 있으며, Power Up Default Conditions가 정해져 있어서 참고하면서 프로그래밍을 하는 것이 옳은 방법이다

8. Atmel Studio에서는 <util/twi.h>에서 twi 관련, 예를 들어 

#define TW_STATUS (TWSR & TW_STATUS_MASK)

#define TW_MT_SLA_ACK 0x18

을 등등 사용할 수 있다

 

9. 읽을 Reg를 미리 설정하고 재시작 후 읽기 모드로 전환하는 방식을 사용한다

'임베디드 > ATmega128' 카테고리의 다른 글

ATS75D8 ATmega128 I2C 소스  (0) 2019.06.22
ATmega128 I2C(TWI) Template  (0) 2019.06.21
DDOE와 DDOV  (0) 2019.06.21
부저 볼륨 조절하기  (0) 2019.06.19
RS232, TTL 그리고 UART  (0) 2019.06.18