파이썬으로 시리얼 통신을 할 일이 생겼기 때문에 공부를 시작한다.
'시리얼 Serial'이란 '직렬'을 뜻한다.
즉, '직렬' 통신 이라는 뜻이고, 서로 다른 컨트롤러들을 직렬로 연결하여 통신을 한다는 의미이다.
그렇다면 통신은 어떻게 하는 것일까?
시리얼 통신은 데이터를 "이진펄스"의 형태로 전송하고
이진 1을 논리 HIGH로 이진0을 논리 LOW로 나타내게 된다.
송신기인 Transmitter 가 이진펄스 형태로 데이터를 보내면
수신기인 Receiver 가 받아 높고 낮음을 구분하여 의미있는 데이터로 읽어낸다.

이런 방식으로 통신하기 위해서는 Transmitter와 Receiver는 Clock이 동기화 되어 있어야 한다.
Clock 클록이란 어떠한 시점에 이진펄스를 논리정보로 읽을 것인지에 대한 시점을 정하는 기준이라고 보면 된다.

Transmitter가 보낸 이진펄스가 존재하고 있고, 8 bits(8번 논리 정보를 뽑아낸다) 데이터를 Clock을 고려해서 Receiver가 읽는다고 가정해보자.
Clock이 느리다면 위쪽에 있는 것처럼 1 0 1 1 1 0 1 1 로 읽을 것이고
Clock이 빠르다면 아래쪽에 있는 것처럼 1 0 1 1 1 1 0 1 로 읽을 것이다.
즉, 똑같은 이진펄스를 읽어도 Clock에 따라서 읽히는 값이 달라지게 된다는 것이다.
그렇기 때문에 Transmitter와 Receiver의 Clock을 똑같이 맞춰주는 것이 중요하다.
이를 Clock Synchronization 이라고 하며, 시리얼 통신에 매우 중요한 구성요소이다.
그 외로 시리얼 통신의 중요한 요소에 대해 알아보자.
Synchronisation:
데이터의 묶음을 결정하기 위해 동기화가 필요. 이진 펄스에서 시작과 끝을 의미하는 프레임을 어떻게 식별하는 가에 대한 설정으로, Transmitter와 Receiver는 동기화 되어야 한다.
Error Control:
시리얼 통신에서는 노이즈에 영향을 주는 요소들이 많기 때문에, 에러 컨트롤이 필요하다.
이러한 오류들을 제거하기 위해 parity bits를 검사한다.
위에서 간략한 시리얼 통신에 대한 개념과 구성들을 알아봤다.
이런 구성들로 이미 구현되어 있는 프로토콜들에는 어떤 것들이 있을까?
시리얼 프로토콜로는 동기와 비동기 프로토콜들로 구분할 수 있다.
동기 프로토콜은 우리가 자주 사용하는 USB, CAN 그리고 SPI, I2C Microwire 등이 있고,
비동기 프로토콜로는 RS232, RS422, RS485 등이 있다.
각 프로토콜마다 특징이 다르고 장단점이 있기 때문에 각자 상황 별로 적절한 프로토콜을 선정해서 사용하면 된다.