I2C와 SPI는 근거리에서 소자와 소자 사이의 통신을 위한 통신 프로토콜이다. 두 방식은 Master와 Slave간의 다중 통신이 가능한데 통신 방식의 약간의 차이가 있다.
I2C (Inter-Integrated Circuit)
- 소자와 소자 사이 통신을 위해 두 가닥의 선을 연결
- SDA: 데이터 선
- SCL: 클럭 신호 전송 선
- 클럭 신호에 맞춰 데이터를 전송함
- 전송 데이터의 첫번째 바이트에는 주소 정보가 있음
- Master - Slave 간의 통신
- Master는 MCU, Slave는 센서, 메모리 등의 소자
- Master와 Slave의 로직(전압) 레벨이 같아야함
- 레벨 컨버터로 전압 레벨 같게 해줄 수 있음
- 최대 127개까지 슬레이브로 연결 가능
- 아두이노에서는 두 선으로 통신한다 해서 TWI(Two Wire Interface)라고도 부름
I2C에서는 소자를 구분하기 위해 주소(address) 개념을 활용한다. 각 소자들은 자신만의 주소를 갖고 있는데 이 주소들은 서로 독립적이며 주소가 동일한 슬레이브가 중복되면 충돌이 발생한다. 각 소자에 할당된 주소는 칩 생산 업체에서 부여된다. 앞서 설명했듯이 데이터 전송시에 주소를 포함해서 전송한다. 따라서 이 주소에 해당하는 소자만 데이터를 받는 방식이다.
모든 통신은 Master가 주도하며 Master가 통신 여부를 결정한다. 즉, Slave는 Master에게 먼저 말을 걸 수 없는 형식이다. Master가 Slave에게 데이터 전송을 요구하면 그 때 Slave는 Master에게 데이터를 전송하는 방식이다. 또한 Master가 Slave에게 데이터를 전송할 수도 있다. 통신의 시작과 종료도 Master가 결정한다.
SPI (Serial Peripheral Interface)
- 소자와 소자 사이 통신을 위해 세 가닥의 선을 연결
- MOSI (Master Out, Slave In) : 데이터 선
- MISO (Master In, Slave Out) : 데이터 선
- SCK : 클럭 신호 전송 선
- SPI에서는 Chip Select 핀을 사용함
- 여러 소자를 연결 가능
- 하지만 그만큼 Chip Select핀(SS : Slave Select 라고도 함)을 GPIO에 연결해줘야하는 부담이 있음
- I2C에 비해 속도가 빠르다
- 속도 제한이 없다.
- LCD 드라이버 등에 SPI를 많이 사용
- 최대 5MHz
SPI에서는 소자를 구분하기 위해 Chip Select핀을 사용한다. CS핀은 Active Low로 동작하며 통신을 원하는 Slave 소자의 CS를 Low로 변경하면 해당 소자와 통신이 가능하다. Master와 Slave간의 통신 개념은 앞서 설명한 I2C에서의 개념과 동일하다.
정리하자면, I2C 통신은 2개의 선(SDA, SCL)으로 통신하고 SPI 통신은 3개의 선(MOSI, MISO, SCK)으로 통신한다. 두 통신 방법 모두 Master와 Slave간의 통신으로 I2C에서는 소자(Slave)를 구분하기위해 각 소자마다 주소를 할당하여 Master와 통신하고, SPI에서는 Chip Select핀을 통해 통신하고자 하는 Slave를 지정하여 Master와 통신한다.
'Elec Academy' 카테고리의 다른 글
Elec Academy - Embedded System Portfolio (0) | 2021.09.09 |
---|---|
STM32 MCU 선정과정 (0) | 2021.07.17 |