Serial 통신 이해를 위해 Internet 상의 좋은 자료를 찾았고, 이해를 위해 번역 및 내용 추가 하였습니다.
---
이 페이지에서는 UART, SPI, I2C 를 테이블 형식으로 비교 합니다.
여러 항목들을 비교할 예정 입니다.
항목
|
UART
|
SPI
|
I2C
|
전체 이름
|
Universal Asyncronous
Receiver/Transmitter
|
Serial Peripheral Interface
|
Inter-Integrated Circuit
|
|
|||
핀
|
TxD: Transmit Data
RxD: Receive Data
|
SCLK: Serial Clock
MOSI: Master Output, Slave Input
MISO: Master Input, Slave Output
SS: Slave Select
|
SCL: Serial Clock
|
Data Rate
데이터 전송 속도
|
비동기(asynchronous) 통신이기 때문에 공유하는 Clock
이 없어서 통신하는 양쪽 기기의 속도를 동일하게 맞춰 주어야 한다. 동일하지 않아도 통신이 되는 경우가 있지만 의도하지 않은 데이터가 들어갈 경우가 있다.
Maximum 통신 속도는 Model 에 따라 다르며, 일반적으로 115,200bps 이다. |
SPI에서 최대 데이터 속도는 정해져 있지 않다. 보통 10Mbps 에서 20Mbps 사이 이다.
|
I2C는 100Kbps, 400Kbps, 3.4Mbps 를 주로 사용하며 10Kbps 나 1Mbps를 사용하는 경우도 있다.
|
Distance 거리
|
5미터 이하
|
가장 길다.
|
길다.
|
Type of communication
통신의 종류
|
비동기
통신을 하는 기기가 같은 clock을 공유하지 않는다는 의미로, 통신하는 두 기기가 동일한 속도를 맞춰야 한다. 편리한 점은 속도만 맞추면 어떤 기기와도 통신이 가능하다는 점
|
동기
같은 clock을 사용하여 통신을 한다는 의미로, 개발 단계에서 연결이 되어야 한다.
|
동기
|
Number of masters
|
Master가 없다. 각자 주고(Tx), 받는(Rx)
다.
|
Master 는 하나이며 변하지 않는다.
|
Master가 하나 이상이 될 수 있다.
|
Clock
|
공유하는
Clock이 없다. 각 기기는 각자의 Clock을 사용하며 통신 시에는 동일한 데이터 전송 속도를 설정하여 송수신 해야 한다.
|
Master와 Slave들은 동일한 Clock을 사용한다.
|
Master들과 Slave들은 동일한 클럭을 사용한다.
|
Hardware Complexity
|
가장 복잡하지 않다.
|
복잡하지 않다.
|
복잡하다.
|
Protocol
|
Data는 8bit로 보내며 앞에 Start
bit와 뒤에 Stop bit를 붙인다.
|
통일된 Protocol이 있지 않다. 그래서 해당 기기의 datasheet를 참조해야 한다. 예를 들어 microcontroller와 EEPROM의 통신을 한다면 EEPROM 의 datasheet를 봐야 한다.
|
Start bit와 Stop
bit를 사용하며 데이터는 8bit를 전송한다.
8bit를 보내고 나면 (slave가?) ack를 사용하여 데이터가 잘 받아졌는지를 확인한다. 아래 그림에 표시 되어있다.
|
Software addressing
|
1:1 통신만을 하기 때문에 addressing은 필요 없다.
|
Master에는 slave
개수만큼
slave select 라인이 있기 때문에 해당 line을 통해서 slave를 선택한다.
|
다수의 master와 다수의 slave가 존재하고,
각 master는 모든 slave에 접근할 수 있다.
27개의 slave까지 지원이 되며 master는 고유 주소값을 통해 접근한다.
|
장점
|
하드웨어가 간단해서 거의 모든 장치에서 UART를 지원하기 때문에 (9개의 핀이 연결되거나, USB가 있는 장치라면) 편리하다. RS232 라고도 불린다. RS232는 protocol의 이름이며 UART는 그것을 가능하게 해 주는 송수신기를 의미하기 때문이다.
|
간단한 프로토콜이기 때문에 구현하는데 어렵지 않다. Full duplex(전체 동시 송수신, 전이중) 통신을 지원한다.
나뉘어진 slave
select 라인이 있기 때문에 같은 종류의 칩들이 회로에 사용될 수 있다.
SPI는 push-pull을 사용하기 때문에 높은 데이터 전송률을 가지며 긴 거리도 가능하다.
SPI는 I2C와 비교하면 적은 파워를 사용한다.
|
Open collector(?)
디자인이기 때문에 slew rate(출력 전압의 최대 변화율, 모양이 이상해 지는 것)가 제한적이다.
한 개 이상의
master가 가능하다.
선이 두 개 필요하다.
Addressing 하는 방법이 간단해서 SPI 같이 여러 라인이 필요하지 않다.
Open collector bus concept를 가지고 있어 bus의 voltage
가 유연(다른 voltage level 가능)하다.
|
단점
|
1:1 통신만 지원한다.
동일한 속도를 맞추고 시작해야 한다. 그렇지 않으면 데이터가 깨질 것이다.
Voltage level 이 동일해야 한다. |
Slave가 많아지면 각 slave별 라인이 필요하기 때문에 hardware 구성이 복잡해진다.
만약 slave가 추가 된다면 선을 새로 연결해야 하며 addressing을 위해 software의 디자인이 변경되어야 한다.
Master와 slave가 고정되어 있기 때문에 I2C에서 하는 것처럼 역할 변경을 할 수 없다.
Flow control을 할 수 없다.
Voltage level 이 동일해야 한다. |
Master와 slave가 많아지면 복잡성이 증가한다.
I2C 는 half duplex(반이중) 이다. 이 말은 하나의 선 SDA를 통해서 Data가 양 방향으로 갈 수 있지만 한번에는 하나의 데이터만 간다는 뜻이다. UART는 항상 한 방향으로만 가는데 반해 반 이중은 동시는 아니지만 양 방향이 가능하다.
|
참조
|
I2C
- I2C 의 Slave 주소는 해당 Chip의 Datasheet에 Idx의 구성에 따라 여러가지로 될 수 있다는 것이 명시되어 있다. 여러 Chip이 같은 Bus를 통해서 연결될 수 있기 때문이다. 그래서 실제 IDx 의 회로 구성을 확인하여 주소값을 확인해야 한다.
- Slave I2C의 속도는 해당 Chip의 Register Setting 에 의해 변경될 수 있다. Clock 과 Data의 최대 속도를 확인하고 그 이상으로 셋팅하지 않아야 한다.
- I2C 에서 1Byte 단위로 데이터를 송신하기 때문에 9번째 bit를 보면 ACK 여부를 확인할 수 있다. Start와 Stop 신호를 제외하면 모두 이 1byte(8bit) 단위로 송신이 되며 보통 Slave Address(1byte), Register Address(1~2 Byte), Value(1Byte) 로 한 셋트를 송신하지만 인접한 Address 의 경우에는 연속으로 쓸 수 있다. 이를 Burst Write 혹은 Sequential Write 라고 부른다.
- I2C 를 여러 Chip 끼리 연결하려고 하면(같은 Bus) 신호의 Level 을 맞춰 주어야 한다. 보통 1.8V, 3.3V, 5V 등 이 있으며 이를 맞춰주기 위해서는 Level Shifter 가 회로에 구성되어 있어야 하면 그렇지 않으면 통신이 정상적으로 이루어 지지 않는다.
- I2C 를 이해할 때는 몇 V 로 동작하는지, Start Condition은 SDA 가 default 1인 상태에서 0으로 갈 때 신호가 시작되고, SDA, SCL 모두 default 1인 상태에서 0으로 갈 때가 동작을 진행한 상태이므로 우선순위가 높다 그래서 ACK 신호가 low(SCL high, SDA low) 인 것이다. Start 와 Stop(SDA가 0으로 먼저 떨어지고 SCL high 가 된 상태) 를 제외하면 총 9bit를 사용하는데 8bit 가 하나의 1byte 이므로 이를 보내기 위해서 사용되며 나머지 1bit 가 반대쪽의(write 시 slave 에서 잘 받았다고 보내는 신호) ACK 이다. Mater에서 read 시에는 데이터를 slave 쪽에서 보내는 데 이 때 데이터를 전부 보내고 나면 NACK 를 보내 더이상 보낼 데이터가 없다는 것을 알려준다.
I2C ACK(Link)