시리얼(Serial) 통신이 뭘까?

brewmaster
newworld-kim
Published in
5 min readNov 19, 2020

시리얼 통신이 뭔데?…

시리얼 통신이 뭘까? 컴퓨터 본체에 매번 USB를 꼳아대며 자주 사용하고는 있지만, 시리얼 통신 개발하라고하면 걱정부터 앞선다. 이번 기회에 정리를 하고 넘어가고자 한다.

시리얼 통신은 영어로 Serial이다. 시리어의 반의어는 parallel로 병렬이다. 그러니까 직렬 통신이라고 불러도 무방하겠다. 중학교 과학시간에 배웠던 것처럼 직렬연결, 병렬연결하는 그 직렬이다. 서로 다른 컨트롤러를 직렬로 연결하여 통신하는 방법 중 하나란 말이다.

직렬과 병렬이 뭔지 조차 기억이 잘 나지 않는다고? 아래 그림을 보면 본 포스팅을 이해하기에는 충분할 것 같다.

직렬과 병렬은 대충 이해한 것 같은데, 어떻게 통신(Communication)을 한다는 것일까?

시리얼 통신에서는 데이터를 이전 펄스의 형태로 전송하고 이진 1을 논리 HIGH로 이진 0을 논리 LOW로 나타낸다. Transmitter라는 보내는 놈이 이진 펄스 형태로 데이터를 보내면 Receiver라는 받는 놈이 높고 낮음을 구분하여 의미있는 데이터로 읽는다는 얘기다. (실제로는 단순히 하나의 Transmitter와 하나의 Receiver로 구성되지만은 않는다.)

< 이진 펄스를 논리 정보로 >

시리얼 통신의 구성

이런 방식으로 통신하기 위해서는 Transmitter와 Receiver는 Clock이 동기화 되어 있어야 한다. Clock이란 어떠한 시점에 이진 펄스를 논리 정보로 읽을 것인지에 대한 시점을 정하는 기준이 된다. 이게 무슨 말이냐고? 아래 그림을 보자.

< 이진 펄스와 클록 >

Transmitter가 보낸 어떠한 이진 펄스가 있고, 8 bits (8번 논리 정보를 뽑아낸다 생각하자) 데이터를 Clock 을 고려해서 Receiver가 읽는다고 하자. Clock이상대적으로 느리다면 10111011 로 빠르다면 10111101로 읽게 된다. 똑같은 이진 펄스를 입력 받았는데도 말이다!

때문에 Transmitter와 Receiver의 Clock을 맞춰주는 것을 Clock Synchronization 이라고 부르며 시리얼 통신에 꼭 필요한 구성요소다.
이러한 Clock Synchronization은 인터페이스 종류에 따라 동기와 비동기로 구분되는데, 이후 기회가 된다면 별도로 다뤄보자.

< 동기식 인터페이스 >
< 비동기식 인터페이스 >

그 외, 아래 내용들도 시리얼 통신에 중요한 요소들이다.

  • Baud Rate :
    > Transmitter 와 Receiver 사이의 초당 전송 bits 수를 의미.일반적으로 9600을 사용하지만, 1200, 2400, 4800, 57600, 115200 등 선택해서 쓸 수 있다. Baud Rate가 높을 수록 데이터가 더 빠르다. Baud Rate는 Transmitter와 Receiver 모두 동일하게 설정해야 한다.
  • Framing :
    > 데이터 프레임이라고도 부르며, 시작과 정지 비트를 포함한 문자를 의미. 일반적으로 8 bits 를 사용하곤 하지만, 5, 6 또는 7 bits 도 모두 가능하다.
  • Synchronisation :
    > 데이터의 묶음을 결정하기 위해 동기화가 필요. 이진 펄스에서 시작과 끝을 의미하는 프레임을 어떻게 식별하는가에 대한 설정으로, Transmiiter와 Receiver는 동기화되어야 한다.
  • Error Control :
    > 시리얼 통신에는 노이즈에 영향을 주는 요소들이 많기 때문에, 에러 컨트롤이 필요하다. 이러한 오류들을 제거하기 위해 parity bits를 검사한다.

시리얼 통신 프로토콜들

시리얼 통신에 대한 간략한 개념과 구성들을 알아봤다. 이런 구성들로 이미 구현되어 있는 프로토콜들은 어떠한 것들이 있을까?

  • 동기 시리얼 프로토콜
  • 비동기 시리얼 프로토콜

동기와 비동기로 프로토콜들을 구분할 수 있다. 동기 프로토콜으로는 우리가 자주 사용하는 USB와 CAN 그리고 SPI, I2C, Microwire 등이 있고, 비동기 프로토콜로는 RS232, RS422, RS485 등이 있다. 각 프로토콜 별 특징이 다르고 장단점이 있기 때문에 상황별 적절한 프로토콜을 선정해야 한다.

시리얼 관련 포스팅이 추후 도움이 된다면 어플리케이션 레이어에서 도움이 될만한 포스팅도 작성해봐야겠다.

--

--