2015년 11월 2일 월요일

hardware communication(I2C, SPI, UART)

1. I2C, SPI, UART 차이

  • I2C 
    • 1: 다 통신
    • 반이중통신 (Master, slave)
    • 표준 100kbps 고속 400kbp SPI에 비해서는 한참 느린 수준
  • SPI
    • 1: 다 통신
    • 반이중 통신 (Master, slave)
    • 셋중에서 가장 빠른 속도를 가지며 mbps까지 가능하다.
  • UART 
    • 1:1 통신
    • 양방향 통신 
    • 셋 중에서 가장 느리며 최고 kbps가 한계이다.
2. 각 하드웨어  통신 특징 및 개념  
  • UART (Universal Asychronous Receiver Transmitter)

    • Serial 통신이라고 불린다. 
    • RX, Tx 두개의 핀으로 서로 통신한다.
    • 시리얼통신을 셋팅시에는 BITS RATE와 PARIT BIT를 설정하게 되는데, 시리얼통신 시에는 데이터를 동기화할 CLOCK이 없다. 그래서 이 동기를 수행해줄 역할이 바로 BITS RATE가 수행을 하게된다. 각 영역을 BITS RATE로 나누어 해당 데이터를 인식한다. 가끔 ARDUINO 시리얼 모니터에서 SETUP()과 다른 BIT RATE로 설정하게 되면 글씨가 깨지게 되는데, 이 이유는 잘 못된 주기로 데이터를 인식하기 때문이다. 두번째는 PARIT BIT인데 패리트 비트는 해당 데이터가 제대로 전송되었는지에 대한 오류 검출 코드이다. 1의 발생갯수가 홀수인가 짝수인가를 체크하여 홀수개이면 그 해당 데이터는 에러인지 아닌지를 검출하게 된다. 
    • 위에서 보이는 데이터 패킷의 형태는 START는 데이터의 시작을 알리는 신호이며 STOP 데이터 종결이자 패리트 비트가 위치하는 영역이다. 
          PS. 실질적으로 양방향통신임에도 UART가 빠르지 않은 이유는 , 동시에 전송과 송             신을 할경우 시그널 왜곡현상이 일어나게 되기때문에 고속으로 보내지 못한다.

  • I2C



    •  기본적으로  I2C는 SCL(clock) 과 SDA(Data)의 두개의 핀을 가지고 있다.
    •  마스터가 SCL을 생성하며 동기형 클럭은 오직 마스터가 권장한다.
    •  SDA는 슬레이브에서 마스터로 갈수도 마스터에서 슬레이브 모두 가능한 양방향 신호선이다.
    • 하나의 마스터에 다수의 슬레이브가 붙을 수 있는 구조이며, 클럭신호를 통해 패킷만을 처리한다. 



    • I2C 패킷 시작과 끝
      • I2C 프로토콜에서는 SDA와 SCL이 모두 1인 상태에서 SDA가 0이 되면서 시작을 알린다.
      • SCL이 0이면 SDA가 바뀌는 상태이며 SCL 1이면 data는 stable한 상태로 인식되어 읽히게된다.
      • SCL이 1인상태에서 SDA가 0이되면 패킷의 종료를 알리게 된다.




    •  I2C 패킷 형태
      • 마스터가 보내온 클럭신호에 따라 각 비트를 읽게 된다.
      • 여기 ACK란 데이터를 수신한 쪽에서 데이터를 잘 수신했다는 의미로 보내주는 시그널이다.
      • 예를들어 마스터에서 특정 슬레이브로 신호를 SCL 1번부터 8번까지 보냈다고 한다면 수신받은 슬레이브 SCL 9번에 위치해있는 ACK신호를 보내게되어 다음바이트 전송할지를 정할 수 있다.


    • 주소지정 형식
      • 각기 슬레이브는 고유주소를 가지게 되는데, Master는 특정 통신하고 싶은 슬레이브 고유주소를 먼저 보내어 통신하게 된다. 이때 버스에 연결되어있는 slave는 자기 주소와 동일한지 검사하여 ack신호에 응답한다.
      • R/w 신호는 각 현재 마스터가 슬레이브를 read할 것인지 write할것인지를 알려주는 신호이다. 
      • ack신호가 잘 들어오게 되면 보내고 싶은 데이터가 stop state가 될때까지 보내지게 된다.  






댓글 없음:

댓글 쓰기