USB 포트가 때때로 직렬 포트라고도하며 COM이라고 불리는 이유는 무엇입니까?


13

컴퓨터 포트에 대한 나의 이해는

  1. 직렬 포트는 여기에 표시된 것과 같은 9 핀 플러그 이며 COM 포트라고도합니다.
  2. USB 포트는 직렬 포트와 다른 표준입니다.

그렇다면 왜 종종 "직렬 포트"라는 USB 포트가 표시되고 Arduino IDE에서 USB 포트가 COM 접두사로 식별됩니까? 또한 직렬 포트가없는 경우 가상 COM 포트가 필요한 이유는 무엇입니까? (예 : Prologix GPIB-USB 어댑터)

이 두 가지 다른 것을 설명하기 위해 같은 이름을 사용하는 것은 약간 혼란 스러울 수 있다고 생각합니다.

Arduino IDE, 스크린 샷 메뉴 명령 Tools → Serial Port → COM14의 스크린 샷


2
USB는 직렬 통신입니다.

3
아마도 직렬 포트로 작동 하는 USB 장치가 있습니까? FTDI (FT232) 또는 Prolific (PL2303) USB- 직렬 칩 중 하나 또는 소프트웨어 구현이 동일한 MCU가있는 것입니까? 그것들을 마더 보드 (또는 PCI (e) 카드)에 고정 된 직렬 포트와 동일한 네임 스페이스에 표시하면 소프트웨어에 대한 인터페이스가 더 간단 해집니다. 포트가 실제로 어떻게 구현되는지 알 필요는 없습니다. 직렬 포트처럼 cks.
ilkkachu

4
IBM PC와 많은 이전 제품의 초기에는 "직렬 포트"가 일반적으로 마더 보드에있는 것이 아니라 확장 버스 카드의 인터페이스라는 것을 인식하는 데 도움이 될 수 있습니다. 오늘날이 개념은 여전히 ​​고유 한 직렬 인터페이스 변환기가 있다는 점에서 비교적 사실로 남아 있습니다. 프로세서 로컬 버스의 구형 ISA 커넥터 확장 대신 컴퓨터에 다시 연결하는 "확장 버스"만 USB입니다.
Chris Stratton

14
유니버설 어떤 버스?
홉스

4
@ hobbs, 맞습니다 Universal Serial Bus. 버스. 직렬 포트와는 매우 다른가요? 어리석은 대담한 텍스트가 없어도.

답변:


27

직렬 포트라고하는 USB 포트가 아닙니다. 귀하의 예에서 Arduino에는 USB- 직렬 장치 (두 번째 마이크로 컨트롤러 또는 FTDI 칩 형태)가 있습니다. USB를 사용하여 컴퓨터와 통신하고 USB Wi-Fi 동글 또는 USB LAN 어댑터, USB SATA 어댑터 등과 유사한 외부 세계에 대한 실제 직렬 포트를 형성합니다.

핵심은 많은 경우에 직렬 포트는 장치에서 "하드 와이어"되어 있기 때문에 사용자가 직접 사용할 수 없다는 것입니다 (이 경우 프로그래밍중인 마이크로 컨트롤러에 직접 연결됨).

엄밀히 말하자면, 직렬 통신을 사용하는 모든 포트 (메모리가 나를 지원하는 경우 "범용 직렬 버스"를 나타내는 USB를 포함한 거의 모든 최신 버스)는 "직렬 포트"입니다. 그러나 대부분의 경우 사람들이 "직렬 포트"를 참조 할 때 실제로 RS-232를 준수하는 포트를 나타냅니다.


10
누군가가 "직렬 포트"를 언급 할 때마다 거의 확실하게 DE-9M 커넥터를 통해 연결된 RS-232를 의미합니다. 사람들이 USB를 의미한다면 USB라고 말하는 경향이 있습니다. RS-485 또는 GPIB와 같은 다른 직렬 프로토콜 또는 다양한 종류의 이더넷과 동일합니다.

5
@Felthry : "직렬"은 RS-232가 사용하지만 RS-232가 아닌 표준 논리 전압 레벨에서 사용하는 비동기 직렬 신호 ( "UART"의 "A")를 의미합니다. 9 핀 (또는 RS-232의 경우 원래 25 핀)으로 연결되는 핸드 쉐이킹 핀을 포함하거나 포함하지 않을 수 있습니다.
벤 Voigt

2
진실. 프로토콜의 저전압 변형을 의미하기 위해 'RS-232'를 사용하는 또 다른 용어 남용 계층이라고 가정합니다. DB-25M 커넥터를 언급하는 것도 고려했지만 실제로는 관련이 없습니다.

7
@Felthry, 죄송하지만 "누군가"직렬 포트 "를 언급 할 때마다 DE-9M 커넥터를 통해 연결된 RS-232를 거의 확실하게 의미합니다"는 오래된 PC 중심적 관점입니다. 그리고 PC는 최소 10 년 동안 후면에 9 핀 커넥터로 만들어지지 않았습니다. 사용자의 대중은 절대로 만지지 않았습니다. 모든 곳의 제품, 장비 및 PCB는 다양한 전용 커넥터와 LVTTL 레벨 또는 RS-232C를 통해 직렬 포트를 사용합니다. 또한이 사이트의 엔지니어는 기존 PC 표준보다 훨씬 많은 직렬 포트를 경험하게됩니다. 그보다 훨씬 다양한 세상이 무서워요.

4
@TonyM 아마도 구식 장비가 너무 많았을 것입니다. 그러나 컴퓨터는 여전히 소비자 시장이 아닌 DE9 커넥터를 사용하여 만들어집니다. 90 년대 또는 그 이전의 시스템이 일반적이었을 때의 시스템과 인터페이스해야 할 것이기 때문에 산업 및 연구에서 유비쿼터스입니다. 결국 휴대 전화를 업그레이드하는 것처럼 사람들은 산업용 장비를 업그레이드하지 않습니다! 내가 말했듯이, 그것은 용어의 남용입니다. 아마도 "거의 확실하다"는 표현이 너무 강했지만, 그것은 매우 일반적인 사용법입니다.

18

Windows COM : 포트는 MS-DOS (b. 1980)에 다시 정의 된 명명 시스템에서 나왔기 때문에 혼동됩니다. 이것은 유닉스에서 얻은 몇 가지 아이디어와 함께 CP / M (1974 년)에서 꽤 많이 복사 된 것입니다. 그들은 USB와 같은 중간의 '전송'버스의 추가를 기대하지 않았다.

Windows에서 문자 이름이 지정된 디스크 드라이브, 3 글자 파일 이름 확장자, .EXE 및 .COM 파일 및 명령 프롬프트 명령 인터페이스와 같은 CP / M-> MS-DOS 진화에서 살아남은 사람들이 있습니다.

또 다른 하나는 장치 이름입니다. 일반적으로 항상 콜론으로 끝나는 세 글자입니다. COM : 직렬 '통신 포트', LPT : '라인 프린터'(일반적으로 Centronics 포트에 매달려 있음), NUL : 전송 된 모든 내용을 덤프합니다. CON :은 '콘솔'(키보드 및 화면)입니다. 몇 가지를 구별하기 위해 번호를 매길 수있는 일부. COM : 포트는 LPT : 포트와 마찬가지로 COM1 : 및 LPT1 :이됩니다.

COM : 포트는 '종점'입니다. Windows PC의 관점에서 통신 링크의 맨 끝입니다. 컴퓨팅의 많은 것들과 마찬가지로, 브리지는 무시되며 USB가 아닌 여러분이 생각하고있는 원단입니다. 이것은 PC 키보드 (CPU-PCIe-USB-kbd로 연결) 또는 네트워크 드라이브 (CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA 또는 이와 유사한)로도 마찬가지입니다.

USB는 또한 엔드 포인트 아이디어를 사용합니다. USB 컨트롤러는 호스트 PC를 모든 종류의 하드웨어에 연결하여 리소스로 제공 할 수 있습니다. USB로 연결된 하드웨어를 보면 이러한 엔드 포인트가 나타납니다. USB 장치의 가상 COM : 포트는 단순히 USB 슬레이브 장치에서 엔드 포인트로 나오는 직렬 포트입니다. Windows는 번호 (COM1 :, COM27 : 등)를 제공하며 표준 Windows API for COM : 포트를 사용하는 모든 프로그램에서 직렬 포트를 인식하고 사용할 수 있습니다.

일부 USB 연결 하드웨어는 Windows 소프트웨어를보다 쉽게 ​​개발할 수 있도록 직렬 포트를 가장하는 것을 선호 할 수 있습니다. 장치 드라이버를 작성할 필요가 없으므로 많은 작업이 절약됩니다. USB 장치는 Windows에 직렬 포트라고 알려줍니다. PC의 관점에서 볼 때 이것은 직렬 포트처럼 동작하는 경우에 좋습니다 (바이트는 항상 열려있는 끝없는 직렬 스트림으로 전송 및 수신 됨). 따라서 개발자에게는 이점이 있습니다.


4
콜론으로 끝나는 장치 이름을 본 적이 없습니다. 커맨드 라인에서 예를 들어 type file.txt > lpt1콜론없이 말합니다 . 그리고 기본 Windows 파일 관리자 인 Explorer에서는 COM 또는 LPT1과 같은 파일을 만들 수 없습니다 (적어도 Windows XP에서는 나중에 가능할 수도 있음). 장치 이름 뒤에 콜론을 실제로 볼 수있는 곳은 어디입니까?
Ruslan

2
@Ruslan, Windows에서 옵션으로 선택했다는 것이 맞습니다 .MS-DOS와 달리 둘 다 허용합니다. 그러나 그것들을 본 적이 없다 ... (a) MS-DOS 장치에서 텍스트를 찾는다; (b) CP에서 'mode /?'를 입력하십시오. COMn : 및 LPTn : 포트 매개 변수를 설정하는 데 사용 된 명령 구문을보고 원하는 경우 시도하십시오. (c) 명령 프롬프트에 'copy con : nul :'을 입력하고 작동하는지 확인하십시오 (Ctrl-C를 끝내려면).

1
@Ruslan Colon는 다른 장치와 마찬가지로 장치가 있습니다. 특수 콜론이 아닙니다- copy con:filename.txt nul정확히 동일하게 작동합니다 copy c:filename.txt nul. MS-DOS 6.22 이상인 경우 콜론은 모호성을 나타내지 않으므로 대부분의 경우 생략 할 수 있습니다. 드라이브 이름과 달리 이러한 장치는 이름이 예약되어 있으므로 copy file.txt c(c 드라이브의 현재 디렉토리 또는 현재 디렉토리의 "c"파일로 파일을 복사해야합니까) 문제가 발생하지 않습니다. .
루안

7

Joren Vaes의 답변에 추가하려면 : Arduino IDE와 같은 일부 소프트웨어 앱은 "가상 COM"포트를 생성하는 Windows 드라이버를 설치합니다. 해당 포트가 활성화되면 운영 체제는 표준 직렬 포트 [*]처럼 사용 가능한 COM 포트가 있음을 프로그램에 알려줍니다 (예 : Arduino IDE와 같은 다른 프로그램도). 모든 직렬 포트에 연결하십시오. 그러나 후드 아래에서 해당 비트는 USB 케이블로 전송됩니다. Arduino 보드 내부에서 비슷한 일이 발생합니다.

[*] 여기서 "표준 직렬 포트"는 RS-232 프로토콜을 의미합니다. RS-232 프로토콜은 전통적으로 DB-9 또는 DB-25 커넥터를 통해 전송되었습니다. 우리의 맥락에서 USB가 "직렬"이라는 것은 전혀 중요하지 않습니다.


7

COM 포트와 USB 포트의 차이점에 대한 이해가 정확합니다.

OS에 의해 일부 USB 포트가 "COM"포트로 매핑되는 이유는 다음과 같습니다. USB CDC (Communication Device Class)를 구현하는 USB 장치가 있습니다. 이 장치는 매우 복잡한 USB 인터페이스에서 표준 UART / RS-232 유형 인터페이스로의 브리지를 제공합니다. 사용자의 투명성을 위해 운영 체제는 전송 계층을 모방하는 USB 드라이버를 가상 COM 포트 인 COM 포트로로드합니다. 이 접근법에 대한 몇 가지 역사적 세부 사항과 정당성은 다음과 같습니다.

COM 포트는 DB-9 / DB-15 (일명 RS-232 직렬 또는 UART) 커넥터를 사용하며 이러한 포트의 컨트롤러는 물리적으로 PC 하드웨어, I / O 공간의 특정 주소에 매핑됩니다. 이 COM 컨트롤러는 최신 PC에서 더 이상 사용되지 않으며 멸종되었습니다.

동시에 많은 MCU가 여전히 주변 세계와 통신하기위한 주요 수단으로 RS-232 직렬 통신을 사용합니다. 그 이유는 이러한 종류의 링크를위한 하드웨어 (및 소프트웨어)가 매우 간단하고 구현하기 쉽기 때문입니다. 또한 모든 최신 Android 개발 / 디버그 통신은 COM 포트 스타일로 수행됩니다. 또한 많은 "통신"장치 (4G LTE 이상을 포함한 모뎀)는 여전히 여러 "COM"포트를 통해 ASCII 유형 제어 프로토콜과 함께 UART 스타일 인터페이스를 사용합니다.

이제 호스트 개발 PC에 COM 포트가없는 경우 개발자는 이러한 마이크로 컨트롤러와 통신하는 방법에 대한 딜레마가 있습니까? 해결책은 COM 포트 RS-232 인터페이스와 USB 프로토콜을 연결하는 USB 포트 및 특수 USB 장치를 사용하는 것이 었습니다. FTDI 칩으로 전용 USB 장치가 있으며 다른 많은 장치 (Cypress, Microchip 등)는이 브리지 기능을 수행하는 장치를 만듭니다.

이제 이러한 MCU에 대한 모든 기본 통신은 여전히 ​​RS-232 프로토콜로 표현되며 대부분의 응용 프로그램 예에서는 링크를 사용하기 위해 일부 터미널 응용 프로그램 (TeraTerm, HyperTerminal 등)을 사용한다고 가정합니다. 사용자 편의를 위해 USB-UART 브리지에는 포트를 가상 COM 포트로 나타내는 드라이버가 제공됩니다. 모든 최신 소프트웨어는 COM 하드웨어 가상화를 사용하여 "COM-less"PC로 원활하게 전환합니다. 전용 FTDI 브리지를 MCU 개발 플랫폼의 UART 포트 에 추가하고 (호스트 PC의 FTDI 드라이버를 사용하여 USB 포트를 COM 포트처럼 보이도록) 일반적인 브리지 코드를 MCU 자체에 내장 하는 것이 일반적 입니다. 기본 USB 기능이 있습니다).

직접적인 접근 방식은 외부 USB-UART 보드 를 사용 하여 UART를 개발중인 MCU에 연결하는 것입니다. 또는 보드에 DB-9 커넥터가 이미 있으면 직접 연결할 수있는 USB 동글이 있습니다.

모든 경우에 MCU의 기본 UART 제어는 모든 중간 신호 / 프로토콜 변환을 건너 뛰고 호스트 측에 가상 COM 포트로 나타납니다. 그렇기 때문에 오늘날 사람들은 종종 USB-UART 브리지와 COM 포트의 구분을 건너 뜁니다.


3

매우 혼란 스럽지만 걱정할 필요는 없습니다. 우선, UART 자체는 일반적인 용어이지만 시작 비트, 하나 또는 두 개의 정지 비트, 일반적으로 데이터 비트 7 또는 8, 때로는 짝수 또는 홀수 인 패리티를 갖는 프로토콜을 생성하는 UART를 생각해보십시오. 그것은 거기에서 다를 수 있습니다.

UART는 무엇이든 TTL 수준에 있습니다. 예전에는 5V, 현재는 3.3V, 1.8V 또는 그 이상이었습니다. 아마도 TTL은 잘못된 용어 일 것입니다. 그런 다음 RS-232, RS-422 등을 가지고 있거나 가지고 있습니다. 이는 프로토콜 표준이 아니라 전압 및 PIN 표준입니다. 어떤 종류의 UART를 의미 할 때 용어를 혼합하여 RS-232라고 말하는 것은 올바르지 않습니다.

예전에는 UART가 마더 보드에 있었고 당시에는 이해할 수있는 전압 레벨과 표준 핀아웃 / 케이블과 같은 외부 연결 커넥터를 원했습니다. 따라서 다양한 주변 장치에 널리 사용되는 25 및 9 핀 표준이 종종 발견되었으며 Wintel PC 세계에서는이를 통신 포트 또는 직렬 포트라고했습니다.

물론, 직렬 데이터를 전달하는 포트는 직렬 포트, SPI, I²C, MDIO, UART, HDLC, SDLC 등, 심지어는 USB 및 SCSI라고도합니다. 당신은 이것에 미쳐 갈 수 있습니다. 일반적으로 직렬 포트는 UART에 연결할 수있는 핀을 의미합니다.

유닉스 / 리눅스 세계는 / / tty대신 사용 하지만 같은 것입니다.comserialuart

이제 구현이 있습니다. 인터페이스가있는 UART 칩을 구입할 수 있습니다 (양쪽에 직렬 인 SPI UART 또는 I²C UART 또는 일부 전용 버스 또는 USB 등을 가질 수 있음). 당시에도 UART에는 한쪽에 버스가 있었기 때문에 궁극적으로 CPU가 통신했습니다. 오늘날 우리는 멋진 USB UART 솔루션을 만드는 FTDI 및 기타 공급 업체를 보유하고 있으며 소프트웨어와 UART 간의 일부 인터페이스 계층을 다르게 만들지 않으며 UART의 다른쪽에는 TTL / 칩 레벨 또는 RS-232C 또는 RS-422 등

초기 Arduino는 종종 Arduino에 전원을 공급하는 FTDI USB-UART 보드를 사용했습니다. 일부는 Arduino 보드 자체의 USB 전원 및 직렬 / UART를 가지고 있으며 AVR 칩의 UART에 보드를 통해 연결됩니다 (일부 프로세서는 일부 버스 레이어를 사용하여 소프트웨어가 UART와 통신 할 수 있음) 다른 쪽면의 일부 인터페이스,이 경우 칩 전압 레벨 (TTL)에서 AVR의 가장자리에있는 핀).

UART 기능이 수십 년 동안 변경되지 않았으므로 소프트웨어 용어 또는 소프트웨어 응용 프로그램이 응용 프로그램 수준에서 왜 바뀌어야합니까? 10-15 년 전에 마더 보드의 UART 칩에 대해 Linux / Unix TTY 응용 프로그램을 작성하십시오. USB-TTL 수준 또는 USB-RS-232C 수준 또는 RS-422 또는 기타 핀으로 오늘날에도 여전히 작동 할 가능성이 높습니다. / 레벨 정의. Windows에서도 마찬가지이며, 이전 버전 모두 여전히 작동하는 코드가 있습니다. Windows 세계에서는 COM이라는 용어가 사용됩니다.

나는 잠시 동안 Arduino 샌드 박스를 사용하지 않았으며 Linux에 있었을 것입니다.하지만 Java라는 프로그램이 일반적인 경우 기억 ttyS2하고 Linux 및 COM2 에서 시스템 이름을 사용하는 경우 놀라지 않을 것입니다 창문에.

귀하의 질문을 다시 읽으면 이러한 API 호출을 사용하는 기존의 소프트웨어 양을 활용하여 훨씬 더 나아갈 수 있습니다. 수십 년 동안이 양방향 데이터를 여러분이 생각할 수있는 거의 모든 것으로 전달하는 소프트웨어로 가상 포트를 만들 수없는 이유는 없습니다. UART- 이더넷은 매우 일반적인 것으로, 서버가 여전히 COM / TTY / RS-232 포트를 많이 사용하는 서버 룸에서 여러 서버에 연결할 수있는 여러 인터페이스가있는 터미널 서버를 가질 수 있습니다. 그런 다음 다른 쪽의 이더넷을 누른 다음 텔넷을 사용하지 않으면 가상 COM 포트 드라이버를 설치할 수 있습니다.

그런 다음 컴퓨터의 응용 프로그램이 COM 포트와 통신하고 있다고 생각하지만 실제로 바이트 스트림이 이더넷에 연결되어 터미널 서버를 THEN하여 UART-RS-232C 레벨 (그러나 반드시 핀아웃은 아님) 케이블로 연결합니다. 서버와 같은 방식으로 되돌립니다.

어떤 이유에서든 COM 포트를 가상화하여 API 호출을 위해 작성된 소프트웨어가 여전히 작동 할 수 있도록 실제 UART에 실제로이를 이유가 없습니다. UART 인터페이스에 대한 벙어리 터미널이있는 고대 은행 소프트웨어에 대해 생각할 수도 있습니다. 오늘날 이더넷을 직렬 스트림 (예 : TCP / IP)으로 서버에 다운시키는 가상 COM 포트를 포함하여 다양한 양의 에뮬레이션을 통해 소프트웨어가 여전히 작동하도록 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.