UART통신이란?


UART(Universal Asynchronous Receiver/Transmitter)는 병렬 데이터를 비동기식 직렬 데이터로 변환하여 송수신하는 직렬 통신 인터페이스이다.

  • UART를 학습하기전 정의를 확실히 알고 가보자.

병렬 데이터란?


여러 비트(Bit)를 동시에 처리하거나 전달하는 데이터 형태

예를 하나 들어보자. 문자 ‘A’를 ASCII 코드로 표현하면

A = 65 = 01000001

이 8 비트를 CPU 내부에서는

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0 1 0 0 0 0 0 1

의 형태로 8개의 비트(Bit)가 동시에 존재한다.

즉 0 1 0 0 0 0 0 1 이 8 개의 값이 한순간에 모두 존재하는 형태를 병렬 데이터 (Parallel Data) 라고한다.

왜 ‘병렬’ 이라고 부를까?

병렬의 정의는 여러 개가 동시에 라는 의미를 가지고 있다.

예를들어 8개의 신호선을 사용하고 있다면.

D7  ── 0
D6  ── 1
D5  ── 0
D4  ── 0
D3  ── 0
D2  ── 0
D1  ── 0
D0  ── 1

8개의 선을 통해 8비트를 동시에 전달 할 수 있다.

그래서 이를 병렬 전송(Parallel Transmission) 이라고 한다.

참고로 우리가 흔히 CPU 에서 말하는 32비트 64비트 는 한번에 32, 64개의 비트를 처리할 수 있는 것이다.

동기 / 비동기란?

동기 (Synchonous)

요청(Request)과 응답(Response)이 하나의 흐름으로 이어지는 방식이다.

작업을 요청한 후, 결과가 올 때까지 기다리는 방식이다.

비동기(Asynchronous)

비동기란 요청한 후 결과를 기다리지 않고 다음 작업을 수행하는 방식이다.

작업을 요청하고 바로 다른 일을 한다. 결과는 나중에 전달받는다.

UART에서의 비동기는

송신 장치와 수신 장치가 공통의 클럭 신호 없이 통신한다.

자바에서는 동기 비동기를 응답과 요청을 기준으로 판단하지만, UART에서의 비동기는 클럭신호라는것을 공유하는가 공유하지 않는가로 나뉜다고 한다.

클럭신호란?

클럭 신호(Clock Signal)는 전자 장치들이 “언제 동작해야 하는지”를 알려주는 기준 신호이다.

컴퓨터에서는 클럭이 들어오는 순간마다

  • 데이터를 읽고
  • 데이터를 보내고
  • 연산을 수행한다.

클럭이 필요한 이유는?


예를들어 송신장치가

10110010

을 보낸다고 해보자.

수신장치는 각비트를 언제 읽을지를 알아야 한다. 그래서 클럭을 같이 보내면

수신장치는 클럭이 올라갈 때 마다 데이터를 읽으면 된다고 알 수 있다.

UART는 클럭을 보내지 않는다. 오직 데이터만 전송한다.

그럼 언제 데이터를 읽을까?

  • Baud Rate
  • Start Bit
  • Stop Bit

를 사용하여 데이터를 읽는 시점을 맞춘다.

직렬통신이란?


직렬 통신은 데이터를 1비트씩 순차적으로 전송하는 통신 방식이다.

다시 예를들어 문자 ‘A’를 전송한다고 하자

A = 01000001

직렬통신에서는 이 데이터를

0  1  0  0  0  0  0  1

처럼 1비트씩 차례대로 전송한다.

즉, 여러 비트를 한번에 보내는 것이 아니라 한 줄로 순서대로 보내는 통신방식이다.

왜 직렬통신을 사용하는가?


병렬 통신은 빠르지만, 데이터 비트 수 만큼 신호선이 필요하다.

예를 들어 8비트를 전송하려면 최소 8개의 데이터 선이 필요하다.

반면 직렬 통신은 데이터를 순차적으로 전송하기 때문에 적은 배선만으로도 통신이 가능하다.

UART는 이러한 직렬 통신 방식을 사용하는 대표적인 통신 인터페이스이다.