본문 바로가기
# Programming/- FPGA 관련 지식

H/W 통신 프로토콜의 모든 것 Part.1 - UART, SPI, I2C

by Graffitio 2023. 12. 7.
H/W 통신 프로토콜의 모든 것 Part.1 - UART, SPI, I2C
728x90
반응형
[Serial 통신]

 

📌 마이크로 프로세서의 데이터 교환 방법

 

하드웨어 통신 프로토콜은 "시리얼 통신 프로토콜" 또는 "하드웨어 인터페이스 프로토콜" 이라고도 한다.

이러한 프로토콜은 하드웨어 장치 간의 데이터 교환을 위해 사용되며, 특정한 하드웨어 인터페이스를 통해 데이터를 송수신한다.

실제로 통신 방식은 직렬 방식(Serial)과 병렬 방식(Parallel)이 있다.

 

 

좌 : 직렬통신 / 우 : 병렬통신

    1. 직렬 통신(Serial Communication)

        : 데이터 비트를 1개의 비트 단위로 외부에 송신하는 방식

          구현하기 쉽고 장거리 전송이 가능하며, 기존의 통신 선로(전화선 등)을

          쉽게 활용할 수 있어 비용 절감이 크다는 장점이 있다.

          ex) 1011 0100 (8bit) 전송

                Line 하나로 한 bit씩 8번 보내서 총 8bit 전송

                (2bit, 4bit씩 묶어서 보낼 수도 있다. 설정하기 나름)

 

    2. 병렬 통신(Parallel Communication)

          : 컴퓨터 내의 장치와 정보교환을 할 때, 통상적으로 고속의 통신 속도를 필요로 하며,

            한꺼번에 많은 정보를 처리할 수 있어 일반적으로 쓰인다.

            대량의 정보를 빠른 시간에 한꺼번에 처리함으로써

            컴퓨터의 성능을 향상시킬 수 있지만,

            통신거리의 제한성, 구현상의 기술적 어려움, 고비용 문제 등의 한계가 있다.

 


 

📌 Serial Communication의 구분

 

1. 비동기 방식(async)

: 비동기 방식은 데이터만 전송하기 떄문에 속도는 빠르지만,

  데이터가 어디서 시작되고 어디서 끝나는 지 구분할 수 없기 때문에

  Start bit, Stop bit로 시작점과 종료점을 설정해주어야 한다.

  대표적으로 UART 통신(범용 비동기화 송수신, 전이중)이 있다.

  cf) 전이중과 반이중

       - 전이중 : 동시에 양방향 통신이 가능한 모드(전화기)

       - 반이중 : 양방향은 가능하지만, 동시에는 충돌때문에 불가능(무전기)

 

2. 동기 방식(sync)

: 데이터 동기화를 위해 별도의 클록 신호를 전송한다.

  데이터를 구분할 필요가 없어, 클록의 유무만을 체크하면 되므로 데이터 송수신 효율이 높다.

  그러나 클록 핀을 추가로 요구하기 때무에 구조적인 어려움과 고비용 문제가 있다.

  대표적으로 USART 통신(범용 동기/비동기화 송수신, 반이중)이 있다.

 


 

📌 Serial Communication의 기본

 

1. Baud Rate(보오레이트)와 BPS(bit/sec)

   - Baud : 원래 변조율이나 1초 간 통신선의 신호 변경 횟수를 가리키는 말

   - Baud rate와 bps는 2개의 시리얼 디바이스를 접속한 경우, 사실상 똑같다.

   - 9,600 bps : 1초 간 9,600회 통신선을 통과한 신호가 변화한다는 의미.

                       즉, 초당 9,600 bit가 날라간다 생각하면 편함(약 0.1ms)

 

2. 비트 단위 데이터 전송

   - 시리얼 통신에서는 1byte를 8개의 bit로 분리해서 1bit씩 전송한다.

   - 수신한 bit는 start bit와 stop bit로 1byte 범위를 식별해 수신한다.

   - Parity bit로 데이터 구조를 확인해, 데이터 누락을 체크할 수도 있다.

 


 

[UART]

 

UART에서 데이터는 프레임 형태로 전송된다.

 

UART는 Universal Asynchronois Receiver/Transmitteer의 약자로,

가장 일반적인 시리얼 통신 프로토콜 중 하나이다.

UART는 비동기적으로 데이터를 전송하고 수신하는데 사용되며,

주로 마이크로 컨트롤러와 컴퓨터, 센서와 마이크로컨트롤러 또는 장치 간에

데이터를 교환하는 데 사용된다.

 


 

📌 UART의 타이밍 동기화

 

UART가 제공하는 가장 큰 장점 중 하나는,

비동기화로 송신기와 수신기가 공통 클럭 신호를 공유하지 않는다는 것이다.

이때문에 프로토콜이 크게 단순화되지만, 양 끝단에서 동일한 비트 타이밍을 보장하지 못하기 떄문에

사전에 정의된 속도로만 통신해야 한다.

가장 일반적으로 사용되는 Baud rate는 4800, 9600, 19.2k, 57.6k, 115.2k

또한 동일한 baud rate를 사용하는 것과 동시에, 양쪽 다 동일한 프레임 구조 및 매개변수를 사용해야 한다.

 


 

📌 UART 통신 Sequence

 

 

① 대기 중일 때는 항상 High 상태를 유지해줘야 한다. (Pull-Up 저항 연결)

     - 이를 활용하여 라인 또는 송신기의 손상을 쉽게 감지할 수 있다.

② Start bit를 보내서 데이터 전송이 시작됐다는 신호를 보낸다.

     - Start bit : High에서 Low로의 전환

③ 데이터 전송 시작

     - LSB부터 전송이 시작된다.

     - 보통 8bit(1byte)를 한 시퀀스에 보낸다

④ Parity bit로 데이터가 잘 전송되고 있는지 체크(안 해줘도 됨.)

     - 데이터에서 1의 갯수가 짝수이면 패리티 비트 = 0

     - 홀수이면 패리티 비트 = 1

⑤ Stop bit를 보내고 데이터 전송 종료

     - Stop bit : High 상태로 전환되거나 일정 시간동안 High를 유지

 


 

[SPI]

 

📌 SPI 통신이란?

 

SPI는 Serial Peripheral Interface의 약자로,

하드웨어(주변 장치) 간 데이터 교환을 위한 동기식 직렬 통신 프로토콜이다.

주로 마이크로컨트롤러, 시프트레지스터, SD카드 등의 소형 주변 장치와 데이터를 송수신하고,

쉽게 말해서 IC(칩)과 IC 간의 데이터를 주고 받는 방식이다.

 


 

📌 SPI 통신의 특징

 

1:N(1 대 다수)의 통신을 지원한다.

ㆍ 한 번에 여러 장치와 데이터를 주고 받을 수는 있지만,

     그만큼 통신선이 많이 필요하다는 단점이 있다.

ㆍ 동시에 여러 장치와 송수신이 가능

I2C에 비해 속도가 빠르다

ㆍ 간단하게 배선 가능

ㆍ RS-232, CAN 버스보다 비교적 짧은 거리에서 동작한다

ㆍ 하나의 마스터 장치와 하나 이상의 슬레이브 기기를 연결해 사용한다.

 


 

📌 SPI 통신 Signal

 

ㆍ SCLK(=SCK)

    : 동기화 신호이며, 클럭 전송을 위한 단자로, 마스터에서 슬레이브로 클럭을 전송

 

ㆍ MOSI

    : Master Output Slave Input, 마스터 출력/슬레이브 입력(M → S 데이터 전송)

     실제로 마스터에서 슬레이브로 전송할 때, MOSI를 통해 데이터를 보낸다.

 

ㆍ MISO

    : Master Input Slave Output, 슬레이브 출력/마스터 입력(S → M 데이터 전송)

     보통 MOSI를 통해 슬레이브에 명령 데이터가 들어오면, 

     MISO를 통해 슬레이브에서 마스터로 응답 데이터가 출력된다.

 

ㆍ CS(=SS)

    : Chip Select, 보통 SS 핀이라고도 하며 Slave Select로 슬레이브를 선택할 때 사용

      마스터 장치에서 슬레이브 장치를 선택하기 위한 단자

 


 

📌 SPI 통신 프로토콜

 

 

마스터에서 어떤 값을 슬레이브로 보낸다고 가정했을 때, 보내는 1 clock의 신호마다 1 bit의 data가 이동된다.


 

MASTER는 SS(혹은 CS)의 신호에 따라 데이터를 전송하고자하는 SLAVE를 선택할 수 있다.

원하는 슬레이브의 SS에 Low(0)을 주고 다른 슬레이브들의 SS에는 High(1)를 주면 된다.

 


 

SPI 장치들은 Shift Register를 가지고 있어, 이를 활용해 데이터를 전송한다.

마스터에 보내려는 데이터가 있고, 슬레이브에는 같은 크기의 '쓰레기값'이 저장되어 있다.

(만약 Slave에서도 데이터를 보내고 싶다면, 같은 크기의 데이터를 저장해주면 된다.)

위에서 설명한 것처럼 1clk 당 1bit의 데이터가 하나씩 전송되고 시프트되고

이렇게 최종 데이터까지 다 보내지면 통신이 완료된다.

아래 그림을 통해 좀 더 쉽게 이해해보자.

 

 


 

📌 SPI의 장단점

 

장점

 

   - 완전한 전이중(Full Duplex) 통신 : 양방향 통신이며, 동시에 송수신이 가능하다.

   - 전송되는 비트에 대한 완전한 프로토콜 유연성 : 최대 16비트까지 마음대로 길이 조정 가능

   - 매우 단순한 하트웨어 인터페이스 처리 : 단순한 센서나 메모리에서 많이 사용

   - IC 패키지에 4개의 핀만 사용함(SCLK, MOSI, MISO, SS)

   - 최대 클럭이 제한되지 않아 속도 제한이 없다.

   - Push-Pull 출력을 사용해 상호간에 같은 전압을 사용하여

     시그널 정합성과 고속을 지원한다.

   - I2C보다 낮은 소비전력

   - 슬레이브는 마스터가 보내주는 클럭만을 사용하고 정확성이 떨어져도 문제 없다.

 

단점

 

   - 하드웨어 슬레이브 인식이 없음

   - 슬레이브에 의한 하드웨어 흐름 제어가 없음

   - 오류 검사 프로토콜이 정의되어 있지 않음(에러 체킹 지원)

   - 노이즈 스파이크에 영향을 받는 경항이 있음.

   - RS-232, CAN 버스보다 비교적 더 짧은 거리에서 동작(Chip 간의 통신에서만 주로 사용)

   - 인밴드(디폴트 SPI wire)를 통해 주소가 지원되지 않아 다수의 슬레이브 사용 시,

     별도의 아웃밴드(Chip 셀렉트 라인)를 통해 슬레이브를 선택해야 한다.

   - Hot 플러그를 지원하지 않는다.

 

 

ㆍ 출처 : 느린 개발 연구소

 


 

[I2C]

 

📌 I2C 통신이란?

 

Inter Integrated Circuit의 약자로,

여러 개의 슬레이브와 통신이 가능하며 여러 개의 마스터끼리의 통신도 가능하다.

SPI와 비슷한 방식으로 진행되지만, 큰 차이점은 슬레이브를 주소로 선택 한다는 것.

데이터를 주고 받는데 필요한 통신선은 2개이다.

  - SDA(Serial Data Line)

  - SCL(Serial Clock Line)

 


 

📌 I2C 통신의 특징

 

  - clk 신호에 따른 동기식 통신 방법

  - 각 슬레이브 장치는 고유의 주소값(7bit)를 가진다.

  - 버스에 연결된 장치들이 고유의 주소값을 가지고 master/slave 관계를 가진다.

  - 세 가지 전송 속도를 지원

표준모드(Standard Mode) 100Kbps
고속 모드(Fast Mode) 400Kbps
초고속 모드(High Speed Mode) 3.4Mbps

 


 

📌 I2C 통신 프로토콜

 

ㆍ 마스터가 통신의 시작 및 통신의 종료를 선언하여 통신이 이루어진다.

     - Start bit : SCL이 High인 상태에서 SDA를 Low로 만들어 시작

     - Stop bit : SCL이 High인 상태에서 SDA를 High로 만들어 종료

ㆍ  마스터가 특정 주소를 가진 슬레이브와 연결하여 송수신을 진행

ㆍ  데이터 전송은 SCL이 Low인 상태에서 SDA를 변환하는 방식으로 진행된다.

ㆍ  주소 및 각 바이트(8bit) 전송 후, 정상적으로 전달됐는지 확인하기 위해 ACK 신호를 보내준다.

ㆍ  마스터가 클록 신호 SCL을 발생시켜 통신

ㆍ  통신을 위하여 기본적으로 SDA와 SCL은 High 상태를 유지하기 위해 PULL-UP 저항을 달아줘야 한다.

ㆍ  마스터가 다른 슬레이브 디바이스와 통신하려면, Repeated Start Condition을 사용하면 된다.

 

 

 마스터에서 슬레이브로 쓰기

    : START → 슬레이브 W 모드 → 마스터에서 데이터 전송 → 슬레이브에서 받고 ACK 신호 출력 → .... → ACK → STOP

 

 마스터가 슬레이브에서 읽기

    : START → 마스터에서 R 모드 → 슬레이브에서 데이터 전송 → 마스터에서 ACK → .... → 마스터에서 NACK → STOP

 

 

 START

    : SCL이 High일 때, SDA가 High에서 Low로 떨어지면 Start bit

 

 STOP

    : SCL이 High일 때, SDA가 Low에서 High로 올라가면 Stop bit

728x90
반응형