+ 한국항공대학교 최차봉 교수님의 임베디드 SW 과목 내용을 정리한 글입니다.
Communication Protocols
1. Parallel Communication Protocol (병렬 통신)
- Multiple Bits at a time: 여러 비트를 동시에 전송한다.
- Fast, Easy to implement: 구현이 쉽고 빠르다.
- Requires more wires: 많은 라인이 필요하다.
=> 없어지고 있는 추세이다.
2. Serial Communication Protocol (직렬 통신)
- Single Bit at a time: 비르를 하나씩 순차적으로 전송한다.
- Slow, Difficult to use: 사용이 어렵고, 느리다.
- In general, 4 wires: 일반적으로 4개의 라인만 필요하다.
+ 한 클럭에 1 Bit씩 통신한다.
Serial communication
데이터를 비트 단위로 전송하는 직렬 통신 방법이다.
1. Synchronous
- Pairs data line with a clock signal, faster, requires clock line
=> 데이터 라인을 클럭과 쌍으로 구성한다. 빠르지만, 별도의 클럭 라인이 필요하다. (클럭과 동기화)
- 클럭이 high일 때만 유효한 비트를 읽는다.
ex) SPI, I2C
2. Asynchronous
- no External Clock signal, requires extra efforts
=> 외부의 클럭 신호가 없으므로, 추가적인 무언가가 필요하다. (클럭과 동기화 X)
Protocols of Asynchronous Serial
- 시리얼 통신에서 데이터는 데이터 프레임이라고 불리는 작은 패킷으로 나누어진다.
- 통신을 위해 동일한 프로토콜로 구성된 두 장치가 모두 시리얼 버스로 연결되어야 한다.
< Data Frame 구성>
1. Start Bit
- 데이터 프레임의 시작을 나타내는 비트이다.
- 일반적으로 LOW(0) 상태이다. (HIGH -> LOW)
2. Data Bits
- 실제 데이터를 나타내는 비트이다. (실제 데이터 비트 수)
- 일반적으로 8 Bit(1 Byte)를 사용한다. (Data Chunk)
3. Parity Bit
- 데이터 비트들의 홀수 또는 짝수의 합을 나타내는 비트이다.
- 이를 통해 데이터의 무결성을 확인할 수 있다. (오류 검출)
4. Stop Bit
- 데이터 프레임의 끝을 나타내는 비트이다.
- 일반적으로 HIGH(1) 상태이다. (Holding HIGH)
< Endianness >
- 바이트 순서를 나타내는 개념으로, 데이터가 메모리에 저장되는 방식이다.
- 즉, 어디부터 전송하고 저장할지를 결정한다.
1. Big Endian
- 가장 상위 바이트(MSB)부터 가장 낮은 주소에 저장되고, 가장 하위 바이트가 가장 높은 주소에 저장된다.
2. Little Endian
- 가장 하위 바이트(LSB)부터 가장 낮은 주소에 저장되고, 가장 상위 바이트가 가장 높은 주소에 저장된다.
LSB (Least Significant Bit)
- 가장 낮은 자리. 즉 이진수에서 가장 오른쪽 비트를 의미한다.
MSB (Most Significant Bit)
- 가장 높은 자리. 즉 이진수에서 가장 왼쪽 비트를 의미한다.
=> Serial Communication 에서는 Little Endian을 사용한다.
< Baud Rate >
- 초당 전송되는 비트 수를 측정하는 단위이다.
- 아두이노에서 Serial.begin()을 통해 설정한다.
ex) 9600 Baud Rate: 1초에 9600개의 Bit를 전송한다.
Serial Communication Example
조건: Baud 9600 bps, 8 Data bits, No Parity, 1 Stop Bit
'O', 'K'를 전송하는 과정은?
1. 'O'는 아스키코드로 0x4F이고, 0x4F는 2진수로 01001111이다.
2. 'K'는 아스키코드로 0x4B이고, 0x4B는 2진수로 01001011이다.
3. LSB부터 전송하는 Little Endian을 사용하기 때문에 2진수를 뒤집고 맨 앞과 뒤에 Start Bit(0)와 Stop Bit(1)를 붙여서 'O'를 전송하고, 'K'를 전송한다.
=> 01111001010110100101 전송
Actual Data Size of one Frame? (한 프레임의 실제 데이터 크기?)
=> 1 Start Bit + 8 Data Bits + 1 Stop Bit = 10 Bits
How many bytes per second? (초당 몇 Byte를 전송?)
- 1초에 9600 Bit를 전송할 수 있고 10 Bit의 데이터 프레임에 1Byte의 데이터를 전송한다.
=> 9600 / 10 = 960 Bytes per second
!! 9600 / 8이 아님에 유의 !!
How long does it take to send one bit? (1 Bit를 보낼 때 걸리는 시간?)
=> 1 second / 9600 Bits = 104 μs / 1 Bit
UART (Universal Asynchronous Receiver / Transmitter)
컴퓨터와 다양한 외부 장치간에 데이터를 송수신하기 위한 표준 통신 프로토콜과 인터페이스를 제공하는 시리얼 통신 방식이다.
Arduino Uno는 하나의 UART를 갖는다.
- Pin 0: RX (데이터 수신)
- Pin 1: TX (데이터 송신)
주의할 점: UART(Pin 0, 1)는 PC와 연결하는 동시에 작업할 수 없다.
=> 시리얼 모니터와 외부 장치간의 통신(수신)을 동시에 할 수 없다.
RX - TX, TX - RX, GND - GND로 1:1 Communication
Buffering Data: First In First Out (FIFO): 8 Bit가 가득 차면 통신한다.
Arduino Library for Software Serial
- 소프트웨어적으로 구현한 Serial Communication이다.
- Not fast as Hardware Serial: 하드웨어 시리얼 통신만큼 빠르지 않다.
- Maximum RX speed is 57600 bps: RX 최대 속도는 57600 bps이다.
- RX is nor working Pin13: 13번 포트는 아두이노 내장 LED와 연결되어있기 때문에 시리얼 통신으로 사용이 불가능하다.
사용 코드 예시
#include <SoftwareSerial.h>
SoftwareSerial mySerial(4, 5); // RX로 4번 포트, TX로 5번 포트를 사용
void setup() {
mySerial.begin(9600); // Boud rate을 9600으로 설정
}
void loop() {
char c = mySerial.read(); // 버퍼에 받아놓은 데이터 중 1Byte를 가져온다.
}
'Computer Science > Embedded Software' 카테고리의 다른 글
[Embedded Software] SPI Communication (0) | 2023.10.18 |
---|---|
[Embedded Software] UART Communications 실습 (0) | 2023.10.11 |
[Embedded Software] PWM 실습 (1) | 2023.10.05 |
[Embedded Software] Interrupt 실습 (0) | 2023.09.27 |
[Embedded Software] Interrupt (0) | 2023.09.26 |