본문 바로가기
Embedded System/통신

[통신] USB(Universal Serial Bus : 범용 직렬 버스) 기초

by MachineJW 2023. 8. 7.

USB 개요

- USB는 Universal Serial Bus의 줄임말

- USB는 모든 기기(디바이스) 간의 가장 호환성이 높은 통신 인터페이스이다.

- MCU(마이컴) 통신을 위한 통신에는 I2C/UART/SPI가 있었지만, USB는 MCU통신 보다는 디바이스간의 통신에 초첨이 맞춰져 있다. (보통은 PC와의 통신)

- USB 2.0에서 PC와 주변기기를 시초로 USB 3.0이 되면서 전송속도가 매우 좋아져 대용량 저장장치에도 쓰인다.

USB 특징

- 쉬운장착 : 일반적인 PC에는 USB 포트가 있음

- 편리한 케이블 : USB 커넥터는 RS232 등의 다른 인터페이스보다 작고 단순하다.

  (케이블 길이는 최대 5M, 리피터 사용시 최대 30M)

- 무선옵션 : 원래 유선 인터페이스 였지만 현재는 USB 디바이스와 무선 통신도 가능 (USB OTG)

- 핫 플러그 : 디바이스 전원이 켜있든 아니든 사용자가 원하는 아무 때나 연결하고 끊어도 하드웨어 손상이 없음

- 전원공급장치가 따로 필요 없음 (항상 그런것은 아님) : USB 2.0은 최대 500mA, USB 3.0은 최대 900mA의 전류를 별도 전원 공급 장치 없이 버스에서 직접 공급 받을 수 있음 (배터리로 동작하는 호스트나 허브상의 포트는 USB2.0은 100mA/ USB3.0은 150mA로 제한한다.)

- 인터페이스를 제어하는 복잡한 기능을 호스트 컴퓨터가 지원하므로 USB 디바이스 쪽은 가격이 저렴한 편

- 낮은 전력을 소모 (저전력 회로와 프로토콜을 이용해 사용하지 않는 USB 디바이스를 자동으로 저전력 상태로 만드는 기능을 갖춤, 특히 배터리를 사용하는 디바이스일 경우 더 유리함)

USB 속도

- 슈퍼스피드(Super-Speed) : 5Gbps / 버스 속도 : 400MB/s

   *호스트에 USB 3.0 호스트 컨트롤러가 있어야 슈퍼스피드를 사용할 수 있음

   *버스 속도 : 버스를 통해 정보를 나르는 속도

- 하이스피드(High-Speed) : 480Mbps / 버스 속도: 53MB/s

- 풀스피드 (Full-Speed) : 12Mbps / 버스 속도:  1.2 MB/s

- 로우스피드(Low-Speed) : 1.5Mbps / 버스 속도 : 800B/s

USB 신뢰성

- USB는 하드웨어와 프로토콜 모두 높은 신뢰성을 보장하도록 설계됨

- 드라이버, 수신부, 케이블 스펙은 전기적으로 안전한 인터페이스를 보장

- 수신한 데이터의 에러를 감지하면 송신 측에 알려 재전송 (에러감지, 알림, 재전송은 하드웨어가 수행)

디바이스 개발자 측면에서의 이점

USB 토폴로지는 스타형과 버스형, 버스상의 연결 형태는 스타 토폴로지이다.

- USB는 다양한 타입의 주변기기에 사용할 수 있다.

- USB에는 프린터, 키보드, 디스크 드라이브 등 일반적인 주변기기와 통신 할 때 쓰는 디바이스 요구사항 및 클래스가  정의되어 있다. 이런 클래스를 사용하면 개발자가 처음부터 모든 것을 설계할 필요가 없음

- 다양한 운영체제에서 지원 (리눅스, 윈도, 맥) -> 드라이버 제공

- 디바이스는 USB 통신을 관리하는 컨트롤러 칩을 반드시 갖춰야함.

- 인터페이스를 제어하는 복잡한 기능을 호스트 컴퓨터가 지원하므로 USB 디바이스 쪽은 가격이 저렴한 편

- USB 개발자 포럼이 있음...

USB 주요 용어

- 펑션 : 인터페이스와 관련한 한 개 이상의 기능 집합 (예를 들어 마우스, 스피커, 데이터 수집 장치, 허브 등)

- 디바이스 : 펑션을 한 개 이상 수행하는 논리적 요소 또는 물리적 요소, 허브와 주변기기는 디바이스

   호스트는 버스 상에서 각 디바이스에 고유한 주소를 부여함.

-  포트 : 부가 회로를 접속 할 수 있게 주소로 지정한 위치를 말함. 즉 커넥터의 시작과 끝

USB 호스트

- PC가 USB 디바이스와 통신하려면 USB 호스트 기능을 할 수 있게  하드웨어와 소프트웨어를 지원해야함

- USB 호스트 컨트롤러와 USB 포트를 한 개 이상 같는 루트 허브로 이루어 진다.

- 소프트웨어는일반적으로 디바이스 드라이버를 뜻함

- 디바이스 감지 : 호스트는 열거라고 불리는 과정을 통해 사용할 버스 속도를 결정하고 , 각 디바이스 주소를 할당하며, 추가 정보를 요청함

- 전원이 켜진 후 에도 디바이스 제거나 장착을 감지하여 새로 장착한 디바이스는 열거를 수행하고 분리된 디바이스는 목록에서 삭제

- 버스상의 데이터 흐름을 관리, 디바이스 여러 대가 동시에 데이터를 전송하려 할 때도 있음, 이때 호스트 컨트롤러는 사용 가능한 시간을 나눠 그중 일부분을 전송하고자 하는 디바이스에 나눠준다.

- USB 3.0 호스트는 슈퍼스피드 데이터를 동시에 송수신 가능/ USB2.0 스피드로 송신하거나 수신 할 수 있다.

- USB 2.0 버스는 한 번에 한 가지 속도, 단방향으로만 데이터를 보낸다.

- 호스트는 데이터를 전송할 때 에러 확인 비트를 추가한다. 수신한 데이터에 대한 ACK 데이터를 보내지 않으면 호스트가 재전송을 시도함.

USB 디바이스

 

- 호스트가 통신을 개시하면 디바이스는 응답을 해야한다.

- 디바이스 버스에서 해당 디바이스 주소로 오는 통신을 감지

- 디바이스는 수신한 데이터를 버퍼에 저장하고 상태 코드를 반환하거나, 버퍼가 요청한 데이터나 상태 코드를 송신한다. 이 기능은 하드웨어 기능으로 디아비스 컨트롤러 칩이 내장하고 있음

- 전원을 켤 때나 전원이 켜진 시스템에 디바이스를 장착하면 디바이스는 열거 작업을 위해 호스트가 보내는 표준 요청에 응답해야함. 호스트는 열거가 끝난 후에도 언제나 요청을 보낼 수 있다.

- 디바이스는 전원을 자체 전원 공급 장치나 버스에서 공급받는다. 둘 다 갖춘 디바이스도 있음

USB 디바이스 개발

PC용 USB 디바이스 제품 설계는 디바이스를 동작시키는 작업과 디바이스와 통신 할 PC 소프트웨어를 지원하는 작업을 해야한다.

 

- USB 인터페이스를 갖는 디바이스 컨트롤러 칩과 MCU (마이크로프로세서)

- 디바이스에서 USB 통신을 수행할 디바이스 프로그램 코드, 하드웨어 또는 그 조합

- USB 디바이스 펑션(데이터 처리, 입력 읽기, 결과 출력 등)을 수행하는 하드웨어 프로그램 코드