아두이노에서 고속의 주변 장치를 연결하기 위해 (1:N) 사용하는 통신방식은 SPI 통신과 I2C 통신이 있다. 두 통신 모두 동기식 통신 방식이고 비동기식 통신 방식(Clock X)으로는 UART 통신이 있는데 본 포스팅에선 동기식 통신 방식인 SPI 통신과 I2C 통신에 대해 알아본다.
SPI 통신
-
SPI point to point 연결
-
SPI Master-slave 연결
SPI(Serial Peripheral Interface) 통신은 MOSI(Master Out Slave In), MISO(Master In Slave Out) 선으로 데이터 송수신을 분리해 통신하기 때문에 I2C 통신 방식보다 통신 속도가 빠르고 전력 소모가 적다. 따라서 동시에 송수신 또한 가능하다. (속도: 10Mbs~20Mbs) 센서를 더 추가하는 경우 Slave 갯수 만큼 SS 라인이 더 필요하다. 또한 SPI Bus라인에 하나의 Master만 존재해야한다. 이더넷 연결이나 메모리카드와 같은 고속 통신이 필요한 경우 많이 쓰인다. 보드 별로 예약된 핀은 아래 표와 같다.
Arduino Board | MOSI | MISO | SCK | SS (slave) | SS (master) |
---|---|---|---|---|---|
Uno | 11 or ICSP-4 | 12 or ICSP-1 | 13 or ICSP-3 | 10 | - |
Mega | 51 or ICSP-4 | 50 or ICSP-1 | 52 or ICSP-3 | 53 | - |
Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | - | - |
Due | ICSP-4 | ICSP-1 | ICSP-3 | - | 4, 10, 52 |
I2C 통신
I2C(Inter-intergrated Circuit) 통신 방식은 위의 사진에서 볼 수 잇듯이 SDA 하나의 선으로 양방향 데이터 송수신을 한다. 클럭 시그널을 전송하는 SCL(Serial Clock) 핀과 데이터 전송을 위한 SDA(Serial Data)핀을 사용한다. SPI 방식보다는 상대적으로 느리고, 한 번에 양쪽에서 데이터 송수신이 불가하다. 센서를 더 추가하는 경우 버스라인에 데이터 선만 연결하면 된다. 고속 연결이 필요하지 않은 일반적인 경우에 I2C 방식을 많이 사용한다. 아두이노 우노에는 SDA-A4번 핀, SCL-A5번 핀이 예약되어 있고 아두이노 메가에는 SDA-D20번 핀, SCL-D21번 핀이 예약되어 있다.
I2C VS SPI
SPI | I2C | |
---|---|---|
핀 드라이브 | Push-pull | Open drain |
Signal lines | 4 | 2 |
최대 속도 | 10-100Mbps | 400 kbps in fast-mode(high-speed mode에선 3.4Mbps까지 가능) |
주변 기기 갯수 | Master의 SS라인에 사용할 수 있는 핀 수에 의해 제한 | 112(7-bit addressing) |
Multi Master | X | O |
Flow control | X | O |