파이썬-시리얼통신

윤정기·2023년 5월 9일

Python

목록 보기
1/1

파이썬으로 시리얼 통신을 할 일이 생겼기 때문에 공부를 시작한다.

시리얼 통신

시리얼 통신이란?

'시리얼 Serial'이란 '직렬'을 뜻한다.
즉, '직렬' 통신 이라는 뜻이고, 서로 다른 컨트롤러들을 직렬로 연결하여 통신을 한다는 의미이다.

그렇다면 통신은 어떻게 하는 것일까?
시리얼 통신은 데이터를 "이진펄스"의 형태로 전송하고
이진 1을 논리 HIGH로 이진0을 논리 LOW로 나타내게 된다.
송신기인 Transmitter 가 이진펄스 형태로 데이터를 보내면
수신기인 Receiver 가 받아 높고 낮음을 구분하여 의미있는 데이터로 읽어낸다.

  • 실제로 하나의 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 이라고 하며, 시리얼 통신에 매우 중요한 구성요소이다.


그 외로 시리얼 통신의 중요한 요소에 대해 알아보자.

  • Baud Rate
    Transmitter와 Receiver 사이의 초당 전송 bits 수를 의미한다.
    일반적으로 9600을 사용, 1200, 2400, 4800, 등 선택도 가능하다.
    Baud Rate가 높을 수록 데이터가 더 빠르다.
    Transmitter와 Receiver 모두 동일하게 설정한다.
  • Framing:
    데이터 프레임이라고 부르며, 시작과 정지 비트를 포함한 문자를 의미한다.
    일반적으로 8 bits를 사용하지만 5, 6 or 7 bits 도 모두 사용 가능하다.
  • Synchronisation:
    데이터의 묶음을 결정하기 위해 동기화가 필요. 이진 펄스에서 시작과 끝을 의미하는 프레임을 어떻게 식별하는 가에 대한 설정으로, Transmitter와 Receiver는 동기화 되어야 한다.

  • Error Control:
    시리얼 통신에서는 노이즈에 영향을 주는 요소들이 많기 때문에, 에러 컨트롤이 필요하다.
    이러한 오류들을 제거하기 위해 parity bits를 검사한다.


시리얼 통신 프로토콜들

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

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

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

<참고>
https://medium.com/newworld-kim/%EC%8B%9C%EB%A6%AC%EC%96%BC-serial-%ED%86%B5%EC%8B%A0%EC%9D%B4-%EB%AD%98%EA%B9%8C-bdf991a300b1

profile
하루하루 나아가는!

0개의 댓글