Serial 통신 (시리얼 통신, 직렬 통신)
임베디드 시스템은 각종 프로세서와 회로들 간 통신하며 동작합니다.
이에 따라, 데이터를 주고 받는 표준 프로토콜이 필요합니다.
프로토콜에는 크게 두 종류가 있습니다.
Parallel (병렬) / Serial (직렬)
Parallel
다수의 비트를 한 번에 전송하는 방법
- 보통 8, 16 혹은 그 이상의 라인을 통해 동시에 데이터를 전송
- 타이밍에 맞춰 모든 라인이 같이 동작할 수 있도록 CLK(clock) 라인이 필요하므로 8-bit data bus의 경우 9라인이 필요합니다.
Serial
데이터를 스트림으로 바꾸는 직렬화 과정을 거쳐서 한 번에 한 비트씩 전송하는 방법
- CLK 라인 포함 2라인으로 데이터를 전송
Parallel vs Serial
Parallel이 Serial에 비해 상대적으로 빠르고 구현이 간단하지만 input/output(I/O) 라인을 많이 소모합니다.
즉, 소모되는 자원과 비용이 많습니다.
임베디드 장치 적용을 위해 속도를 조금 줄이더라도 라인을 아끼는 방식인 Serial 통신 방식을 많이 사용하게 됩니다.
동기식 / 비동기식
동기식 방식
- 데이터 신호와는 별개로 동기 신호 (Clock 신호)를 함께 전송
- 데이터 라인의 동작을 클럭 시그널 라인의 동작과 동기화 -> 시리얼 버스에 함께 연결된 장치들이 이 클럭을 공유
- 직관적이고 빠르지만 하나의 라인을 더 필요로 함
- 한 번에 여러 문자를 수용하는 데이터 블록 단위로 전송
- 일반적으로 상당히 큰 데이터 블록인 경우 보다 좋은 성능을 가짐
- 정보 통신에서 사용되는 대부분의 통신 프로토콜에서 이용
- 대표적으로 SPI, I2C 프로토콜에서 사용
비동기식 방식
- 데이터 신호만을 보내고 각각의 방식에 따라 데이터 비트를 찾아냄
- 데이터가 외부 클럭 시그널의 도움 없이 동작
- 데이터를 안정적으로 전송, 수신할 수 있도록 처리 필요
- 보통 한 문자 단위와 같이 매우 작은 비트 블록의 앞과 뒤에 Start 비트와 Stop 비트를 삽입하여 동기화하는 방식
- 단순하고 저렴하나, 각 문자의 Start 비트와 Stop 비트를 비롯해 2~3 비트의 오버헤드를 요구하므로 전송효율이 다소 떨어짐
- 보통 낮은 전송속도에서 이용
- 일반적인 시리얼 통신은 대부분 비동기식 시리얼 통신
- 대표적으로 GPS, Bluetooth, XBee, Serial LCD 등에서 사용
시리얼 통신 동작 방식
시리얼은 여러 개의 비트 모임인 패킷을 통해 통신합니다.
이런 모양의 데이터가 있습니다. 한 칸은 1바이트를 의미합니다.
주고받고자 하는 데이터의 크기가 항상 같지는 않기 때문에 데이터에 대한 구분자가 필요할 것입니다.
데이터가 어느 시점에 시작되고 끝나는지를 알기 위해 일반적으로 '전송 제어 문자'인 STX와 ETX를 사용합니다.
STX(Start of Text, 0x02) : 데이터의 시작을 의미
ETX(End of Text, 0x03) : 데이터의 끝을 의미
그러나, 데이터 중 STX(0x02)나 ETX(0x03)에 해당하는 값이 있으면 문제가 생길 수 있습니다.
위와 같은 경우는 데이터로 포함되는 0x02이 STX로 인식되지 않고 데이터로 인식되게 하는 장치가 필요합니다.
또 다른 전송 제어 문자인 DLE를 통해 이를 가능하게 합니다.
DLE(0x10)를 만나면 뒤에 나오는 0x02, 0x03은 STX나 ETX가 아닌 데이터로 인식하도록 합니다.
그러나, DLE 역시 STX, ETX와 비슷한 문제를 발생시킬 수 있습니다.
ETX 바로 앞에 0x10의 데이터가 위치할 경우 0x10은 DLE 문자로, ETX는 전송 제어 문자가 아닌 데이터로 인식할 수 있습니다.
이를 막기 위해 다시 DLE를 활용합니다.
0x10 앞에 항상 DLE를 추가하도록 하여 위와 같은 상황을 막도록 합니다.
전송 제어 문자를 활용하는 방법에는 두 가지가 있습니다.
위 설명과 방법 1과 같이 STX, ETX가 아닌 0x02, 0x03 앞에 DLE를 두는 것,
방법 2와 같이 DLE 뒤, ETX 앞에만 DLE를 두어 아예 처음과 끝을 구분짓고 나머지 0x02, 0x03은 데이터로 취급하는 것
상황에 맞게 방법을 선택하여 사용하면 될 것입니다.
'Android' 카테고리의 다른 글
Coroutine (1) (1) | 2023.12.06 |
---|---|
DataStore (2) | 2023.12.06 |
Hilt (2) | 2023.12.05 |
[Kotlin] 코틀린 기본 문법 (3) (0) | 2022.08.12 |
[Kotlin] 코틀린 기본 문법 (2) (0) | 2022.08.10 |