USB bağlantı noktaları neden bazen seri bağlantı noktaları olarak adlandırılır ve COM olarak adlandırılır?


13

Bilgisayar bağlantı noktaları hakkındaki anlayışım ilerledikçe,

  1. Seri port, burada gösterilen gibi 9 pinli bir fiştir ve buna COM bağlantı noktası da denir.
  2. USB bağlantı noktaları seri bağlantı noktalarından farklı bir standarttır.

Neden sık sık "seri bağlantı noktaları" olarak adlandırılan USB bağlantı noktalarını görüyorum ve örneğin Arduino IDE'de USB bağlantı noktaları COM öneki tarafından tanımlanıyor? Ayrıca, herhangi bir seri bağlantı noktası yoksa neden bazen sanal bir COM bağlantı noktasına ihtiyaç duyulur? (Örnek: Prologix GPIB-USB adaptörü.)

Aynı adın iki farklı şeyi tanımlamak için kullanılması biraz kafa karıştırıcı olabilir.

Arduino IDE ekran görüntüsü, Araçlar → Seri Bağlantı Noktası → COM14 menü komutu gösteriliyor


2
USB seri haberleşmedir.

3
Belki de seri port olarak çalışan bir USB cihazınız olduğu için ? Bu FTDI (FT232) veya Prolific (PL2303) USB-seri çiplerden birine veya belki de aynı yazılım uygulamasına sahip bir MCU'ya sahip bir şey mi? Anakartta (veya PCI (e) kartlarında) sabitlenmiş seri portlarla aynı ad alanında gösterilmesi, arayüzü yazılıma daha kolay hale getirir: portun fiziksel olarak nasıl uygulandığını bilmesine gerek yoktur, sadece seri port gibi quacks.
ilkkachu

4
IBM PC'nin ilk günlerinde ve öncüllerinin çoğunda, anakartta tipik olarak bir "seri bağlantı noktası" bulunmadığını, bunun yerine bir genişletme veri yolu kartında bir arayüz olduğunu fark etmeye yardımcı olabilir. Günümüzde bu kavram, hala belirgin bir seri arayüz dönüştürücüsü olduğu için nispeten doğrudur - işlemci yerel veri yolunun eski ISA konektörlü uzantısı yerine, yalnızca bilgisayara geri bağlayan "genişletme veri yolu" artık USB'dir.
Chris Stratton

14
Evrensel ne Otobüs?
ocaklar

4
@ hobbs, doğru Evrensel Seri Veri Yolu. Otobüs. Seri bağlantı noktasından çok farklı, değil mi? Aptalca kalın metin olmasa bile.

Yanıtlar:


27

Bunlar, seri bağlantı noktaları olarak adlandırılan USB bağlantı noktaları değildir. Örneğin, Arduino'da USB'den seriye bir cihaz (ikinci bir mikrodenetleyici veya bir FTDI yongası şeklinde) vardır. Bu, bilgisayarla iletişim kurmak ve USB Wi-Fi dongle'larına veya USB LAN adaptörlerine, USB SATA adaptörlerine vb.Gibi dış dünyaya gerçek bir seri bağlantı noktası oluşturmak için USB kullanır.

Anahtar, çoğu durumda, seri bağlantı noktasının doğrudan kullanıcı tarafından kullanılamamasıdır, çünkü cihazda "sabit kablolu" (bu durumda, doğrudan programladığınız mikro denetleyiciye bağlanır).

Katı teoride, seri iletişim kullanan herhangi bir port (hafızam bana hizmet ediyorsa "Evrensel Seri Veri Yolu" anlamına gelen USB de dahil olmak üzere) herhangi bir modern veri yolu "seri bağlantı noktası" dır. Ancak, çoğu durumda, insanlar "seri bağlantı noktasına" atıfta bulunduklarında, aslında RS-232'ye uygun bir bağlantı noktasına başvururlar.


10
Birisi bir "seri bağlantı noktası" nı ifade ettiğinde, neredeyse kesinlikle bir DE-9M konektörü aracılığıyla bağlanan RS-232 anlamına gelir. İnsanlar USB demekse, USB demeye eğilimlidirler. RS-485 veya GPIB gibi diğer seri protokoller veya Ethernet'in çeşitli aromaları için aynıdır.

5
@Felthry: "seri" sıklıkla RS-232'nin kullandığı asenkron seri sinyalleşme ("UART" daki "A") anlamına gelir, ancak standart mantık voltaj seviyelerinde RS-232 değil. Ve 9 pime (veya RS-232 için orijinal olan 25 pime) giden el sıkışma pimlerini içerebilir veya içermeyebilir.
Ben Voigt

2
Doğru. Sanırım bu, protokolün düşük voltajlı bir varyantı anlamına gelen 'RS-232'yi kullanarak terminolojinin kötüye kullanılmasının başka bir katmanı. Ben de DB-25M konektöründen bahsetmeyi düşündüm, ama burada gerçekten alakalı değil.

7
@Felthry, özür dilerim ama "birisi" seri bağlantı noktasına "her başvurduğunda neredeyse kesinlikle bir DE-9M konektörüyle bağlanan RS-232 anlamına gelir" eski bir PC merkezli görünümdür. Ve PC'ler en az on yıldır arkada 9 pimli konektörlerle yapılmadı. Kullanıcılarının kitlesel nüfusu, oldukları zaman onlara hiç dokunmadı. Her yerde ürünler, ekipman ve PCB'ler, çeşitli özel konektörler aracılığıyla ve LVTTL düzeylerinde veya RS-232C'de seri bağlantı noktaları kullanır. Ve bu sitedeki mühendisler, seri bağlantı noktalarını eski bir PC standardından çok daha fazla deneyimleyecekler. Bundan çok daha farklı bir dünya, korkarım.

4
@TonyM Belki de çok fazla eski okul ekipmanı etrafında bulundum. Bununla birlikte, bilgisayarların hala üzerinde DE9 konektörleri ile üretildiğini not edeceğim - sadece tüketici pazarı için değil. Endüstride ve araştırmada her yerde bulunurlar, çünkü muhtemelen 90'larda veya daha önce yaygın olan sistemlerle arayüz kurmanız gerekir. Ne de olsa insanlar telefonunuzu yükseltir gibi endüstriyel ekipmanlarını yükseltmiyor! Dediğim gibi, bu bir terminolojinin kötüye kullanılması. Belki de "neredeyse kesinlikle" çok güçlü bir ifadeydi, ama çok yaygın bir kullanımdır.

18

Bu kafa karıştırıcı çünkü Windows COM: bağlantı noktaları MS-DOS'ta tanımlanan bir adlandırma sisteminden geliyor (b. 1980). Bu, Unix'ten alınan bazı fikirler ile CP / M'den (b. 1974) oldukça fazla kopyalandı. USB gibi bir ara 'taşıma' veri yolu eklenmesini beklemiyorlardı.

Windows'ta oldukça az şey, CP / M-> MS-DOS evriminden kurtulanlardır; örneğin, harf adı verilen disk sürücüleri, 3 harfli dosya adı uzantıları, .EXE ve .COM dosyaları ve Komut İstemi komut arabirimi.

Diğeri cihaz adlarıdır: genellikle üç harf, her zaman iki nokta üst üste ile biter. COM: seri bir 'iletişim portu', LPT: bir 'hat yazıcısı' (genellikle bir Centronics portundan sarkıyor), NUL: kendisine gönderilenleri döker, CON: 'konsol' (klavye ve ekran). Bazıları aralarında ayrım yapmak için numaralandırılmış olabilir. COM: bağlantı noktaları, LPT: bağlantı noktaları gibi COM1: ve LPT1: ve benzerleri haline gelir.

Bir COM: bağlantı noktası bir 'uç nokta': Windows PC'nin bakış açısından iletişim bağlantısının uzak ucu. Bilgi işlemdeki birçok şey gibi, oradaki köprü yok sayılır ve USB değil, düşündüğünüz en uç bileşendir. Bu, bir PC klavyesi (CPU-PCIe-USB-kbd olarak bağlanır) veya bir ağ sürücüsü (CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA veya benzeri olarak bağlanır) için de geçerlidir.

USB uç noktalar fikrini de kullanır. Bir USB denetleyici, bir ana bilgisayarı her türlü donanıma bağlayabilir ve bunları kaynak olarak sağlayabilir. USB ile bağlı donanımı gördüğünüzde, bu uç noktaları görürsünüz. Bir USB aygıtındaki sanal COM: bağlantı noktası, bu USB bağımlı aygıttan bir uç nokta olarak çıkan seri bir bağlantı noktasıdır. Windows ona bir sayı verecektir (COM1 :, COM27: vb.) Ve bu seri bağlantı noktası, COM: bağlantı noktaları için standart Windows API'sini kullanan herhangi bir program tarafından tanınabilir ve kullanılabilir.

USB'ye bağlı bazı donanımlar, bir seri bağlantı noktasının kimliğine bürünmeyi tercih edebilir, çünkü Windows yazılımının geliştirilmesini kolaylaştırır. Hiçbir aygıt sürücüsünün yazılması gerekmez, bu da çok fazla iş tasarrufu sağlar - USB aygıtı Windows'a seri bir bağlantı noktası olduğunu söyler. Bilgisayarın bakış açısından, seri bir port gibi davranıyorsa (baytlar her zaman açık olan sonsuz bir seri akışta gönderilir ve alınır) iyi olur. Yani geliştirici için faydaları var.


4
İki nokta üst üste ile bitecek cihaz isimlerini hiç görmedim. Komut satırında ayrıca örneğin type file.txt > lpt1iki nokta üst üste işareti olmadan da söylersiniz . Varsayılan Windows dosya yöneticisi olan Explorer'da, örneğin COM veya LPT1 adlı bir dosya oluşturamazsınız (en azından Windows XP'de, belki de daha sonra da). Cihaz adından sonra iki nokta üst üste nerede görülebilir?
Ruslan

2
@Ruslan, Windows'da isteğe bağlı olduklarını haklıyorsunuz, bu da onları bıraktı, her ikisini de MS-DOS'tan farklı olarak kabul ediyor. Ama onları hiç görmedim ... (a) MS-DOS cihazlarında bir metin arayın; (b) CP'ye 'mode /?' yazın. ve COMn: ve LPTn: port parametrelerini ayarlamak için kullanılan komutun sözdizimine bakın, isterseniz bunları deneyin; (c) Komut İstemi'ne 'copy con: nul:' yazın ve çalışmasını izleyin (bitirmek için Ctrl-C).

1
@Ruslan Colon orada çünkü diğer cihazlarda olduğu gibi. Özel olan kolon değil - copy con:filename.txt nulgayet iyi çalışıyor, tam olarak aynı copy c:filename.txt nul. En azından MS-DOS 6.22 kadarıyla, herhangi bir belirsizlik getirmediğinden, kolon çoğu durumda atlanabilir; sürücü adlarından farklı olarak, bu aygıtların adları ayrılmıştır, bu nedenle sorunlarıyla karşılaşmazsınız copy file.txt c(dosyayı c sürücüsündeki geçerli dizine mi yoksa geçerli dizindeki "c" adlı bir dosyaya mı kopyalamalıyım?) .
Luaan

7

Joren Vaes'in cevabına eklemek için : bazı yazılım uygulamalarının (Arduino IDE gibi) "sanal COM" bağlantı noktaları oluşturan bir Windows sürücüsü yüklediğini unutmayın. Bu bağlantı noktaları etkinleştirildiğinde, işletim sistemleri programlara standart bir seri bağlantı noktasına [*] benzeyen bir COM bağlantı noktası bulunduğunu söyler, programların (Arduino IDE gibi, aynı zamanda diğer) herhangi bir seri bağlantı noktasına. Bununla birlikte, kaputun altında, bu bitler bir USB kablosuna gönderilir. Arduino tahtasında benzer bir şey meydana gelir.

[*] Ve burada "standart seri bağlantı noktası" ile, geleneksel olarak DB-9 veya DB-25 konektörü aracılığıyla aktarılan RS-232 protokolünü kastediyoruz. Bağlamımızda USB'nin de "seri" olması hiç önemli değil.


7

COM bağlantı noktası ile USB bağlantı noktası arasındaki farkı anlamanız doğru.

Bazı USB bağlantı noktalarının işletim sistemi tarafından neden "COM" bağlantı noktaları olarak eşlendiği sorusunu kısaca yanıtlayın: USB CDC (İletişim Aygıt Sınıfı) uygulayan USB aygıtları vardır. Bu cihazlar son derece karmaşık USB arayüzünden standart UART / RS-232 tipi arayüze bir köprü sağlar. Kullanıcılar için şeffaflık için, işletim sistemi, taşıma katmanını sanal bir COM bağlantı noktası olan COM bağlantı noktası olarak taklit eden USB sürücüleri yükler. Bu yaklaşımla ilgili bazı tarihsel detaylar ve gerekçeler aşağıdadır.

COM bağlantı noktası DB-9 / DB-15 (RS-232 seri veya UART olarak da bilinir) konektörler kullanır ve bu bağlantı noktaları için denetleyiciler, G / Ç alanındaki belirli adreslerle fiziksel olarak PC donanımına eşlenir. Bu COM denetleyicisi modern bilgisayarlarda modası geçmiş ve nesli tükenmiş durumda.

Aynı zamanda, birçok MCU hala RS-232 seri iletişimini çevre dünyası ile iletişim kurmak için ana araç olarak kullanmaktadır. Bunun nedeni, bu tür bir bağlantı için donanımın (ve yazılımın) çok basit ve uygulanması kolaydır. Dahası, tüm modern Android geliştirme / hata ayıklama iletişimi COM-port tarzında yapılır. Ayrıca, birçok "iletişim" cihazı (4G LTE ve üstü dahil olmak üzere modemler gibi), hala birçok "COM" bağlantı noktası üzerinden ASCII tipi kontrol protokolü ile UART tarzı arayüzü kullanır.

Şimdi geliştiricilerin bir ikilemi var, ana bilgisayar geliştirme COM portları yoksa bu mikrodenetleyicilerle nasıl iletişim kurabilirim? Çözüm, USB protokolünü ve COM protokolü RS-232 arayüzü ile USB protokolünü köprüleyen özel USB cihazlarını kullanmaktı. FTDI yongaları olarak özel bir USB cihazı vardır ve diğerleri (Cypress, Microchip, vb.) Bu köprü işlevini yerine getiren cihazlar yapar.

Şimdi, bu MCU'lara tüm yerel iletişim hala RS-232 protokolü olarak ifade edilmektedir ve uygulama örneklerinin çoğunda bağlantıyı kullanmak için bazı Terminal uygulamalarının (TeraTerm, HyperTerminal, vb.) Kullanıldığı varsayılmaktadır. Kullanıcı kolaylığı için, USB-UART köprülerinde bağlantı noktasını sanal bir COM bağlantı noktası olarak temsil eden sürücüler bulunur. Tüm modern yazılımlar, "COM'suz" bilgisayarlara sorunsuz geçiş sağlayan COM donanımının sanallaştırılmasını kullanır. Bir MCU geliştirme platformundaki UART bağlantı noktalarına özel bir FTDI köprüsü eklemek (ve USB bağlantı noktasının COM bağlantı noktası gibi görünmesi için ana bilgisayardaki FTDI sürücülerini kullanmak) veya MCU'nun kendisine uygun köprü kodunu gömmek yaygın bir uygulama haline gelir. yerel USB işlevselliğine sahiptir).

Düz yaklaşım, harici bir USB-UART kartı kullanmak ve UART'ı geliştirme aşamasında MCU'ya bağlamaktır. Veya, bir kartta zaten DB-9 konektörü varsa, doğrudan ona bağlanabilen USB dongle'ları vardır.

Her durumda, MCU'nun yerel UART kontrolü ana tarafta sanal bir COM portu olarak görünecek ve tüm ara sinyal / protokol dönüşümlerini atlayacaktır. Bu yüzden insanlar günümüzde genellikle USB-UART köprüleri ve COM bağlantı noktaları arasındaki farkı atlıyor.


3

Çok kafa karıştırıcı, ama endişelenmenize gerek yok. Öncelikle, kendisi genel bir terim olan bir UART'ı düşünün, ancak başlangıç ​​biti, bir veya iki durdurma biti, 7 veya 8 genellikle veri bitleri ve bazen eşit veya tek olan parite üreten bir protokol düşünün; oradan farklılık gösterebilir, bu da onu daha da kötüleştirir.

UART ne olursa olsun TTL seviyesindedir. Eskiden 5 V ve şimdi 3.3 V, 1.8 V ya da her neyse; belki TTL yanlış terimdir. O zaman RS-232, RS-422 vb. Var / bunlar var. Bunlar, protokol standartları değil GERİLİM VE PIN standartlarıdır. Bir çeşit UART demek istediğinizde terimleri karıştırmak ve RS-232 demek yanlıştır.

O günlerde UART'ınız anakartlarınızdaydı ve o zaman mantıklı olan voltaj seviyeleri ve bir çeşit standart pinout / kablo ile dış dünyaya bir çeşit konektör istediniz. Bu nedenle, çeşitli çevre birimleri için popüler bir 25 ve 9 pin standardı bulundu ve Wintel PC dünyasında buna bir İletişim bağlantı noktası veya bazen seri bağlantı noktası deniyordu.

Tabii ki, seri veri taşıyan bir port seri port, SPI, I²C, MDIO, UART, HDLC, SDLC, vb. Ve hatta USB ve SCSI olarak adlandırılabilir; bununla delirebilirsin. Genellikle bir seri bağlantı noktası, bir UART'ta alabileceğiniz bazı pimler anlamına gelir.

Unix / Linux dünyası / / ttyyerine diyor , ama aynı şey.comserialuart

Şimdi UYGULAMA var. Üzerinde bazı arayüzler bulunan bazı UART çipleri satın alabilirsiniz (evet, her iki uçta seri olan bir SPI UART veya I²C UART veya bazı özel veri yolu veya USB vb.) O gün bile UART'ın bir tarafında CPU'nun iletişim kurduğu bir otobüs vardı. Bugün FTDI ve güzel USB UART çözümleri yapan diğer satıcılarımız var, yazılım ve UART arasında bazı farklı katman katmanları yapmıyor ve daha sonra UART'ın diğer tarafında TTL / çip seviyesi veya RS-232C veya RS-422 vb.

Erken Arduinos, genellikle Arduino'ya güç sağlayan bir FTDI USB-UART kartı kullandınız. Bazıları Arduino kartında USB gücüne ve seri / UART'a sahiptir ve daha sonra AVR çipindeki UART'a kart üzerinden bağlanır (aynı zamanda, yazılımın sahip olduğu bir UART ile iletişim kurmasına izin vermek için bazı otobüs katmanlarıyla bazı işlemcilerle ilgilenir diğer taraftaki bazı arayüzler, bu durumda AVR'nin kenarındaki çip voltaj seviyelerinde pimler, TTL).

UART işlevselliği onlarca yıldır değişmediğinden, yazılım terminolojisi ve hatta yazılım uygulamaları uygulama düzeyinde neden değişmelidir? 10-15 yıl önce anakartınızdaki bir UART çipine karşı bir Linux / Unix TTY uygulaması yazın ve bugün hala USB'den TTL seviyesine veya USB'den RS-232C seviyesine veya RS-422'ye veya herhangi bir pime / düzey tanımı. Aynı şey Windows için de geçerli ve ben hala her ikisinde de çalışan eski kod var. Windows dünyasında COM terimi kullanılmaktadır.

Bir süredir Arduino sanal alanını kullanmadım ve eğer Linux'ta olsaydı, ama Java olan bu program, doğru hatırlarsam, genelse ve ttyS2Linux ve COM2'de sistem adını kullanırsa şaşırmam pencerelerde.

Sorunuzu yeniden okumak, bu API çağrılarını kullanan mevcut yazılım miktarından faydalanarak daha da ileri gidebilir. Yine onlarca yıldır, yazılımda bu çift yönlü verileri aklınıza gelebilecek her şeyi taşıyan sanal bir bağlantı noktası oluşturamamanızın bir nedeni yoktur. UART - Ethernet çok yaygın olanıdır ve sunucuların hala COM / TTY / RS-232 bağlantı noktalarını kullandığı sunucu odalarında, bir dizi sunucuya bağlanabileceğiniz bir dizi arabirime sahip bir terminal sunucunuz olabilir, sonra diğer tarafta Ethernet, daha sonra telnet girmemeyi seçerseniz, sanal bir COM bağlantı noktası sürücüsü yükleyebilirsiniz.

Daha sonra, bilgisayarınızdaki uygulamanız bir COM bağlantı noktasıyla konuştuğunu düşünüyor, ancak aslında bayt akışı Ethernet'e atlıyor ve daha sonra terminal sunucusunu, daha sonra RS-232C seviyesindeki bir UART'a (ancak mutlaka pinout değil) kablolara çarpıyor. sunucu ve geri aynı şekilde.

Bazen gerçek bir UART'a bunu yapmak için hiçbir neden yoktur, bu nedenle COM bağlantı noktasını sanallaştırmak için bu API çağrıları için yazılan yazılımın hala çalışabilmesi gerekir. Belki de hala bir UART arabirimine aptal bir terminali olan hala kullandığımız eski bankacılık yazılımını düşünebilirsin, belki de o zamanlar geriye dönük olarak bağlanmıştı veya sonunda bir sunucuya modeme girmiş olabilirsiniz. Yazılımın hala çalışabilmesi için, günümüzde Ethernet'i sunucuya seri akış olarak (örneğin TCP / IP) indiren sanal bir COM bağlantı noktası da dahil olmak üzere çeşitli miktarlarda öykünme yoluyla yapabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.