본문 바로가기

Embedded

ATmega128간의 TWI 통신기능 구현하자 - TWI 단계별 동작 (Posted by H2K)


  앞선 포스트에서는 TWI 관련 레지스터에 대해서 알아보았습니다.^^ 이번 포스트에서는 관련 레지스터를 이용한 TWI의 단계별 동작에 대해서 간략하게 알아보도록 하겠습니다.




TWI 동작


자~ 아래 그림은 TWI의 동작 순서와 각 동작에서의 관련 레지스터의 이용등을 보여주는 한 예로써, 역시 ATmega128의 datasheet을 참고하였다. 그럼 이제 각 단계별로 좀 더 세세하게 알아보자.




 

  1. TWI가 전송 동작을 하기위한 첫 단계로 START 신호를 전송하게 된다. 이는 TWCR 레지스터에 특정 값을 라이트함으로써 이루어지는데, TWINT 플래그가 1로 셋 되어 있는 것이 중요하다. 그렇다면 TWCR 각 bit중 TWINT, TWSTA, TWEN bit은 1로 셋 되어 있어야 한다.
      예를 들자면 TWCR = 8´b 1x10x10x로 set되어 있어야 START신호를 발생할 수 있다. 이때 x는 don't care ㅡ0ㅡ;ㅋㅋ 

  2. START 신호가 전송되어지면 TWCR 레지스터의 TWINT 플래그는 셋되고, ACK신호를 잘 수신하면 TWSR 레지스터는 START 신호가 성공적으로 전송되었다는 것을 알리기 위해 상태 코드를 업데이트 하게 된다. 
      예를 들어 ACK신호를 잘 받게 되면 TWSR 레지스터는 0x08로 셋된다. 

  3. 응용 프로그램은 START 신호가 전송된 것을 확인하기 위해 TWSR 레지스터의 내용을 검사하게 된다. 만약 TWSR이 다른 상태를 나타내고 있으면 (TWSR != 0x08) 응용 프로그램은 에러루틴과 같은 특정한 명령을 수행할 수 있다. 상태 코드 값을 확인한 후 응용 프로그램은 반드시 TWDR 레지스터에 SLA+W를 라이트 해야 한다. 그 후에야 TWCR에 특정값을 라이트 할 수 있게 된다. 이때 TWINT에 1을 라이트하여 플래그를 클리어시켜 주어야 한다. TWCR 레지스터내의 TWINT가 1로 셋되어 있으면, TWI는 어떤 동작도 하지 않는다. 응용 프로그램이 TWINT bit를 클리어 시켜주면 TWI는 어드레스 패킷(TWDR)을 전송하게 된다.

  4. 어드레스 패킷이 전송되면 TWCR 레지스터의 TWINT 플래그가 1로 셋되고, ACK신호를 잘 수신하면 TWSR 레지스터는 어드레스 패킷을 성공적으로 전송했다는 상태를 나타내기 위해 상태코드를 업데이트 하게 된다. 즉, 슬레이브가 어드레스 패킷을 잘 확인하면 TWSR = 0x18, 아니면 TWSR = 0x20으로 셋된다.

  5. 응용 프로그램은 TWSR 레지스터의 내용을 검사해서 어드레스 패킷이 성공적으로 전송되고, ACK bit가 원하는 상태로 수신되었는지를 체크한다. 만약 그렇지 않으면 앞에서와 같이 에러루틴과 같은 특별한 동작을 하게 된다. 그러나 ACK가 잘 수신되어 원하는 상태의 코드(TWSR = 0x18)가 나타나면 응용 프로그램은 TWDR 레지스터에 데이터 패킷을 라이트한다. 그리고 계속해서 TWCR 레지스터에 특정한 값을 라이트해서 TWI 장치가 TWDR 레지스터에 있는 데이터 패킷을 전송하게 한다. 이때 TWINT에 1을 라이트하여 플래그를 클리어 시켜주어야 한다. 응용 프로그램은  TWINT bit가 클리어 된 후에 TWI는 데이터 패킷을 전송하게 된다.

  6. 데이터 패킷이 전송되면 TWCR 레지스터의 TWINT 플래그가 셋되고, TWSR 레지스터는 데이터 패킷이 성공적으로 전송되었다는 상태(TWSR = 0x28)를 나타내기 위해 상태 코드를 업데이트 하게 된다. TWSR을 통해 슬레이브가 데이터 패킷을 확인하였는지 또는 그렇지 않은지를 확인가능하다.

  7. 응용 프로그램은 데이터 패킷이 성공적으로 전송되었는지, ACK bit가 원하는 상태인지를 알기 위해 TWSR 레지스터를 검사하게 되며, 상태 코드가 원하는 상태이면 응용 프로그램은 TWCR 레지스터에 STOP 신호를 전송하는 특정한 값을 라이트 한다. 이때 TWINT bit를 1로 라이트 해서 클리어시켜 주는 것이 중요하다. 응용 프로그램이 TWINT bit를 클리어 시키는 즉시 TWI는 STOP 신호를 전송하게 된다. STOP 신호가 전송된 후에는 TWINT 플래그는 셋되지 않는다

 

이로써 TWI의 동작에 대해서 간략하게 설명을 끝마쳤다~~!

이제 본격적으로 ATmega128간의 TWI통신을 구현하기 위해서 TWI의 4가지 모드 즉, 마스터 송신(MT), 마스터 수신(MR), 슬레이브 송신(ST), 슬레이브 수신(SR)에 대해서 알아보자 ^^