전송 방식에는 어떤것이 있을까?


1. 직렬 전송 (Serial Transmission)이란?


직렬 전송은 데이터를 한 번에 한 비트씩 순차적으로 전송하는 방식입니다. 데이터를 전송할 때, 비트들이 하나의 통로를 통해 순차적으로 이동합니다.

장점

  • 간단한 배선: 한 개의 통신 채널만 필요합니다.
  • 장거리 전송에 적합: 신호 간섭이 적고, 데이터 손실 가능성이 낮습니다.

단점

  • 속도 제한: 한 번에 한 비트씩 전송하므로 병렬 전송에 비해 속도가 느릴 수 있습니다.

예시

  • USB(Universal Serial Bus)
  • RS-232

2. 병렬 전송 (Parallel Transmission)이란?


병렬 전송은 여러 비트를 동시에 전송하는 방식입니다. 각 비트는 별도의 통로를 통해 동시에 전송됩니다.

장점

  • 빠른 전송 속도: 여러 비트를 동시에 전송하므로, 직렬 전송에 비해 속도가 빠릅니다.

단점

  • 복잡한 배선: 여러 개의 통신 채널이 필요합니다.
  • 장거리 전송에 부적합: 신호 간섭이 발생할 가능성이 높습니다.

예시

  • 컴퓨터 내부의 데이터 버스
  • 프린터 포트(병렬 포트)

3. 동기식 전송 (Synchronous Transmission)이란?


동기식 전송은 송신자와 수신자가 동일한 클럭 신호를 공유하여 데이터를 전송하는 방식입니다. 데이터는 일정한 타이밍에 따라 전송됩니다.

장점

  • 효율적 전송: 클럭 신호에 맞춰 데이터를 전송하므로, 데이터 전송 효율이 높습니다.
  • 연속적인 데이터 전송: 큰 데이터 블록을 연속적으로 전송할 수 있습니다.

단점

  • 복잡한 구현: 클럭 신호를 동기화해야 하므로, 구현이 복잡할 수 있습니다.

예시

  • Ethernet
  • SDH/SONET

4. 비동기식 전송 (Asynchronous Transmission)이란?


비동기식 전송은 송신자와 수신자가 클럭 신호를 공유하지 않고, 각 데이터 단위에 시작 비트와 종료 비트를 추가하여 데이터를 전송하는 방식입니다.

장점

  • 간단한 구현: 클럭 신호를 동기화할 필요가 없으므로, 구현이 간단합니다.
  • 유연성: 데이터 전송이 불규칙한 경우에도 적합합니다.

단점

  • 오버헤드: 각 데이터 단위에 시작 비트와 종료 비트를 추가해야 하므로, 오버헤드가 발생합니다.

예시

  • RS-232
  • UART(Universal Asynchronous Receiver/Transmitter)

5. 단방향 전송 (Simplex Transmission)이란?


단방향 전송은 데이터가 한 방향으로만 전송되는 방식입니다. 송신자와 수신자가 고정되어 있으며, 수신자는 데이터를 송신할 수 없습니다.

장점

  • 단순성: 통신이 단방향이므로, 구현이 간단합니다.

단점

  • 제한된 기능: 데이터가 한 방향으로만 전송되므로, 양방향 통신이 필요할 때는 사용할 수 없습니다.

예시

  • 텔레비전 방송
  • 라디오 방송

6. 반이중 전송 (Half-Duplex Transmission)이란?


반이중 전송은 데이터가 양방향으로 전송될 수 있지만, 동시에 전송될 수는 없는 방식입니다. 한 번에 한 방향으로만 데이터가 전송됩니다.

장점

  • 효율성: 양방향 통신이 가능하므로, 단방향 전송보다 효율적입니다.

단점

  • 동시 전송 불가: 동시에 양방향으로 데이터를 전송할 수 없습니다.

예시

  • 무전기 통신
  • CSMA/CD (Ethernet)

7. 전이중 전송 (Full-Duplex Transmission)이란?


전이중 전송은 데이터가 양방향으로 동시에 전송될 수 있는 방식입니다. 송신자와 수신자가 동시에 데이터를 주고받을 수 있습니다.

장점

  • 최대 효율: 양방향으로 동시에 데이터 전송이 가능하므로, 가장 효율적입니다.

단점

  • 복잡한 구현: 동시에 데이터를 주고받기 위한 복잡한 회로와 프로토콜이 필요합니다.

예시

  • 전화 통신
  • 현대 Ethernet (스위치 기반)

아두이노의 전송 방식에는 어떤것이 있을까?


아두이노는 UART, I2C, SPI 3가지의 통신방식을 지원합니다.

1. UART (Universal Asynchronous Receiver/Transmitter)


UART는 직렬 통신 방식 중 하나로, 비동기식 데이터 전송을 지원합니다. 두 장치 간에 데이터를 한 비트씩 순차적으로 전송하며, 시작 비트와 종료 비트를 사용하여 데이터 프레임을 구분합니다.

특징

  • 비동기식 통신: 클럭 신호를 공유하지 않고, 시작 비트와 종료 비트를 사용하여 데이터 프레임을 구분합니다.
  • 단방향 및 양방향 통신: 전송(TX)과 수신(RX) 라인을 통해 양방향 통신이 가능합니다.
  • 간단한 하드웨어 구성: 두 개의 데이터 라인(TX, RX)만 필요합니다.

장점

  • 구현이 간단하고, 하드웨어 요구 사항이 적습니다.
  • 널리 사용되며, 많은 장치에서 지원합니다.

단점

  • 데이터 전송 속도가 상대적으로 느립니다.
  • 클럭 신호를 사용하지 않으므로, 긴 거리에서의 데이터 전송에 제한이 있을 수 있습니다.

예시

  • 아두이노와 컴퓨터 간의 직렬 통신 (예: 시리얼 모니터)
  • GPS 모듈, 블루투스 모듈 등과의 통신

2. I2C (Inter-Integrated Circuit)


I2C는 다중 마스터-슬레이브 통신을 지원하는 동기식 직렬 통신 방식입니다. 두 개의 라인(SDA: 데이터 라인, SCL: 클럭 라인)을 사용하여 여러 장치 간에 데이터를 전송합니다.

특징

  • 동기식 통신: 클럭 신호(SCL)를 사용하여 데이터 전송을 동기화합니다.
  • 다중 마스터-슬레이브 구조: 여러 마스터와 슬레이브 장치 간의 통신을 지원합니다.
  • 2개의 데이터 라인: SDA(데이터 라인)와 SCL(클럭 라인)만 필요합니다.

장점

  • 간단한 배선: 두 개의 데이터 라인만으로 여러 장치를 연결할 수 있습니다.
  • 여러 장치 간의 통신을 지원하여 확장성이 뛰어납니다.

단점

  • 통신 속도가 상대적으로 느립니다.
  • 버스 충돌 가능성이 있으며, 이를 관리하기 위한 추가적인 프로토콜이 필요합니다.

예시

  • 센서, EEPROM, 실시간 시계(RTC) 모듈 등과의 통신
  • 아두이노 간의 데이터 전송

3. SPI (Serial Peripheral Interface)


SPI는 동기식 직렬 통신 방식으로, 마스터와 슬레이브 간의 빠른 데이터 전송을 지원합니다. 네 개의 라인(MOSI, MISO, SCK, SS)을 사용하여 데이터를 전송합니다.

특징

  • 동기식 통신: 클럭 신호(SCK)를 사용하여 데이터 전송을 동기화합니다.
  • 마스터-슬레이브 구조: 하나의 마스터와 여러 슬레이브 장치 간의 통신을 지원합니다.
  • 4개의 데이터 라인: MOSI(마스터 아웃 슬레이브 인), MISO(마스터 인 슬레이브 아웃), SCK(클럭), SS(슬레이브 선택) 라인이 필요합니다.

장점

  • 매우 빠른 데이터 전송 속도를 제공합니다.
  • 간단한 프로토콜로 구현이 쉽습니다.

단점

  • 많은 데이터 라인이 필요하여 배선이 복잡해질 수 있습니다.
  • 다중 슬레이브 장치 연결 시, 각 슬레이브마다 별도의 SS 라인이 필요합니다.

예시

  • SD 카드 모듈, 디스플레이, 플래시 메모리 등과의 통신
  • 고속 데이터 전송이 필요한 센서와의 통신

실습


아두이노의 통신을 활용한 실습이기때문에, 아두이노가 2대이상 필요하다.

아래와같이 회로를 구성하고, 코드를 실행하면 아두이노가 서로 UART통신을 통해 LED를 제어하는 것 을 볼 수 있다.

[송신측 아두이노]

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.write('a');
  delay(1000);
  Serial.write('b');
  delay(1000);
}

[수신측 아두이노]

char data;
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if(Serial.available()){
    data = Serial.read();
  }
  if(data=='a') {
    digitalWrite(13,1);
  }
  else if(data=='b') {
    digitalWrite(13,0);
  }
}