우선 동기화/비동기화란 ?
비동기화 통신 = 클럭 없음
동기화 통신 = 클럭 있음
UART(Universal Asynchronos Receiver/Transmitter) 통신이란 ?
UART는 유선/디지털/전이중/직렬/비동기 통신방식 중 비동기 통신 방식을 사용한다.
최대 8bit가 기본 단위이다. 데이터 속성 구분 정보는 기본 규격에 정의되어 있지 않다.
UART는 비동기 통신이므로 데이터를 원활이 송신/수신하기 위해 동기 신호(Clock)을 대체하는 방법을 사용해야한다.
공유 클럭이 없으므로 데이터를 올바르게 디코딩하기 위해 동일한 Baud Rate(타이밍)를 구성하고 일치시켜야한다.
이해가 어렵다면. 무궁화 꽃이 피었습니다를 생각해볼 수 있다.
술래(데이터를 받는 쪽)와 술래에게 다가가야하는 참가자(데이터를 보내는 쪽)가 있다면
무궁화 꽃이 피었습니다.라는 음절에 맞춰 다가간다.
UART 또한 이와 같은 타이밍을 정해 데이터를 통신할 수 있는 것이다.
예 )
아래는 UART가 비동기 통신에 필요한 선의 종류이다.
통신의 종류
|
신호선
|
설명
|
UART
|
RXD
|
Receiver Data / 데이터 수신
|
TXD
|
Transmit Data / 데이터 송신
|
|
GND
|
Ground / 통신 간 전압 조절
|
비동기식 UART 통신은 매 1byte를 송신할 때 마다. 추가로 stop/start bit를 추가해준다.
명확하게 데이터를 인식할 수 있도록 데이터의 시작과 끝을 표시할 뿐 아니라 클럭이 달라 sync가 어긋나더라도 start bit를 보고 다시 맞춰줄 수 있다. 결과적으로 UART 통신은 아래처럼 1byte를 전송한다.
UART : start bit와 stop bit를 기점으로 데이터를 읽는다.
만약 UART가 안될때 다음의 4가지를 체크해보면 좋다.
1) 전압레벨이 동일한지 ex) 3.3v - 3.3v 또는 5.0v - 5.0v
레벨 컨버터가 있다면 상관 없겠지만
2) TxD, RxD pin 연결 확인
3) GND 연결 확인
4) 타이밍 확인
I2C(Inter-Intergrated Circuit) 통신이란 ?
I2C 통신은 데이터를 주고 받기 위한 선(SDA) 하나와 송수신 타이밍 동기화를 위한 클럭 선(SCL) 하나로 이루어진다. 하나의 마스터(Master)와 하나 이상의 슬레이브(Slave)로 이루어지며, 슬레이브는 최대 127개까지 연결할 수 있다.
** SDA 선과 SCL선이 모두 기본 HIGH 상태여야 한다. (풀업 저항을 이용해 HIGH로 세팅해야함)
한번에 하나의 마스터와 하나의 슬레이브만 통신이 가능하다.
데이터 송수신은 마스터에서 주도하며, 데이터를 전송하거나 읽어오기 전 반드시 슬레이브의 주소를 명시해준 후 통신을 시작해야 하기 때문에 긴 데이터 통신보다는 짧은 데이터 통신에 주로 사용된다.
- I2C 통신은 2개의 선을 이용하는 방식 (SDA, SCL)
- 하나의 마스터에 여러 개의 슬레이브 기기가 연결될 수 있다는 장점
- 클럭 신호를 사용하는 동기식 통신 방식이기 때문에 시간에 자유롭다는 장점
- 슬레이브 선택을 위해 항상 주소 데이터가 붙기 때문에 짧은 데이터만 가능
통신의 종류
|
신호선
|
설명
|
I2C
|
SDA
|
Data 신호
|
SCK
|
Clock 신호
|
동기식 시리얼 통신은 데이터를 보낼 때 데이터가 전달된다고 알려주는 별도의 클럭 라인을 사용하는 방법이다. 클럭 라인을 통신 참여자가 공유함으로써 데이터라인으로 언제 데이터가 들어오는지 알 수 있도록 하는 방법이다.
즉, 클럭 라인으로 들어오는 rising(LOW to HIGH) 또는 falling(HIGH to LOW)신호를 인식해서 즉시 데이터 라인에서 값을 읽는다.
I2C 통신 : rising edge, falling edge에서 신호를 읽는다.
UART 통신처럼 통신에 참여하는 장치들이 통신속도(baud rate)를 공유할 필요도 없고, 클럭을 동일하게 유지해야할 필요도 없다. 그리고 하드웨어도 간단한 shift register로 구현이 가능해 가격이 저렴해진다.
만약 I2C 가 안될때 다음의 3가지를 체크해보면 좋다.
1) 전압레벨이 동일한지 ex) 3.3v - 3.3v 또는 5.0v - 5.0v
레벨 컨버터가 있다면 상관 없겠지만
2) VDD, SDA, SCK, GND 연결 확인
3) 제어할 슬레이브 주소가 맞게 입력됐는지 확인
SPI(Serial Peripheral Interface) 통신이란 ?
SPI는 1:N 통신을 지원하는 동기식 통신 방식이다. 반드시 하나의 마스터와 하나이상의 슬레이브 기기가 존재해야한다. 데이터를 전송하고 수신하는 선이 따로 있기 때문에 전송과 수신이 동시에 이루어질 수 있어서 송수신이 하나의 선으로 이루어지는 I2C통신에 비해 속도가 빠르기 때문에 이더넷 통신같은 속도가 중요한 곳에 자주 쓰인다.
SPI는 HIGH로 바뀔 때 데이터를 읽을지 LOW로 바뀔 때 데이터를 읽을지를 직접 지정가능하다.
또한 클럭신호가 HIGH로 시작하는지 LOW로 시작하는지 역시 결정 가능하다.
물론 슬레이브와 그 방식이 동일해야한다.
마스터와 슬레이브에서 출력하는 선이 각각 정해져있다.
통신의 종류
|
신호선
|
설명
|
SPI
|
MOSI
|
Master Out, Slave In / 마스터에서 데이터를 출력하기 위한 신호선
|
MISO
|
Master In, Slave Out / 슬레이브에서 데이터를 출력하기 위한 신호선
|
|
SCK
|
Clock 신호선
|
|
SS
|
Slave Select / 데이터를 송수신할 슬레이브를 선택하기 위한 신호선
|
여러 개의 슬레이브 기기가 마스터에 연결될 수 있지만, 슬레이브 개수만큼 SS 신호선이 늘어나게 된다.
< SPI 데이터 송수신 방법 >
1) SS 신호 슬레이브를 선택
2) 클럭 신호 생성
3) 클럭 신호에 맞춰 데이터 전송
SPI 통신은 오직 한 장치만 클럭 라인에 신호(CLK, SCK, Clock)를 생성한다.
클럭 신호를 생성하는 장치를 master라고 하고, 나머지 통신에 참가한 장치를 Slave라고 한다.
SPI 통신 : 언제 데이터를 읽을지 지정 가능하다.
SPI는 여러개의 Slave장치가 하나의 마스터에 연결될 수 있다고 했다. 바로 SS(Slave Select)라인이다.
SPI 통신은 SCK, MOSI, MISO를 공유하지만 SS는 독립적이다.
SS 라인은 동작이 없을 때 신호선은 HIGH로 유지하다가 통신이 필요할 때 LOW로 바꿔준다. (Active LOW)
그래서 SS 라인이 센서의 enable/reset 라인과 연결되어 데이터가 필요할 때만 알려주는 방법으로 사용되기도 한다.
'Embedded : : Arm Architecture > : : Peripheral' 카테고리의 다른 글
PCIe 용어와 특징 (0) | 2024.11.12 |
---|---|
PCIe states (0) | 2024.11.12 |
PCIe Interrupt (0) | 2024.11.12 |
DSI / CSI (0) | 2024.11.07 |
MCU : DIE, PAD, Drive Strength, Pad Level, Hysteresis (0) | 2024.05.04 |