직렬 통신 프로토콜을 시작하기 전에 용어를 세 부분으로 나누겠습니다. 통신 잘 둘 개 이상의 매체 간의 정보 교환을 수반 용어로 알려져있다. 임베디드 시스템에서 통신은 비트 형태로 두 마이크로 컨트롤러 간의 데이터 교환을 의미합니다. 마이크로 컨트롤러에서 이러한 데이터 비트 교환은 통신 프로토콜 로 알려진 정의 된 규칙 집합에 의해 수행됩니다. 이제 데이터가 직렬로 즉 차례로 전송되는 경우 통신 프로토콜은 직렬 통신 프로토콜로 알려져 있습니다. 보다 구체적으로, 데이터 비트는 직렬 통신에서 데이터 버스 또는 통신 채널을 통해 순차적으로 한 번에 하나씩 전송됩니다.
통신 프로토콜의 유형
직렬 통신 및 병렬 통신과 같이 디지털 전자 장치에서 사용할 수있는 다양한 유형의 데이터 전송이 있습니다. 마찬가지로 프로토콜은 직렬 통신 프로토콜 및 병렬 통신 프로토콜과 같은 두 가지 유형으로 나뉩니다. 병렬 통신 프로토콜의 예는 ISA, ATA, SCSI, PCI 및 IEEE-488입니다. 마찬가지로 CAN, ETHERNET, I2C, SPI, RS232, USB, 1-Wire 및 SATA 등과 같은 직렬 통신 프로토콜의 몇 가지 예가 있습니다.
이 기사에서는 다양한 유형의 직렬 통신 프로토콜에 대해 설명합니다. 직렬 통신은 데이터 처리 주변 장치간에 정보를 전송하는 데 가장 널리 사용되는 접근 방식입니다. 개인용 컴퓨터 (PC)이든 모바일이든 모든 전자 장치는 직렬 통신으로 실행됩니다. 프로토콜은 병렬 통신과 유사한 소스 호스트 (송신자) 및 대상 호스트 (수신자)가 주소를 지정하는 일련의 규칙을 갖는 안전하고 안정적인 통신 형식입니다.
직렬 통신의 전송 모드
위에서 이미 언급했듯이 직렬 통신에서 데이터는 비트 즉 이진 펄스의 형태로 전송되며 이진 1은 논리 HIGH를 나타내고 0은 논리 LOW를 나타냅니다. 전송 모드 및 데이터 전송 유형에 따라 여러 유형의 직렬 통신이 있습니다. 전송 모드는 단방향, 반이중 및 전이중으로 분류됩니다.
단순한 방법:
단순 방법에서는 매체 즉, 송신자 또는 수신자 중 하나가 한 번에 활성화 될 수 있습니다. 따라서 발신자가 데이터를 전송하는 경우 수신자는 수신 만 가능하며 그 반대의 경우도 마찬가지입니다. 따라서 단순 방법은 단방향 통신 기술입니다. 심플 렉스 방법의 잘 알려진 예는 텔레비전과 라디오입니다.
반이중 방법:
반이중 방식에서는 송신자와 수신자가 모두 활성화 될 수 있지만 동시에 활성화 될 수는 없습니다. 따라서 발신자가 전송하는 경우 수신자는 수신 할 수 있지만 전송할 수 없으며 그 반대도 마찬가지입니다. 반이중 방식의 잘 알려진 예는 사용자가 데이터에 대한 요청을 보내고 서버에서 데이터를 가져 오는 인터넷입니다.
전이중 방법:
전이중 방식에서는 수신기와 송신기가 동시에 데이터를 전송할 수 있습니다. 잘 알려진 예는 휴대폰입니다.
이 외에도 적절한 데이터 전송을 위해 시계가 중요한 역할을하며 주요 소스 중 하나입니다. 시계의 오작동으로 인해 데이터가 손실되는 경우에도 예기치 않은 데이터 전송이 발생합니다. 따라서 직렬 통신을 사용할 때 시계 동기화가 매우 중요합니다.
클록 동기화
시계는 직렬 장치에 따라 다르며 두 가지 유형 즉, 분류됩니다. 동기 직렬 인터페이스 및 비동기 직렬 인터페이스.
동기 직렬 인터페이스:
마스터에서 슬레이브로의 지점 간 연결입니다. 이러한 유형의 인터페이스에서 모든 장치는 단일 CPU 버스를 사용하여 데이터와 클럭을 공유합니다. 클럭과 데이터를 공유하기 위해 동일한 버스로 데이터 전송이 빨라집니다. 또한이 인터페이스에서는 전송 속도에 불일치가 없습니다. 송신기 측에서는 데이터에 시작, 중지 및 패리티 비트가 추가되지 않으므로 클록을 별도의 신호로 제공하는 직렬 라인으로 데이터가 이동합니다. 수신기 측에서는 송신기에서 제공하는 클럭을 사용하여 데이터를 추출하고 직렬 데이터를 다시 병렬 형식으로 변환합니다. 잘 알려진 예는 I2C와 SPI입니다.
비동기 직렬 인터페이스:
비동기 직렬 인터페이스에서는 외부 클럭 신호가 없습니다. 비동기 직렬 인터페이스는 대부분 장거리 애플리케이션에서 볼 수 있으며 안정적인 통신에 적합합니다. 비동기 직렬 인터페이스에서 외부 클록 소스가 없기 때문에 데이터 흐름 제어, 오류 제어, 전송 속도 제어, 전송 제어 및 수신 제어와 같은 여러 매개 변수에 의존합니다. 온 송신기 측 자체 클럭을 사용하여 직렬 라인 상에 병렬로 데이터의 이동이있다. 또한 시작, 중지 및 패리티 검사 비트를 추가합니다. 수신기 측에서 수신기는 자체 클럭을 사용하여 데이터를 추출하고 시작, 중지 및 패리티 비트를 제거한 후 직렬 데이터를 다시 병렬 형식으로 변환합니다. 잘 알려진 예는 RS-232, RS-422 및 RS-485입니다.
직렬 통신과 관련된 기타 용어
클럭 동기화 외에도 전송 속도, 데이터 비트 선택 (프레임), 동기화 및 오류 검사와 같이 데이터를 직렬로 전송할 때 기억해야 할 사항이 있습니다. 이러한 용어에 대해 간략하게 설명하겠습니다.
전송 속도: 전송 속도는 데이터가 초당 비트 (bps) 형태로 송신기와 수신기간에 전송되는 속도입니다. 가장 일반적으로 사용되는 전송 속도는 9600입니다. 그러나 1200, 2400, 4800, 57600, 115200과 같은 다른 전송 속도 선택이 있습니다. 전송 속도가 클수록 데이터가 한 번에 전송됩니다. 또한 데이터 통신의 경우 전송 속도는 송신기와 수신기 모두 동일해야합니다.
프레이밍: 프레이밍은 송신기에서 수신기로 전송되는 데이터 비트 수를 나타냅니다. 데이터 비트 수는 응용 프로그램에 따라 다릅니다. 대부분의 응용 프로그램은 8 비트를 표준 데이터 비트로 사용하지만 5, 6 또는 7 비트로 선택할 수도 있습니다.
동기화: 동기화 비트는 데이터 청크를 선택하는 데 중요합니다. 데이터 비트의 시작과 끝을 알려줍니다. 송신기는 데이터 프레임에 시작 및 중지 비트를 설정하고 수신기는 그에 따라이를 식별하고 추가 처리를 수행합니다.
오류 제어: 직렬 통신에서 노이즈를 추가하고 영향을 미치는 요인이 많기 때문에 직렬 통신 중에 오류 제어가 중요한 역할을합니다. 이 오류를 제거하기 위해 패리티가 짝수 및 홀수 패리티를 확인하는 패리티 비트가 사용됩니다. 따라서 데이터 프레임에 1이 짝수 인 경우 짝수 패리티라고하며 레지스터의 패리티 비트는 1로 설정됩니다. 마찬가지로 데이터 프레임에 1이 홀수 인 경우 홀수 패리티라고하며 레지스터의 홀수 패리티 비트.
프로토콜은 시스템이 데이터를 이해하는 데 사용하는 공통 언어와 같습니다. 위에서 설명한 것처럼 직렬 통신 프로토콜은 동기식과 비동기식으로 구분됩니다. 이제 둘 다 자세히 설명합니다.
동기식 직렬 프로토콜
같은 SPI, I2C, CAN 및 LIN과 같은 직렬 프로토콜의 동기 유형 은 내장 주변 장치를위한 최고의 자원 중 하나이기 때문에 다른 프로젝트에 사용됩니다. 또한 이들은 주요 응용 프로그램에서 널리 사용되는 프로토콜입니다.
SPI 프로토콜
SPI (Serial Peripheral Interface)는 여러 SPI 마이크로 컨트롤러를 상호 연결할 수있는 동기식 인터페이스입니다. SPI에서는 데이터 및 클록 라인에 별도의 와이어가 필요합니다. 또한 클럭은 데이터 스트림에 포함되지 않으며 별도의 신호로 제공되어야합니다. SPI는 마스터 또는 슬레이브로 구성 될 수 있습니다. 네 가지 기본 SPI 신호 (MISO, MOSI, SCK 및 SS), Vcc 및 Ground는 데이터 통신의 일부입니다. 따라서 슬레이브 또는 마스터에서 데이터를 송수신하려면 6 개의 와이어가 필요합니다. 이론적으로 SPI는 무제한의 슬레이브를 가질 수 있습니다. 데이터 통신은 SPI 레지스터에서 구성됩니다. SPI는 최대 10Mbps의 속도를 제공 할 수 있으며 고속 데이터 통신에 이상적입니다.
대부분의 마이크로 컨트롤러는 SPI를 기본적으로 지원하며 SPI 지원 장치에 직접 연결할 수 있습니다.
- PIC 마이크로 컨트롤러 PIC16F877A와 SPI 통신
- STM32 마이크로 컨트롤러에서 SPI 통신을 사용하는 방법
- Arduino에서 SPI를 사용하는 방법: 두 Arduino 보드 간의 통신
I2C 직렬 통신
두 라인이 SDA (직렬 데이터 라인) 및 SCL (직렬 클록 라인) 인 서로 다른 IC 또는 모듈 간의 I2C (Inter IC) 2 라인 통신. 두 라인 모두 풀업 저항을 사용하여 양극 전원에 연결해야합니다. I2C는 최대 400Kbps의 속도를 제공 할 수 있으며 10 비트 또는 7 비트 주소 지정 시스템을 사용하여 i2c 버스의 특정 장치를 대상으로하므로 최대 1024 개의 장치를 연결할 수 있습니다. 통신 길이가 제한되어 있으며 온보드 통신에 이상적입니다. I2C 네트워크는 두 개의 와이어 만 사용하고 새 장치를 두 개의 공통 I2C 버스 라인에 간단히 연결할 수 있기 때문에 설정이 쉽습니다. SPI와 마찬가지로 마이크로 컨트롤러에는 일반적으로 I2C 장치를 연결하는 I2C 핀이 있습니다.
- STM32 마이크로 컨트롤러에서 I2C 통신을 사용하는 방법
- PIC 마이크로 컨트롤러 PIC16F877과의 I2C 통신
- Arduino에서 I2C를 사용하는 방법: 두 Arduino 보드 간의 통신
USB
USB (Universal Serial Bus)는 버전과 속도가 다른 널리 사용되는 프로토콜입니다. 하나의 USB 호스트 컨트롤러에 최대 127 개의 주변 장치를 연결할 수 있습니다. USB는 "플러그 앤 플레이"장치 역할을합니다. USB는 키보드, 프린터, 미디어 장치, 카메라, 스캐너 및 마우스와 같은 거의 모든 장치에 사용됩니다. 손쉬운 설치, 더 빠른 데이터 정격, 적은 케이블 링 및 핫 스와핑을 위해 설계되었습니다. 더 크고 느린 직렬 및 병렬 포트를 대체했습니다. USB는 차동 신호를 사용하여 간섭을 줄이고 장거리 고속 전송을 허용합니다.
차동 버스는 두 개의 와이어로 구성되며, 하나는 전송 된 데이터를 나타내고 다른 하나는 그 보완을 나타냅니다. 아이디어는 전선의 '평균'전압이 정보를 전달하지 않아 간섭이 적다는 것입니다. USB에서 장치는 호스트에게 묻지 않고 일정량의 전력을 끌어 올 수 있습니다. USB는 데이터 전송을 위해 두 개의 와이어 만 사용하며 직렬 및 병렬 인터페이스보다 빠릅니다. USB 버전은 1.5Mbps (USB v1.0), 480Mbps (USB2.0), 5Gbps (USB v3.0)와 같은 다양한 속도를 지원합니다. 개별 USB 케이블의 길이는 허브없이 최대 5m, 허브없이 최대 40m까지 가능합니다.
할 수있다
CAN (Controller Area Network)은 ECU (엔진 제어 장치)와 센서 간의 통신을 허용하기 위해 자동차에서 사용됩니다. CAN 프로토콜은 강력하고 저렴하며 메시지 기반이며 자동차, 트럭, 트랙터, 산업용 로봇과 같은 많은 응용 분야를 다룹니다. CAN 버스 시스템은 모든 ECU에서 중앙 오류 진단 및 구성을 허용합니다. CAN 메시지는 ID를 통해 우선 순위가 지정되므로 우선 순위가 가장 높은 ID가 중단되지 않습니다. 각 ECU에는 전송 된 모든 메시지를 수신하고 관련성을 결정하고 그에 따라 작동하는 칩이 포함되어있어 추가 노드 (예: CAN 버스 데이터 로거)를 쉽게 수정하고 포함 할 수 있습니다. 애플리케이션에는 차량의 시작 / 정지, 충돌 방지 시스템이 포함됩니다. CAN 버스 시스템은 최대 1Mbps의 속도를 제공 할 수 있습니다.
마이크로 와이어
MICROWIRE는 기본적으로 SPI 인터페이스의 하위 집합 인 3Mbps 직렬 3 선 인터페이스입니다. Microwire는 마이크로 컨트롤러의 직렬 I / O 포트이므로 Microwire 버스는 EEPROM 및 기타 주변 장치 칩에서도 찾을 수 있습니다. 3 개의 라인은 SI (Serial Input), SO (SerialOutput) 및 SK (Serial Clock)입니다. 마이크로 컨트롤러에 대한 직렬 입력 (SI) 라인, SO는 직렬 출력 라인, SK는 직렬 클록 라인입니다. 데이터는 SK의 하강 에지에서 이동되고 상승 에지에서 값이 지정됩니다. SI는 SK의 상승 에지에서 이동합니다. MICROWIRE에 대한 추가 버스 향상을 MICROWIRE / Plus라고합니다. 두 버스의 주요 차이점은 마이크로 컨트롤러 내의 MICROWIRE / Plus 아키텍처가 더 복잡하다는 것입니다. 최대 3Mbps의 속도를 지원합니다.
비동기 직렬 프로토콜
비동기식 직렬 프로토콜은 장거리 신뢰할 수있는 데이터 전송에있어 매우 중요합니다. 비동기 통신에는 두 장치에 공통적 인 타이밍 클록 이 필요하지 않습니다. 각 장치는 합의 된 속도로 데이터 비트를 나타내는 디지털 펄스를 독립적으로 수신하고 보냅니다. 비동기 직렬 통신은 TTL (트랜지스터-트랜지스터 로직) 직렬이라고도합니다. 여기서 고전압 레벨은 로직 1이고 저전압은 로직 0에 해당합니다. 오늘날 시장에 나와있는 거의 모든 마이크로 컨트롤러에는 하나 이상의 범용 비동기 수신기가 있습니다. 직렬 통신용 송신기 (UART). 예는 RS232, RS422, RS485 등입니다.
RS232
RS232 (Recommended Standard 232)는 모니터, CNC 등과 같은 다양한 주변 장치를 연결하는 데 사용되는 매우 일반적인 프로토콜입니다. RS232는 수 커넥터와 암 커넥터로 제공됩니다. RS232는 최대 하나의 장치가 연결된 지점 간 토폴로지이며 9600bps에서 최대 15 미터의 거리를 커버합니다. RS-232 인터페이스에 대한 정보는 논리 0과 1에 의해 디지털 방식으로 전송됩니다. 논리 "1"(MARK)은 -3에서 -15V 범위의 전압에 해당합니다. 논리 "0"(SPACE)은 +3 ~ + 15V 범위의 전압. TxD, RxD, RTS, CTS, DTR, DSR, DCD, GND와 같은 9 개의 핀아웃이있는 DB9 커넥터로 제공됩니다.
RS422
RS422는 RS232와 유사하여 별도의 라인에서 메시지를 동시에 보내고받을 수 있지만이를 위해 차동 신호를 사용합니다. RS-422 네트워크에는 하나의 송신 장치와 최대 10 개의 수신 장치 만있을 수 있습니다. RS-422의 데이터 전송 속도는 거리에 따라 다르며 10kbps (1200m)에서 10Mbps (10m)까지 다양합니다. RS-422 라인은 데이터 전송 용 4 선 (전송 용 꼬인 전선 2 개, 수 신용 꼬임 전선 2 개)과 공통 GND 접지선 1 개입니다. 데이터 라인의 전압 범위는 -6V ~ + 6V입니다. A와 B의 논리적 차이는 + 0.2V보다 큽니다. 논리적 1은 A와 B의 차이가 -0.2V 미만에 해당합니다. RS-422 표준은 특정 유형의 커넥터를 정의하지 않으며 일반적으로 터미널 블록 또는 DB9 커넥터 일 수 있습니다.
RS485
RS485는 멀티 포인트 토폴로지를 사용하기 때문에 업계에서 가장 많이 사용되며 업계에서 선호하는 프로토콜입니다. RS422는 차동 구성에서 32 개의 라인 드라이버와 32 개의 수신기를 연결할 수 있지만 추가 리피터와 최대 256 개의 장치의 신호 증폭기를 사용합니다. RS-485는 특정 유형의 커넥터를 정의하지 않지만 종종 터미널 블록 또는 DB9 커넥터입니다. 작동 속도는 또한 라인 길이에 따라 달라지며 10 미터에서 10Mbit / s에 도달 할 수 있습니다. 라인의 전압 범위는 -7V ~ + 12V입니다. RS-485에는 2 개의 접점이있는 반이중 모드 RS-485와 4 개의 접점이있는 전이중 모드 RS-485와 같은 두 가지 유형의 RS-485가 있습니다. 다른 마이크로 컨트롤러와 함께 RS485를 사용하는 방법에 대해 자세히 알아 보려면 다음 링크를 확인하십시오.
- Arduino UNO를 슬레이브로 사용하는 RS-485 MODBUS 직렬 통신
- Raspberry Pi와 Arduino Uno 간의 RS-485 직렬 통신
- Arduino Uno와 Arduino Nano 간의 RS485 직렬 통신
- RS-485를 사용한 STM32F103C8과 Arduino UNO 간의 직렬 통신
결론
직렬 통신은 전자 및 임베디드 시스템에서 널리 사용되는 통신 인터페이스 시스템 중 하나입니다. 데이터 속도는 애플리케이션마다 다를 수 있습니다. 직렬 통신 프로토콜은 이러한 종류의 응용 프로그램을 처리 할 때 결정적인 역할을 할 수 있습니다. 따라서 올바른 직렬 프로토콜을 선택하는 것이 매우 중요합니다.