통신

Serial 통신(UART, SPI, I2C)

Shins아재 2024. 7. 31. 11:14

UART(Universal Asynchronous serial Receiver and Transmitter)

 UART는 명칭에서부터 알 수 있듯 비동기식 통신이기 때문에 받은 데이터를 어떻게 해석할 것인지가 중요.

 데이터 해석을 위해 아래와 같은 정보들을 사용

  • Baud Rate(통신속도)
    - Serial line으로 전송되는 데이터의 속도를 말함
    - bps(bits-per-second) 단위로 표시하며, 1bit 데이터를 전송할 때 Serial line을 HIGH / LOW로 유지하는 시간
    - 이것을 가지고 수신할때 Serial line을 체크
    - 따라서, 양 측 동일한 Baud Rate를 설정해야 함
  • Data Chunk(데이터의 길이)
    - 송수신 데이터 길이로 주로 8bit or 7bit 사용
  • Parity Bits(오류 체크)
    - 에러 보정 방법으로 Data Chunk를 합산하여 홀수인지 짝수인지 기록하여 전송
    - 노이즈가 심한 경우 데이터 손실이 발생할 수 있어 수신 측에서 이를 통해 검증
  • Synchronization Bits(동기화 비트)
    - 동기화 비트로 데이터 패킷의 시작과 끝을 알리기 위해 사용
    - Start / Stop bit로 구성되며 각각 1~2bit로 설정

기타 - USART는 동기식을 지원하는 방식이다.

 

연결 방법

 전송용인 TX와 수신용인 RX 2의 선으로 구성. 따라서 두 장치는 각각 엇갈리게 연결되어야 함.

UART의 구성

 이러한 비동기식 통신은 매번 데이터를 송수신 상태에서 확인해야 해서, Start / Stop bit를 추가하게 됨. 따라서 복잡한 HW 컨트롤러가 필요하다는 단점이 있음. 동기식 통신은 이러한 문제에서 자유로운 장점이 존재.

 

 

SPI(Serial Peripheral Interface Bus)

 동기식 시리얼 통신 방식. 아래 4가지 선으로 구성

  • MOSI(Master Out, Slave In) : Master 송신, Slave 수신
  • MISO(Master In, Slave Out) : Master 수신, Slave 송신
  • SLCK(Serial Clock) : 직렬 Clock, 데이터 전송 타이밍 동기화를 위한 Clock
  • SS(CS)(Slave Select(Chip Select)) : 데이터를 수신할 기기 선택을 위한 신호

SPI 통신 구조 (P=M / C=S) P : Peripheral, M : Master, C : Controller, S : Slave

 SPI 통신은 오직 한 장치만 Clock Line에 신호를 생성.

 이러한 장치를 Master라고 하고, 통신에 참가한 나머지 장치들을 Slave라고 한다. 따라서 1:N 통신이 가능

 주로 MCU(Micro Controll Unit)이 Master가 된다.

 Master가 SS(or CS)를 통해 신호를 전송할 Slave를 선택함. 그 후, MOSI를 통해 SLCK에 동기화 된 신호를 전송.

 Master가 데이터를 수신할 때도, 미리 수신용 Clock Signal을 생성. 그래서 위 그림과 같이 Clock Signal과 MOSI / MISO를 통해 Master와 Slave간의 송수신이 이루어짐.

 

 

I2C(Inter-Integrated Circuit)

 동기식 시리얼 통신이며 위의 SPI가 가지는 일부 단점들을 보안할 수 있음.

 SPI는 1:N 통신만 가능하고, Slave가 늘어날수록 핀이 많이 필요한 단점이 있음.

 I2C는 SPI와 달리 두 라인만 사용하며 N:N 통신을 지원함. 대신 하드웨어적으로 SPI보다 복잡하고 통신 속도가 느림.

I2C 통신 구조

 동기식이므로, 위의 그림과 같이 풀업 저항이 연결된 직렬 데이터와 직렬 Clock을 사용하고 Master와 Slave가 존재.

 아래와 같은 2가지 선을 사용한다.

  • SCL(Serial Clock)
    - Master와 Slave간의 Clock을 맞춰 데이터를 송수신할 수 있게 해줌.
    - 기본 값 HIGH, SDA가 HIGH -> LOW로 가면 Start, LOW->HIGH로 가면 Stop
    - 데이터 송수신은 SCL이 LOW일 때만 가능
  • SDA(Serial Data)
    - 통신하고자 하는 데이터를 의미
    - Start / Stop bit 포함, Address 포함

I2C의 통신방식은 다음과 같이 동작한다.

(출저 : 위키피디아 https://en.wikipedia.org/wiki/I%C2%B2C)

 SDA와 SCL선의 신호는 풀업 저항에 의해 기본적으로 HIGH 신호를 전송한다. 그러다 SDA 신호만 LOW로 떨어지면 시작 신호(위 그림의 노란색 S)라고 판단한다.

 그 후 SCL 선으로 Clock 신호가 만들어지는데, Clock 신호가 Low일 때가 SDA 신호를 bit 신호로 바꾸는 시간(위 그림의 파란색 부분), Clock 신호가 High일 때가 신호를 읽는 시간(위 그림의 초록색 부분, B1, B2, Bn).

 다시 SCL 선의 Clock 신호가 High일때 SDA선의 신호가 High로 바뀌면 종료 신호(위 그림의 노란색 P)라고 판단하여 통신을 종료한다.

 즉, SDA 신호는 SCL 신호가 Low일 경우에만 비트를 바꿀 수 있으며, 그 외 SCL 신호가 High일 때 SDA 신호가 Low이면 Start, High이면 Stop 판단.

Data Write / 주황 : Master, 흰색 : Slave
Data Read / 주황 : Master, 흰색 : Slave

  위의 그림과 같이 Start bit 뒤에 나오는 첫 7bit는 슬레이브의 주소값(Address)이며, 8번째 bit는 데이터를 읽어오기 위한 신호인지, 쓰기 위한 신호인지(Read/Write) 나타내는 bit로 사용된다.

  Slave의 주소값과 Read/Write bit는 Master에서 생성할 수 있으며, Write의 경우 Master에서 Data를 생성, Read의 경우 Slave에서 Data를 생성한다.

 8bit의 Data를 전송 후 Write의 경우 Slave에서 ACK을 만들며, Read의 경우 Master에서 ACK을 만들어 수신을 확인해준다.

'통신' 카테고리의 다른 글

통신 방식(Simplex, Half Duplex, Full Duplex)  (0) 2024.07.31
Serial 통신  (0) 2024.07.31