TWI 통신 순서
1. 마스터에서 TWSTA bit 1로 set 해서 start 출력을 버스로 내보낸다. 이때 TWINT bit 는 clear 되어 있어야 된다.
안되어 있으면 1을 써줘서 0으로 clear
- Start 완료시 TWINT 가 자동으로 1로 set 되서 start 가 완료되어있는지 보기위해서
2. TWSR bit 보면서 제대로 start 동작이 이루어졌는지 확인해 본다.
3. TWSR bit 가 제대로 동작 했다면
TWDR 레지스터에 원하는 주소와 R/W bit 를 쓴후 각각의 모드에 맞는 TWCR bit 를 load 한다.
이때 TWINT 는 1 을 적어서 clear 해준다. - > 데이터 전송 시작
그리고 TWSTA bit 를 1로 써줌으로 써 0 으로 clear 해준다.
4 . TWINT 가 1로 set 되고 주소가 제대로 송신되었는지에 대한 상태가 TWSR 레지스터에 표시된다.
5 . TWSR bit 를 확인해서 제대로 주소가 전송 되었는지 확인한다. 그리고 TWDR 레지스터에 보내고 싶은 데이터를 입력하고 , TWINT 를 clear 시켜서 데이터가 전송 되도록 한다.
6. 데이터 전송이 완료 되면 TWINT 가 1로 set 되고 TWSR 레지스터에 자세한 상태가 표시된다.
7. TWSR 레지스터가 정상적이면 TWCR 에서 STOP 신호가 출력되도록 해준다. TWINT 를 clear 시켜서 stop 신호를 출력하도록 해준다.
data 시트에는 I2C 통신의 4가지 모드에 대해 위의 동작을 자세히 풀어놓았다
일단 마스터 송신모드와 슬레이브 수신 모드에 대한 내용을 정리 하겠다.
다른 2가지 모드는 데이타 시트를 참조하기 바란다.
1. 마스터 송신 모드
위의 표를 보면 TWINT 플레그가 1로 set 된수 각 상태에 따른 상태 레지스터( TWSR) 값이 어떻게 변화하는지 보여준다. 단 여기서 TWSR 의 값은 분주비 가 0 일 때 (TWPS1,0 값이 0 ) 기준 으로 정한 값이다.
간단한 해석을 하자면 start 가 정상적으로 전송 되었다면 레지스터는 0x08 값을 가지고 ,
그후 주소를 제대로 보냈다면 0x18 값을 갖게 된다. 만약 전송이 제대로 되지 않아 ACK 신호가 high 로 받는다면 레지스터 값은 0x20 을 갖는 것이다.
이뿐만 아니라 데이터 시트에는 각단계 별로 TWCR 레지스터 가 어떻게 동작해야 되는지도 상세히 나와있다.
각가의 동작에 알맞는 상태 레지스터와 TWCR 레지스터 표
2. 슬레이브 수신 모드
슬레이브 동작 하기 전에 레지스터를 위와 같이 초기화 해준다.
TWEA 가 1로 set 되어 있을때 슬레이브에 자신의 주소와 + W ("0") 신호가 들어오면 슬레이브 수신 모드에 들어간다
- R("1") 로 들어오면 승레이브 송신 모드에 돌입
각가의 동작에 알맞는 상태 레지스터와 TWCR 레지스터 표
'공부,일 > atmega328P' 카테고리의 다른 글
atmel studio 에서 printf, scanf 사용 (0) | 2021.08.11 |
---|---|
atmega328P TWI(I2C) 통신 (3) 실습 (0) | 2021.08.07 |
atmega328P TWI(I2C) 통신 (1) 개념 및 레지스터 (0) | 2021.08.05 |
atmega 328p USART (3) 실습 (0) | 2021.08.02 |
atmega 328p USART (2) 레지스터 (0) | 2021.08.02 |
댓글