Dlaczego porty USB są czasami nazywane portami szeregowymi i nazywane COM?


13

O ile rozumiem porty komputerowe,

  1. Port szeregowy jest 9-pinową wtyczką, taką jak ta pokazana tutaj, i jest również nazywany portem COM.
  2. Porty USB różnią się standardem od portów szeregowych.

Dlaczego więc często widzę porty USB zwane „portami szeregowymi” i, na przykład w Arduino IDE, porty USB są identyfikowane przez prefiks COM? Dlaczego czasem potrzebny jest wirtualny port COM, jeśli nie ma w nim żadnych portów szeregowych? (Przykład: adapter Prologix GPIB-USB.)

To użycie tej samej nazwy do opisania dwóch różnych rzeczy może być nieco mylące.

Zrzut ekranu z Arduino IDE, polecenie menu Narzędzia → Port szeregowy → COM14 pokazano


2
USB to złącza szeregowe.

3
Być może dlatego, że masz urządzenie USB, które działa jako port szeregowy ? Coś, co ma jeden z tych układów USB-szeregowy FTDI (FT232) lub Prolific (PL2303), a może MCU z implementacją tego samego oprogramowania? Wyświetlanie ich w tej samej przestrzeni nazw co porty szeregowe zamocowane na płycie głównej (lub na kartach PCI (e)) sprawia, że ​​interfejs jest prostszy w stosunku do oprogramowania: nie musi wiedzieć, jak port jest fizycznie zaimplementowany, tylko że szarpie jak port szeregowy.
ilkkachu

4
Może pomóc uświadomić sobie, że we wczesnych latach komputera IBM i wielu jego poprzedników „port szeregowy” zazwyczaj nie był umiejscowiony na płycie głównej, ale był raczej interfejsem karty rozszerzeń. Dziś koncepcja ta pozostaje względnie prawdziwa, ponieważ nadal istnieje wyraźny konwerter interfejsu szeregowego - tylko „szyna rozszerzeń” łącząca ją z komputerem jest teraz USB, zamiast starego złącza ISA lokalnej magistrali procesora.
Chris Stratton

14
Universal jaki autobus?
hobbs

4
@ Hobbs, to prawda Universal Serial Bus. Autobus. Bardzo różni się od portu szeregowego, prawda? Nawet bez głupiego, odważnego tekstu.

Odpowiedzi:


27

Nie są to porty USB nazywane portami szeregowymi. W twoim przykładzie Arduino ma urządzenie USB-szeregowe (w postaci drugiego mikrokontrolera lub układu FTDI). Wykorzysta to port USB do komunikacji z komputerem i utworzenia rzeczywistego portu szeregowego dla świata zewnętrznego - podobnie jak klucze USB Wi-Fi lub adaptery USB LAN, adaptery USB SATA itp.

Kluczem jest to, że w wielu przypadkach port szeregowy nie jest dostępny bezpośrednio dla użytkownika, ponieważ jest „podłączony na stałe” w urządzeniu (w tym przypadku jest podłączony bezpośrednio do programowanego mikrokontrolera).

Ściśle mówiąc, każdy port wykorzystujący komunikację szeregową (prawie każda nowoczesna magistrala - w tym USB, co oznacza „Universal Serial Bus”, jeśli moja pamięć mi służy), jest „portem szeregowym”. Jednak w większości przypadków, gdy ludzie odnoszą się do „portu szeregowego”, faktycznie odnoszą się do portu zgodnego z RS-232.


10
Za każdym razem, gdy ktoś odnosi się do „portu szeregowego”, prawie na pewno oznacza RS-232 podłączony za pomocą złącza DE-9M. Jeśli ludzie mają na myśli USB, zwykle mówią USB. To samo dotyczy innych protokołów szeregowych, takich jak RS-485 lub GPIB lub różnych odmian Ethernet.

5
@ Felthry: „szeregowy” bardzo często oznacza asynchroniczną sygnalizację szeregową („A” w „UART”), której również używa RS-232, ale przy standardowych poziomach napięcia logicznego, a nie RS-232. I może, ale nie musi, zawierać piny uzgadniania, które prowadzą do 9 pinów (lub 25 pinów, co było oryginalnym dla RS-232).
Ben Voigt

2
Prawdziwe. Podejrzewam, że to kolejna warstwa nadużywania terminologii, przy użyciu „RS-232” w znaczeniu niskonapięciowego wariantu protokołu. Rozważałem też wspomnienie o złączu DB-25M, ale tutaj tak naprawdę nie ma to znaczenia.

7
@ Felthry, przepraszam, ale „za każdym razem, gdy ktoś odnosi się do„ portu szeregowego ”, prawie na pewno oznacza to, że RS-232 podłączony za pomocą złącza DE-9M” jest przestarzały. A komputery PC nie były produkowane z 9-pinowymi złączami z tyłu od co najmniej dekady. Masowa populacja ich użytkowników nigdy ich nie dotykała. Produkty, sprzęt i płytki drukowane w każdym miejscu używają portów szeregowych, poprzez różne dedykowane złącza i na poziomie LVTTL lub RS-232C. Inżynierowie na tej stronie będą doświadczać portów szeregowych na wiele sposobów niż w starym standardzie PC. Obawiam się, że znacznie bardziej zróżnicowany świat.

4
@TonyM Być może właśnie miałem za dużo sprzętu ze starej szkoły. Zwrócę jednak uwagę, że komputery są nadal powszechnie produkowane ze złączami DE9 - po prostu nie na rynek konsumencki. Są wszechobecne w przemyśle i badaniach, ponieważ prawdopodobnie będziesz musiał współpracować z systemami, które zostały wyprodukowane w latach 90. lub wcześniej, kiedy były powszechne. W końcu ludzie nie modernizują swoich urządzeń przemysłowych tak, jakbyś modernizował swój telefon! Jak powiedziałem, to nadużycie terminologii. Być może „prawie na pewno” było zbyt mocnym sformułowaniem, ale jest to bardzo powszechne użycie.

18

Jest to mylące, ponieważ porty Windows COM: pochodzą z systemu nazewnictwa zdefiniowanego w MS-DOS (ur. 1980). Zostało to prawie skopiowane z CP / M (ur. 1974) z kilkoma pomysłami zaczerpniętymi z Uniksa. Nie spodziewali się dodania pośredniej magistrali „transportowej”, takiej jak USB.

Sporo rzeczy w systemie Windows to osoby, które przeżyły ewolucję CP / M-> MS-DOS, takie jak napędy dysków o nazwach literowych, 3-literowe rozszerzenia nazw plików, pliki .EXE i .COM oraz interfejs poleceń wiersza polecenia.

Kolejne to nazwy urządzeń: zazwyczaj trzy litery, zawsze kończące się dwukropkiem. COM: to szeregowy „port komunikacyjny”, LPT: „drukarka liniowa” (zwykle zawieszona na porcie Centronics), NUL: zrzuca wszystko, co do niego jest wysyłane, CON: to „konsola” (klawiatura i ekran). Niektóre, które możesz mieć kilka numerów, aby je rozróżnić. Porty COM: podobnie jak porty LPT: stają się COM1: i LPT1: i tak dalej.

Port COM: jest „punktem końcowym”: drugim końcem łącza komunikacyjnego z punktu widzenia komputera z systemem Windows. Jak wiele rzeczy w informatyce, most jest ignorowany i jest to element końcowy, o którym myślisz, a nie USB. Dotyczy to również klawiatury komputera (podłączonej jako CPU-PCIe-USB-kbd) lub napędu sieciowego (podłączonego jako CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA lub podobny).

USB wykorzystuje również ideę punktów końcowych. Kontroler USB może podłączyć komputer hosta do różnego rodzaju sprzętu i udostępnić go jako zasoby. Więc kiedy zobaczysz sprzęt podłączony przez USB, zobaczysz te punkty końcowe. Wirtualny port COM: w urządzeniu USB to po prostu port szeregowy wychodzący z tego urządzenia podrzędnego USB jako punkt końcowy. System Windows nada mu numer (COM1 :, COM27: itp.), A port szeregowy może zostać rozpoznany i użyty przez dowolny program korzystający ze standardowego interfejsu API systemu Windows dla portów COM:.

Niektóre urządzenia podłączone przez USB mogą preferować podszywanie się pod port szeregowy, ponieważ ułatwia to rozwój oprogramowania Windows. Nie trzeba pisać sterownika urządzenia, co oszczędza dużo pracy - urządzenie USB informuje system Windows, że jest to port szeregowy. Z punktu widzenia komputera jest to w porządku, jeśli zachowuje się jak port szeregowy (bajty są wysyłane i odbierane w nieskończonym strumieniu szeregowym, który jest zawsze otwarty). Są więc korzyści dla programisty.


4
Nigdy nie widziałem, aby nazwy urządzeń kończyły się dwukropkiem. W wierszu poleceń mówisz także np. type file.txt > lpt1Bez dwukropka. A w domyślnym menedżerze plików systemu Windows, Eksploratorze, nie można utworzyć pliku o nazwie np. COM lub LPT1 (przynajmniej w Windows XP, może później). Gdzie można zobaczyć dwukropek po nazwie urządzenia?
Ruslan

2
@ Ruslan, masz rację, że są one opcjonalne w systemie Windows, który je upuścił, akceptuje oba w przeciwieństwie do MS-DOS. Ale nigdy ich nie widziałem ... (a) wyszukuje tekst na urządzeniach MS-DOS; (b) w CP wpisz „mode /?” i spójrz na składnię polecenia użytego do ustawienia parametrów portu COMn: i LPTn:, wypróbuj je, jeśli chcesz; (c) w wierszu polecenia wpisz „copy con: nul:” i obserwuj, jak działa (Ctrl-C, aby zakończyć).

1
@ Ruslan Colon jest tam, ponieważ jest to urządzenie jak każde inne. To nie jest dwukropek, który jest wyjątkowy - copy con:filename.txt nuldziała dobrze, dokładnie tak samo jak copy c:filename.txt nul. Przynajmniej w przypadku MS-DOS 6.22 dwukropek można w większości przypadków pominąć, ponieważ nie wprowadza żadnych dwuznaczności; w przeciwieństwie do nazw dysków, te urządzenia są nazwami zastrzeżonymi, więc nie napotkasz problemów copy file.txt c(czy mam skopiować plik do bieżącego katalogu na dysku c, czy do pliku o nazwie „c” w moim bieżącym katalogu?) .
Luaan

7

Aby dodać do odpowiedzi Jorena Vaesa : pamiętaj, że niektóre aplikacje (np. Arduino IDE) instalują sterownik systemu Windows, który tworzy porty „wirtualnego portu COM”. Gdy te porty są aktywowane, systemy operacyjne informują programy, że dostępny jest port COM, który wygląda jak standardowy port szeregowy [*], do którego programy (takie jak Arduino IDE, ale także każdy inny) mogą wysyłać i odbierać bity, takie jak do dowolnego portu szeregowego. Jednak pod maską te bity są przesyłane do kabla USB. Wewnątrz tablicy Arduino dzieje się coś analogicznego.

[*] A przez „standardowy port szeregowy” rozumiemy tutaj protokół RS-232, taki, który był tradycyjnie transmitowany przez złącze DB-9 lub DB-25. W naszym kontekście nie ma znaczenia, że ​​USB jest również „szeregowy”.


7

Rozumiesz różnicę między portem COM a portem USB jest poprawny.

Krótka odpowiedź na pytanie, dlaczego niektóre porty USB są mapowane przez system operacyjny jako porty „COM”, brzmi: istnieją urządzenia USB, które implementują USB CDC (klasa urządzeń komunikacyjnych). Urządzenia te stanowią pomost między strasznie skomplikowanym interfejsem USB a standardowym interfejsem typu UART / RS-232. Dla przejrzystości dla użytkowników system operacyjny ładuje sterowniki USB, które naśladują warstwę transportową, jako port COM, wirtualny port COM. Poniżej podano kilka szczegółów historycznych i uzasadnienie takiego podejścia.

Port COM wykorzystuje złącza DB-9 / DB-15 (znane również jako szeregowy RS-232 lub UART), a kontrolery tych portów są fizycznie mapowane na sprzęt komputera, na określone adresy w przestrzeni we / wy. Ten kontroler COM staje się przestarzały w nowoczesnych komputerach i wygasa.

Jednocześnie wiele MCU nadal wykorzystuje komunikację szeregową RS-232 jako główny środek komunikacji ze światem peryferyjnym. Powodem jest to, że sprzęt (i oprogramowanie) dla tego rodzaju łącza jest bardzo prosty i łatwy do wdrożenia. Co więcej, cała współczesna komunikacja programistyczna / debugująca Androida odbywa się w stylu portu COM. Ponadto wiele urządzeń „komunikacyjnych” (jako modemy, w tym 4G LTE i nowsze), nadal korzysta z interfejsu w stylu UART z protokołem sterowania typu ASCII na kilku portach „COM”.

Teraz programiści mają dylemat, jak komunikować się z takimi mikrokontrolerami, jeśli komputer programistyczny hosta nie ma portów COM? Rozwiązaniem było użycie portów USB i specjalnych urządzeń USB, które łączą protokół USB z interfejsem RS-232 portu COM. Istnieją dedykowane urządzenia USB jako układy FTDI, a wiele innych (Cypress, Microchip itp.) Tworzy urządzenia spełniające tę funkcję mostu.

Teraz cała natywna komunikacja z tymi MCU jest nadal wyrażana w postaci protokołu RS-232, a większość przykładów aplikacji zakłada użycie niektórych aplikacji Terminal (TeraTerm, HyperTerminal itp.) Do korzystania z łącza. Dla wygody użytkownika mostki USB-U-U są wyposażone w sterowniki reprezentujące port jako wirtualny port COM. Wszystkie nowoczesne oprogramowanie wykorzystuje wirtualizację sprzętu COM, co zapewnia płynne przejście do komputerów „bez COM”. Powszechną praktyką jest albo dodawanie dedykowanego mostka FTDI do portów UART na platformie programistycznej MCU (i używanie sterowników FTDI na komputerze-hoście, aby port USB wyglądał jak port COM), lub osadzanie odpowiedniego kodu mostu w samym MCU (jeśli ma natywną funkcjonalność USB).

Prostym podejściem jest użycie zewnętrznej płyty USB-U-UART i podłączenie UART do MCU w fazie rozwoju. Lub, jeśli płyta ma już złącze DB-9, istnieją klucze sprzętowe USB, które można podłączyć bezpośrednio do niego.

We wszystkich przypadkach natywna kontrola UART MCU pojawi się po stronie hosta jako wirtualny port COM, pomijając wszystkie pośrednie transformacje sygnału / protokołu. Właśnie dlatego ludzie często pomijają rozróżnienie między mostkami USB-U-UART i portami COM.


3

Jest to bardzo mylące, ale nie musisz się tym martwić. Po pierwsze, pomyśl o UART, który sam jest terminem ogólnym, ale pomyśl o takim, który tworzy protokół z bitem początkowym, jednym lub dwoma bitami stopu, 7 lub 8 zwykle bitami danych, a czasami parzystością, która jest parzysta lub nieparzysta; może się różnić od tego, co czyni go znacznie gorszym.

UART jest na poziomie TTL, cokolwiek to znaczy. Kiedyś było to 5 V, a teraz 3,3 V, 1,8 V lub cokolwiek innego; być może TTL to zły termin. NASTĘPNIE miałeś / masz RS-232, RS-422 itp. Są to standardy NAPIĘCIA I PIN, a nie standardy protokołu. Błędne jest mieszanie warunków i mówienie RS-232, gdy masz na myśli jakiś UART.

W tamtym dniu Twój UART był na twoich płytach głównych i chciałeś jakiegoś złącza do świata zewnętrznego z poziomami napięcia, które w tamtym czasie miały sens i jakimś standardowym pinoutem / kablem. Dlatego często spotykano popularny standard 25 i 9 pin dla różnych urządzeń peryferyjnych, aw świecie komputerów Wintel nazywa się to portem komunikacyjnym lub czasem portem szeregowym.

Pewnie, port, który przenosi dane szeregowe może i jest nazywany portem szeregowym, SPI, I²C, MDIO, UART, HDLC, SDLC itp., A może nawet USB i SCSI; możesz oszaleć z tym. Zwykle port szeregowy oznacza niektóre piny, które można uzyskać w UART.

Świat Unix / Linux mówi ttyzamiast com/ serial/ uart, ale to jest to samo.

Teraz jest WDROŻENIE. Możesz kupić układ UART z jakimś interfejsem (tak, możesz mieć SPI UART, który jest szeregowy na obu końcach lub I²C UART lub jakąś dedykowaną magistralę lub USB itp.). Nawet w tamtym dniu UART miał po jednej stronie szynę, przez którą ostatecznie komunikował się procesor. Dzisiaj mamy FTDI i innych dostawców, którzy tworzą fajne rozwiązania USB UART, nie różnią się w żaden sposób niektóre warstwy interfejsu między oprogramowaniem a UART, a następnie druga strona UART ma jakiś interfejs, czy to na poziomie TTL / chip lub RS-232C lub RS-422 itp.

Wczesne Arduinos często używałeś płyty FTDI USB-U-UART, która również zasilała Arduino. Niektóre mają tę moc USB i szeregowy / UART na samej płycie Arduino, a następnie są podłączone na całej płycie do UART na chipie AVR (to samo dotyczy niektórych procesorów z niektórymi warstwami magistrali, aby oprogramowanie mogło komunikować się z UART, który ma jakiś interfejs po drugiej stronie, w tym przypadku piny na krawędzi AVR, przy poziomach napięcia układu, TTL).

Ponieważ funkcjonalność UART nie zmieniała się od dziesięcioleci, dlaczego terminologia oprogramowania, a nawet aplikacje, powinny się zmieniać na poziomie aplikacji? Napisz aplikację TTY dla systemu Linux / Unix 10–15 lat temu na chipie UART na płycie głównej i istnieje duża szansa, że ​​nadal będzie działać dzisiaj z poziomem USB na TTL lub USB na RS-232C lub RS-422 lub dowolnym pinem / definicja poziomu. To samo dotyczy systemu Windows i mam ten stary kod, który nadal działa na oba. W świecie Windows używany jest termin COM.

Od jakiegoś czasu nie korzystałem z piaskownicy Arduino i jeśli tak, byłby na Linuksie, ale nie zdziwiłbym się, gdyby ten program, którym jest Java, o ile dobrze pamiętam, byłby ogólny i używa nazwy systemu tak ttyS2na Linuxie i COM2 w systemie Windows.

Ponowne przeczytanie pytania może pójść o wiele dalej, korzystając z już istniejącej ilości oprogramowania korzystającego z tych wywołań interfejsu API. Znowu przez dziesięciolecia nie ma powodu, dla którego nie można stworzyć wirtualnego portu w oprogramowaniu, który przenosi te dwukierunkowe dane w zasadzie wszystko, co tylko można sobie wyobrazić. UART na Ethernet jest bardzo powszechny, aw serwerowniach, w których serwery nadal bardzo korzystają z portów COM / TTY / RS-232, możesz mieć serwer terminali, który ma wiele interfejsów, które możesz podłączyć do wielu serwerów, następnie Ethernet po drugiej stronie, a jeśli nie zdecydujesz się na telnet, możesz zainstalować sterownik wirtualnego portu COM.

Wtedy twoja aplikacja na twoim komputerze myśli, że rozmawia z portem COM, ale w rzeczywistości strumień bajtów przeskakuje do Ethernetu, a następnie uderza w serwer terminali, a następnie na kabel UART do poziomu RS-232C (ale niekoniecznie pinout), aby serwer i powrót w ten sam sposób.

Czasami nie ma powodu, aby faktycznie dostać się do prawdziwego UART, z jakiegokolwiek powodu zwirtualizuj port COM, aby oprogramowanie napisane dla tych wywołań API mogło nadal działać. Być może pomyślisz o starożytnym oprogramowaniu bankowym, którego wciąż używamy, które ma głupi terminal interfejsu UART, który być może w tamtym czasie był podłączony lub został podłączony do modemu, aby ostatecznie zostać serwerem. Możesz sprawić, aby oprogramowanie nadal działało, poprzez różne emulacje, w tym wirtualny port COM, który dziś prawdopodobnie po prostu przesyła Ethernet do serwera jako strumień szeregowy (na przykład TCP / IP).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.