I2C와 SPI 통신
I2C와 SPI 통신은 유사하지만 다른 통신 방법입니다. 따라서 소형 TFT 디스플레이들에 보면 SPI와 I2C가 겸용으로 되어 있는 부품들이 많습니다. I2C와 SPI를 겸용으로 사용하다 보니 핀 이름과 관련된 것부터 혼동이 있어서 정리하는 김에 글을 작성합니다.
※ 현재 SPI, I2C에서 사용되는 단어인 Master, Slave는 Controller(컨트롤러), Peripheral(주변기기)로 변경해서 사용하는걸 권장하는 추세이지만 여기에서는 기존에 사용했던 Master, Slave를 사용합니다. 현재 많은 부품들이 Controller, Peripheral보다는 Mastser, slave로 많이 사용되기 때문입니다.
SPI 통신, Serial Peripheral Interface
SPI통신은 동기 통신방식이며, 마스터와 슬레이브가 존재합니다. 마스터는 여러개의 슬레이브를 가질 수 있으며, 각각의 슬레이브를 선택하여, 통신할 수 있습니다. 핀은 SCK, CS, MOSI, MISO 으로 이루어져 있습니다. 또한 I2C보다 낮은 소비전력을 가집니다.
이 핀들의 이름을 살펴보면 MOSI는 Master Out Slave In 입니다. 마스터에서 데이터를 보내고 슬레이브에서 데이터를 받는 핀입니다. 반대로 MISO는 Master In Slave Out 입니다. 위의 핀과 반대입니다.
CS 는 Chip Select 입니다. 여러 슬레이브중 하나를 선택할 때 이 핀을 사용합니다. 따라서 이 핀은 슬레이브의 갯수만큼 필요합니다. (※물론 다른 방식도 있지만 독립 핀을 구성하는 것을 설명합니다.)
SCk는 Serial Clock 입니다. 이 클럭핀으로 마스터와 슬레이브가 동기 통신방식으로 통신할 수 있습니다.
I2C 통신, Inter-Integrated Circuit
I2C도 동기 통신방식이며, 마찬가지로 마스터와 슬레이브가 존재합니다. 슬레이브는 여러대를 설치할 수 있습니다. 하지만 SPI와 다른점은 SDA와 SCK 핀 만 사용합니다.
핀의 이름을 살펴보면 SDA는 Serial Data 이며, SCK는 Serial Clock입니다. 그런데 SPI 통신에서는 CS(Chip Select)핀으로 데이터를 보낼 핀을 정했다면, I2C에서는 어떻게 각 슬레이브를 구별해서 보낼지 의문이 드는 대목입니다.
그것은 마스터가 슬레이브에 보내는 데이터 구조에서 찾을 수 있습니다.
2번째에 보시면 슬레이브 주소값이 데이터화 함께 전송됩니다. 따라서 주소값에 해당되는 슬레이브가 이 데이터를 전송받게 됩니다.
핀의 이름 정리
보통 SPI와 I2C가 함께 사용되는 부품들이 있기 때문에 핀의 이름을 혼용해서 표시합니다. 같은 기능을 할 확률이 높은 이름들을 끼리 분류를 정리해둡니다. (※ 정확한 것은 데이터 시트가 있으면 좋습니다.)
- MOSI(Master Out Slave In)
- COPI(Controller Out Peripheral In, PICO라고도 부름)
- SDA(Serial Data)
- SDI(Serial Data In, 슬레이브 기준)
- SDO(Serial Data Out, 마스터 기준)
- SDIO(Serial Data In/Out, 모두 가능)
- data
위 핀들은 데이타들을 마스터에서 슬레이브로 보내는 기능을 합니다. SDI는 슬레이브에 주로 표시됩니다. 다른말로 COPI라고도 합니다(컨트롤러에선 OUT, 주변기기에선 IN). 현재는 master, slave 보다는 controller, peripheral로 대체되고 있습니다.
- MISO(Master In Slave Out)
- CIPO(Controller In Peripheral Out, POCI라고도 부름)
- SDI(Serial Data In, 마스터 기준)
- SDO(Serial Data Out, 슬레이브 기준)
- SDIO(Serial Data In/Out, 모두 가능)
위 핀은 SPI 통신에서만 사용되며, 첫번째 핀에서 소개한 MOSI 핀들과 반대 개념으로 보시면 됩니다.
- SCK(Serial Clock)
- SCL(Serial Clock)
- SCLK(Serial Clock)
- CK(Clock)
- CL(Clock)
- CLK(Clock)
- clock
위 핀은 모두 클럭을 의미합니다. 처음 SPI를 적용할때 부품마다 이름이 달라서 고생했던 기억이 떠오르네요.
- SS(Slave Select)
- CS(Chip Select)
위 핀은 마스터에서 데이터를 전송할 슬레이브나 주변기기들을 선택하는 핀입니다. 해당 핀이 활성화되면, 해당 슬레이브로 데이터를 보내게 됩니다.
- D/C(Data/Command)
- RS(Resigter Select)
SPI의 공식 핀은 아니지만 마스터(컨트롤러)가 각각의 슬레이브에게 전송하려는 것이 명령인지 데이터인지 구별하기 위한 핀입니다.
'개발 > 아두이노-Arduino' 카테고리의 다른 글
SPI 통신 (2) | 2022.09.25 |
---|---|
[SPI/TFT...] 디스플레이에 텍스트, 문자가 출력되는 원리 (2) | 2022.09.20 |
[에러/arduino] avrdude: stk500_recv(): programmer is not responding (0) | 2022.09.11 |
[에러/arduino] expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino (0) | 2022.08.20 |