이번에는 시리얼 통신에 대해서 적어보겠습니다. 지금은 왜 그랬는지 모르겠지만 학부생 때 꽤 어려워했던 기능중에 하나였는데요. 개념은 이해가 되는데 막상 실습을 해보면 뭐가 자꾸 제대로 안되고 데이터가 꼬이고 하면서 꽤 힘들었던 실습이었다는 기억이 있습니다.
시리얼 통신이란?
직렬 통신이라고도 부르는 시리얼 통신은 데이터를 통신 채널을 거쳐서 보낼 때 한번에 하나의 비트 단위로 데이터를 전송하는 통신 방식을 말합니다. 시리얼 통신과 대조적인 방식으로 병렬 통신(Parallel Communication)이 있는데 해당 방법은 여러 통신 채널을 이용해서 데이터를 한번에 여러 개의 데이터를 보내는 방식입니다. 간단하게 두 가지 방법의 차이를 나타내보면,
보낼 데이터 : '012345'
병렬:
0
1
2
3
4
5
직렬:
0, 1, 2, 3, 4, 5
실제로는 이것보다 복잡하지만 이런 느낌으로 각각 다르다는 점을 알아주시면 되겠습니다.
시리얼 통신의 특징
시리얼 통신은 위에서도 설명드렸지만 한 번에 하나의 데이터만 보내는 특성으로 인해 통신 채널 또는 통신선이 하나만 있어도 사용에 문제가 없는 특징이 있습니다. 즉 병렬 통신과 달리 선이 여러 개 있을 필요가 없으니 상대적으로 적은 비용으로 통신 설비를 꾸릴 수 있다는 장점이 있습니다. 물을 데이터라고 생각하고 수도관이 통신선이라고 한다면 출발지에서 목적지까지 물을 보내는데 굳이 수도관을 여러개 설치할 필요없겠죠. 하나로만 연결해도 물은 충분히 잘 흘러갈 것입니다. 하지만 관이 두 개 또는 여러 개라면 어떨까요? 물이 훨씬 빨리 빠져나가겠죠. 따라서 직렬 통신은 병렬 통신에 비해 같은 데이터를 보내는데에 있어서 속도가 느리다는 단점이 있습니다(물론 사람이 불편하다고 느낄 만큼 느리지는 않습니다). 실제로 시리얼 통신을 자주 사용하는 장치들의 경우는 굳이 엄청 빠른 통신속도가 필요하지도 않고 병렬 통신을 위한 연결선을 모조리 설계해야한다는 단점이 명확하기 때문에 대체적으로 시리얼 통신을 사용합니다.
비동기식, 동기식 시리얼 통신
시리얼 통신에는 동기식(Synchronous) 시리얼 통신과 비동기식(Asynchronous) 시리얼 통신이 있습니다. 시리얼 통신은 말그대로 통신이기 때문에 신호를 보내는 쪽과 받는 쪽의 사인이 맞아야겠죠. 보내는 쪽에서 받는 쪽 사정은 생각도 안하고 보내기만 하고 반대로 보내지도 않는데 받으려고 계속 하염없이 기다리기만 하는 것도 비경제적이니까요. 따라서 시리얼 통신을 함에 있어서 '우리 이걸 기준으로 신호를 보내고 받는 걸로 약속하자' 라고 서로 합의를 하는 방법이 있고, 그 방법의 차이가 비동기식, 동기식으로 나뉜다고 생각하시면 되겠습니다.
동기식 시리얼 통신:
동기식 시리얼 통신은 그렇다면 어떻게 데이터의 송수신을 약속할까요? 위에서 시리얼 통신은 한 번에 하나의 데이터만 보내기 때문에 통신 채널이 하나만 있어도 무방하다는 얘기를 드렸습니다. 하지만 동기식 시리얼 통신은 클락 신호를 통해 데이터의 동기를 맞추기 때문에 클락핀이 추가적으로 필요합니다. 클락 신호는 펄스로 보내는데 구성에 따라 다르겠지만 펄스가 발생할 때 데이터를 수신하겠다고 약속을 해놓았다면 클락핀에 펄스가 인식될 때 데이터를 수신하는 방식이 동기식 시리얼 통신입니다. 다만 추가적으로 클락핀이 필요하기 때문에 비용이 상대적으로 많이 든다는 단점이 있습니다.
비동기식 시리얼 통신:
비동기식 시리얼 통신은 클락핀을 필요로 하지는 않고 데이터를 보낼 때 데이터의 앞과 뒤에 시작 신호와 종료 신호를 붙여서 보내는 방법입니다. 동기식과는 달리 수신하는 쪽에서 오는 데이터를 받을 때 어디서부터 어디까지가 하나의 신호인지 알려줘야 하기 때문에 시작과 끝을 추가적으로 신호를 붙여서 알려줘야 합니다. 이런 이유 때문에 동기식 시리얼 통신보다 통신 속도가 느리다는 단점이 있습니다.
UART/USRT
예전에 캡스톤 디자인 포스팅을 작성하면서 해당 내용을 간략하게 설명했던 적이 있는데 오늘은 조금만 더 자세히 설명해보겠습니다. UART(Universal Asynchronous Receiver/Transmitter)와 USRT(Universal Synchronous Receiver/Transmitter) 는 각각 비동기식 시리얼 통신과 동기식 시리얼 통신을 지원하구요. 사실 요즘은 UART/USRT라고 딱 구분되어 있는 것 보다는 USART라고 기재 되어 있는 경우가 훨씬 많은 것 같네요(USART의 비동기 모드가 UART이기 때문). UART나 USRT 자체가 시리얼 통신의 방식이라기 보다는 송수신기라고 보는게 맞을 것 같습니다. 메모리에 저장되어 있는 병렬 데이터를 직렬화해서 보내고 받는 회로로 구성되어 있기 때문이니까요. 저가 마이크로 컨트롤러에도 무조건 들어있는 기능이라 전자, 기계, 컴퓨터 공학 계통의 전공을 하셨던 분들은 모르기 어려운 친구들이죠. 이외에도 I2C나 SPI등이 있습니다.
이번 포스팅에서는 시리얼 통신과 그 특징, 방식에 대해서 알아봤는데요. 시리얼 통신 강의를 들은지도 꽤 되어서 빠진 내용이 많으리라 생각됩니다. 혹시 궁금한 점이 있다면 언제든지 댓글로 남겨주시면 감사하겠습니다.
'Computer Science' 카테고리의 다른 글
[CS]손실 압축, 무손실 압축 (0) | 2022.06.03 |
---|