요약 : UART, I2C, SPI 통신을 비교하고 어떤 방식을 사용할 것인지 결정하는데 도움을 준다. UART는 고전적인 방식으로 모든 하드웨어가 지원하고 있는 방식이고, I2C는 작은 선으로 여러 하드웨어를 연결하여 사용할 수 있게 한다. SPI 통신은 근거리에 있는 하드웨어에 고속을 신호를 전송하기 위해 사용된다.
아두이노를 포함, 대부분의 MCU 들은 자체적인 처리와 함께 신호를 외부로 보내거나 받는 과정이 많다.
이때 고전적인 방식은 시리얼과 패러럴통신이 사용된다. 지금도 시리얼통신은 여전히 많은 산업현장에서 표준으로 사용된다. 반면 패러럴 통신은 특별한 경우가 아니고서는 많은 전송선을 써야 한다는 현실적 제약때문에 새로운 MCU 혹은 새로운 디지털 기반의 센서들은 채택하지 않고 있다. 반면 새롭게 등장하고 범용적으로 많이 쓰이는 것으로 I2C 와 SPI가 있다.
최근 사용되는 대부분의 MCU 들에는 UART, SPI, I2C 를 내장하고 있다.
UART는 시리얼통신이라고 불리는 것으로 데이터를 직렬로 전송하는 방법을 말한다. 송신과 수신을 별도로 처리하기에 데이터의 양방향 통신이 가능하다. 이를 Full Duplex 라고 한다. 또한 송신측과 수신측의 속도를 사용자가 알아서 맞춰야만한다. 아두이노에서 시리얼통신의 속도 결정이 필요한 이유이다.
>> 아두이노 측 속도 설정 : 9600 bps
>> 아두이노와 통신하는 PC 측 속도 설정 9600 bps
위처럼 아두이노와 PC의 속도를 서로 같게 하지 않으면 통신이 불가능해진다. 이처럼 서로간의 신호를 자동적으로 동기화하지 않는 것을 Asynchronous, 비동기라고 한다.
UART 가 비동식인 반면 SPI 와 I2C는 동기식이다.
I2C : UART 가 데이터 전송과 수신용 선만을 가진 반면 I2C는 데이터 전송선(SDA)과 클럭신호선(SCL)을 가진다. 이때 I2C 는 데이터 전송선이 하나이므로 송신과 수신을 동시에 하지 못한다. 이를 반이중(Half Duplex)라고 한다. I2C 는 여러 하드웨어와 연결하여 사용할 수 있다. 1:N 혹은 N:N 통신도 가능하다.
SPI : SPI는 I2C 와 비슷하게 1:N 통신이 가능하다. 데이터 송신(MOSI), 데이터 수신(MISO) 두개를 가져 Full Duplex 방식이고, 여러 하드웨어 중 하나를 선택하기 위해 신호선 SS를 가진다.
| UART 통신 | I2C 통신 | SPI 통신 |
동기, 비동기 | Asynchronous | Synchronous | Synchronous |
x:x | 1:1 | N:N | 1:N |
선 수 | 2 (R,T) | 2 (SDA, SCL) | 4 (SCK, MISO, MOSI, SS) |
Half/Full Duplex | Full | Half | Full |
전송거리 | <5m | <2~3m, 10m | <2m, 단거리 |
전송속도 | 느림 | 중간 | 빠름 |
모든 통신에서 전송거리는 케이블을 상태와 주변 상태에 따라 달라지고, 전송 신호의 속도에 따라 달라진다. I2C는 SPI도 전송속도를 느리게 하면 보다 멀리 신호를 전송할 수 있다. 단, SPI 통신은 근거리장치간 고속통신을 위해 준비된 프로토콜이므로 멀리 떨어진 장치에 굳이 SPI를 고집할 이유는 없다.
UART 는 모든 산업용 장비에서 사용될 수 있는 예전부터 사용된 프로토콜이다.
I2C는 다수의 하드웨어에 신호를 전달할 때 2개의 선만으로 가능하기때문에 센서들을 연결해서 사용할 때 많이 사용된다. 느리게 읽어도 되는 센서 신호의 입력이나 제어용으로 많이 사용된다.
SPI는 고속으로 데이터를 전송하는 프로토콜로 고속전송이 필요한 근접 기기간 많이 사용된다.