시리얼 통신(Serial Communication)이란?

- Serial(직렬) 통신은 하나의 신호선을 이용하여 데이터를 주고받는 통신을 일컬어 지칭합니다.
- 일정한 시간 간격으로 전송합니다.
- 일정한 길이의 데이터를 모두 전송하기 위해서는 다소 시간이 소요됩니다.
- 아두이노끼리 1대1 통신을 할 때도 쓰인다.
<회로도>

<코드1 - 송신>
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.write('a'); //write()함수로 'a'전송
delay(1000);
Serial.write('b'); //write()함수로 'b'전송
delay(1000);
}
<코드2 - 수신>
char data;
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop() {
if(Serial.available())
data = Serial.read();
if(data == 'a')//'a'수신
digitalWrite(13,1);
else if(data == 'b')//'b'수신
digitalWrite(13,0);//
}
<오늘의 과제> - 각 시리얼 통신 방법 알아보고 정리해보기(UART, I2C, SPI)
1. UART
- 동기식 시리얼 통신 방식
- 마스터(Master)와 슬레이브(Slave)가 존재
- SDA(Data송수신)과 SCK(Clock전송)으로 이루어져 있습니다.
- 슬레이브마다 지정된 주소 값을 가지고 데이터를 주고 받습니다.
- 데이터를 주고 받을 때는 반드시 주소 값을 붙여서 보내야 합니다.
--->
시리얼 통신을 하기 위해선 보내는 쪽(TX)과 받는 쪽(RX)에서 약속을 잡아햐 하는데 이를 프로토콜(Protocol)이라 합니다.
이를 확인하기 위해 UART에서는 '0'의 시작비트와 '1'의 정지비트를 사용합니다.(10비트 데이터를 전송)
UART통신은 전이중 방식(full duplex) 통신으로 송신과 수신을 동시에 진행할 수 있으며, 이를 위해서 2개의 범용 입출력 핀이 필요합니다.
2. I2C
- I2C(아이-투-씨)라고 읽기도 하지만 정식 발음은 I2C(아이-스퀘어-씨)입니다.
- 데이터 송/수신은 마스터에서 주도하며, 데이터를 전송하거나 읽어오기 전 반드시 슬레이브의 주소를 명시해준 후 통신을 시작해야하기 때문에 짧은 데이터 통신에 주로 사용됩니다.
- 동기화 통신 방식으로 클럭신호를 이용하여 데이터의 전송 타이밍을 맞추는 방식으로 시리얼 통신처럼 통신 속도가 따로 정해지지 않아도 됩니다.
--->
SDA와 SCL의 신호는 기본적으로 HIGH, 그러다 SDA신호가 LOW로 떨어지면 시작신호라고 판단합니다.
클럭신호가 SCL선으로 만들어집니다. 슬레이브의 주소는 마스터에서 생성할 수 있으면, '쓰기'일 경우에는 마스터에서 이후 데이터를 생성, '읽기'의 경우에는 슬레이브자체에서 데이터를 생성합니다.
2. SPI
- I2C와 같은 통신방법의 한 종류이지만 통신하는 방법이 다릅니다.
- 데이터를 보내는 동시에 데이터를 받을 수 있는 전화같은 방식입니다.
- 전이중 통신으로 양방향 통신입니다.
- 전송기가 필요하지 않으며 I2C보다 낮은 소비 전력을 가지고 있습니다.
- SPI통신에서는 송/수신을 위한 MOSI(마스터 --> 슬레이브)와 MISO(슬레이브 --> 마스터), 클럭, SS선이 필요합니다.
- 이 데이터의 송/수신타이밍을 결정짓는 것은 마스터 장치입니다.
--->
SPI장치들은 기본적으로 SHIFT REGISTER를 가지고 있는데 이는 데이터를 이동시킵니다.
SPI는 기본적으로 3가지의 전송 모드가 있는데 각각 wire SPI, Dual SPI, Quad SPI가 있습니다.
마스터에서 CS(=SS핀)에 LOW를 주어 제어를 시킨 뒤 클럭을 생성하여 동기를 맞춰주고 데이터를 받습니다.