먼저 이해하는데 있어 필요한 직렬 통신, 병렬 통신, 통신 방법, 동기 방식, 비동기 방식에 대해 알아보았습니다.
🌏 직렬 통신 (Serial 통신)
- 하나의 경로를 통해 데이터를 순차적으로 전달하는 통신
- 라인이 하나라 구조적으로 매우 간단하며, 양단간 송수신 거리가 멀어도 큰 제한이 없다.
🌏 병렬 통신 (Parallel 통신)
- 다수의 경로를 통해 여러 데이터를 한 번에 전달
- 라인이 여러 개 이기 때문에 데이터를 동시에 빠르게 송수신 가능하나 한 번에 훨씬 많은 데이터가 오가므로
거리가 멀수록 직렬 통신에 비해서 더 높은 자원(전력)이 소모되며 초기 설치 시 하드웨어적 비용이 더 발생한다.
🌏 통신 방법
- 통신하는 방법은 직렬 통신, 병렬 통신 둘 다 동일하며 아래와 같다.
Transmitter에서 데이터를 아래와 같은 펄스의 형태로 송신하고
Receiver에서 해당 펄스를 수신받아 읽는 방식으로 이루어진다.
- 데이터 송 수신 시 High, Low를 읽는 순간이 서로 일치해야 같은 데이터를 주고받을 수 있기 때문에
Baud Rate(1초마다 데이터를 읽고 쓰는 속도)는 수신 측과 송신 측이 일치해야 한다.
- 통신하는 원리를 알아보았으며 실질적으로 데이터를 주고받는 방법에는 동기 전송 방식과 비동기 전송 방식이 있다.
동기 방식
- 가장 큰 특징은 보낼 데이터를 끊김이 없이 보내는 것이며 연속적으로 보내기 때문에 속도가 빠르다.
- 0과 1로 이루어진 데이터를 주고받을 때 기존 상태와 동일한 0이 처음과 끝에 들어오면 시작과 끝을
감지할 수 없기 때문에 데이터 시작과 끝을 알리는 동기문자 보낸다.
- 동기문자에는 데이터 송수신에 필요한 여러 정보가 있기 때문에 에러 없이 정확하게 데이터를 주고받을 수 있다.
비동기 방식
- 연속적이지 않게 데이터를 끊어서 보낸다.
- 데이터를 끊어서 보내기 때문에 언제가 끝이고 언제가 시작인지 몰라 처음과 끝에 start, stop 비트를 보낸다.
- 이 외에도 World Length(한 번에 보내는 데이터의 비트 수를 설정) ,
Parity Bit (데이터 비트 수 검증)를 통해 정확도를 높이는 방법을 사용한다.
- 휴지시간이 존재하기 때문에 동기 방식보다는 느리다.
(※ 굳이 느린 비동기 방식을 쓰지 않을 것 같으나 비동기 방식이 더 간편하고 요구사항이 낮아 여러모로 사용한다고 한다.)
🌏 UART & USART 통신이란?
UART : Universal Asynchronous Receiver/Transmitter -> 범용 비동기식 송/수신기(비동기식 직렬 통신)
UART는 송신, 수신간 비동기식을 사용하며 통신 방법은 직렬 통신을 사용하고
USART : Universal Synchronous Asynchronous Receiver/Transmitter -> 범용 동기식 송/수신기(동기식 병렬 통신)
USART는 송신, 수신간 동기식을 사용하며 통신 방법은 병렬 통신을 사용한다.
F429zi 같은 간단한 MCU에서는 비교적 간단한 UART(비동기식 직렬 통신)를 기본적으로 더 많이 사용한다.
UART 통신
- 비동기 방식으로 사용되는 직렬 통신
- 비동기식 방식으로 데이터 송신 수신을 하는데 데이터를 수신하는 방법에서 다시 폴링, 인터럽트 방식으로 나뉜다.
- 비동기식이기 때문에 데이터 해석에 있어 오차가 없도록 Baud Rate, Word Length, parity bit, Stop Bit
을 맞추어야 한다.
- 데이터 선만 있으면 되기 때문에 구현이 간단하다.
Polling 방식
정해진 시간 또는 순번에 데이터가 들어왔는지 여부를 체크하는 방식
> 데이터가 들어오지 않았음에도 계속해서 체크해야 하므로 시스템 부하가 일어난다..
> 정확한 주기에 맞춰 작동이 불가하다.
> 구현이 쉽다.
인터럽트 방식
정해진 인터럽트 핀에 신호가 들어오면 MCU는 하고 있던 동작을 멈추고 인터럽트 서비스 루틴을 실행한다.
> 정확한 타이밍에 빠르게 대응할 수 있다.
> 시스템 부하가 적다.
> 폴링에 비해 구현이 다소 복잡하다.
USART 통신
- 동기모드로 사용되는 직렬통신으로 UART에 Clock 선이 하나 추가된다.
- 수신하는 입장에서 끊기지 않는 연속적인 신호가 들어오고 Clock의 유무와 Clock 정보만 확인하면
되므로 데이터 송수신 효율이 높다. (즉, 동기식보다 높은 전송속도를 허용함)
- Clock의 추가로 구조적으로 어렵고, 높은 비용이 발생한다.
[참조]
https://www.youtube.com/watch?v=9mQFESXMmPs
'embedded' 카테고리의 다른 글
[stm32] ADC & DMA 이론 정리 (0) | 2023.09.06 |
---|---|
[stm32] UART 실습 (0) | 2023.08.30 |
[stm32] Timer 실습 (0) | 2023.08.16 |
[stm32] Timer 이론 정리 (0) | 2023.08.16 |
[stm32] GPIO 실습 (0) | 2023.08.13 |