Mengapa port USB terkadang disebut sebagai port serial dan disebut COM?

13

Sejauh pemahaman saya tentang port komputer berjalan,

  1. Port serial adalah plug 9 pin seperti yang ditunjukkan di sini dan juga disebut port COM.
  2. Port USB adalah standar yang berbeda dari port serial.

Lalu mengapa saya sering melihat port USB yang disebut "port serial" dan, misalnya dalam IDE Arduino, port USB diidentifikasi oleh awalan COM? Juga mengapa port COM virtual kadang-kadang diperlukan jika tidak ada port serial yang terlibat? (Contoh: Adaptor Prologix GPIB-USB.)

Penggunaan nama yang sama untuk menggambarkan dua hal berbeda menurut saya bisa sedikit membingungkan.

Cuplikan layar dari Arduino IDE, perintah menu Tools → Serial Port → COM14 ditampilkan

mickkk
sumber
2
USB adalah komunikasi serial.
3
Mungkin karena Anda memiliki perangkat USB yang berfungsi sebagai port serial ? Sesuatu yang memiliki salah satu chip USB-to-serial FTDI (FT232) atau Prolific (PL2303), atau mungkin MCU dengan implementasi perangkat lunak yang sama? Memiliki mereka ditampilkan dalam namespace yang sama dengan port serial diperbaiki pada motherboard (atau dalam PCI (e) kartu) membuat antarmuka lebih mudah ke perangkat lunak: tidak perlu tahu bagaimana port diimplementasikan secara fisik, hanya saja itu dukun seperti port serial.
ilkkachu
4
Mungkin membantu untuk menyadari bahwa pada hari-hari awal IBM PC dan banyak pendahulunya, "port serial" biasanya tidak terletak pada motherboard, tetapi lebih merupakan antarmuka pada kartu bus ekspansi. Saat ini konsep itu tetap relatif benar karena masih ada konverter antarmuka serial yang berbeda - hanya "bus ekspansi" yang menghubungkannya kembali ke komputer sekarang adalah USB, alih-alih perpanjangan ISA yang disambungkan sebelumnya dari bus lokal prosesor.
Chris Stratton
14
Bus Universal apa ?
hobbs
4
@obbs, itu benar Universal Serial Bus. Sebuah bus. Sangat berbeda dari port serial, bukan? Bahkan tanpa teks tebal yang konyol.

Jawaban:

27

Ini bukan port USB yang disebut sebagai port serial. Dalam contoh Anda, Arduino memiliki perangkat USB-ke-serial (baik dalam bentuk mikrokontroler kedua, atau chip FTDI). Ini akan menggunakan USB untuk berkomunikasi dengan komputer dan membentuk port serial aktual ke dunia luar - mirip dengan dongle Wi-Fi USB, atau adaptor USB LAN, adaptor USB SATA, dll.

Kuncinya adalah bahwa dalam banyak kasus, port serial tidak tersedia langsung ke pengguna, karena "kabel" dalam perangkat (dalam hal ini, terhubung langsung ke mikrokontroler yang Anda pemrograman).

Dalam teori yang ketat, port apa pun yang menggunakan komunikasi serial (hampir semua bus modern - termasuk USB, yang merupakan kependekan dari "Universal Serial Bus", jika ingatanku) adalah "port serial". Namun, dalam kebanyakan kasus, ketika orang merujuk ke "port serial", mereka sebenarnya merujuk ke port yang sesuai dengan RS-232.

Joren Vaes
sumber
10
Setiap kali seseorang merujuk pada "port serial" mereka hampir pasti berarti RS-232 terhubung melalui konektor DE-9M. Jika orang berarti USB, mereka cenderung mengatakan USB. Sama untuk protokol serial lain seperti RS-485 atau GPIB atau berbagai rasa Ethernet.
5
@Felthry: "serial" sangat sering berarti pensinyalan serial asinkron ("A" dalam "UART") yang juga digunakan RS-232, tetapi pada level tegangan logika standar, bukan RS-232. Dan mungkin atau mungkin tidak termasuk pin handshaking yang mengarah ke 9 pin (atau 25-pin, yang asli untuk RS-232).
Ben Voigt
2
Benar. Saya kira itu lapisan lain penyalahgunaan terminologi, menggunakan 'RS-232' yang berarti varian tegangan-rendah dari protokol. Saya mempertimbangkan untuk menyebutkan konektor DB-25M, tetapi tidak terlalu relevan di sini.
7
@Felthry, maaf tapi "setiap kali seseorang merujuk ke" port serial "mereka hampir pasti berarti RS-232 terhubung melalui konektor DE-9M" adalah tampilan PC-centric yang ketinggalan jaman. Dan PC belum dibuat dengan konektor 9-pin di bagian belakang selama setidaknya satu dekade. Populasi massa pengguna mereka tidak pernah menyentuh mereka saat itu. Produk, peralatan, dan PCB di semua tempat menggunakan port serial, melalui berbagai konektor khusus dan pada level LVTTL atau RS-232C. Dan para insinyur di situs ini akan mengalami port serial jauh lebih banyak cara daripada standar PC lama. Dunia yang jauh lebih beragam dari itu, saya khawatir.
4
@TonyM Mungkin aku terlalu banyak menggunakan peralatan sekolah lama. Saya akan mencatat, bagaimanapun, bahwa komputer masih secara umum dibuat dengan konektor DE9 pada mereka - hanya saja tidak untuk pasar konsumen. Mereka ada di mana-mana dalam industri dan penelitian, karena Anda mungkin perlu berinteraksi dengan sistem yang dibuat pada tahun 90-an atau sebelumnya, ketika mereka biasa. Lagipula, orang tidak memperbarui peralatan industri mereka seperti Anda akan meningkatkan ponsel Anda! Seperti saya katakan, itu penyalahgunaan terminologi. Mungkin "hampir pasti" adalah kata yang terlalu kuat, tetapi ini adalah penggunaan yang sangat umum.
18

Ini membingungkan karena Windows COM: port berasal dari sistem penamaan yang didefinisikan kembali dalam MS-DOS (lahir 1980). Ini cukup banyak disalin dari CP / M (lahir 1974) dengan beberapa ide diambil dari Unix. Mereka tidak mengantisipasi penambahan bus 'transportasi' perantara seperti USB.

Beberapa hal di Windows adalah penyintas dari evolusi CP / M-> MS-DOS, seperti disk drive yang bernama letter, ekstensi nama file 3 huruf, file .EXE dan .COM dan antarmuka perintah Command Prompt.

Lainnya adalah nama perangkat: umumnya tiga huruf, selalu berakhir dengan titik dua. COM: adalah 'port komunikasi' serial, LPT: 'printer baris' (biasanya menggantung port Centronics), NUL: dump apa pun yang dikirim kepadanya, CON: adalah 'konsol' (keyboard dan layar). Beberapa yang Anda dapat memiliki beberapa nomor untuk membedakannya. COM: ports melakukannya, seperti halnya LPT: ports, menjadi COM1: dan LPT1: dan seterusnya.

Port COM: adalah 'titik akhir': ujung jauh dari tautan komunikasi dari sudut pandang PC Windows. Seperti banyak hal dalam komputasi, jembatan di sana diabaikan dan komponen ujung yang Anda pikirkan, bukan USB. Ini juga berlaku untuk keyboard PC (dihubungkan sebagai CPU-PCIe-USB-kbd) atau drive jaringan (terhubung sebagai CPU-PCIe-LAN-PCI-CPU-PCIe-SATA atau serupa).

USB juga menggunakan gagasan titik akhir. Pengontrol USB dapat menghubungkan PC host ke semua jenis perangkat keras dan menyediakannya sebagai sumber daya. Jadi ketika Anda melihat perangkat keras terpasang oleh USB, Anda melihat titik akhir ini. Port COM: virtual dalam perangkat USB hanyalah port serial yang keluar dari perangkat slave USB sebagai titik akhir. Windows akan memberikan nomor (COM1 :, COM27: dll.) Dan port serial itu dapat dikenali dan digunakan oleh program apa pun yang menggunakan Windows API standar untuk port COM:.

Beberapa perangkat keras yang terpasang USB mungkin lebih suka meniru port serial karena membuat pengembangan perangkat lunak Windows menjadi lebih mudah. Tidak ada driver perangkat yang perlu ditulis, yang menghemat banyak pekerjaan - perangkat USB memberi tahu Windows bahwa itu adalah port serial. Dari sudut pandang PC, ini bagus jika berperilaku seperti port serial (byte dikirim dan diterima dalam aliran serial tak berujung yang selalu terbuka). Jadi ada manfaatnya bagi pengembang.

TonyM
sumber
4
Saya belum pernah melihat nama perangkat berakhir di titik dua. Di baris perintah Anda juga mengatakan misalnya type file.txt > lpt1tanpa titik dua. Dan di pengelola file Windows default, Explorer, Anda tidak dapat membuat file bernama mis. COM atau LPT1 (setidaknya di Windows XP, mungkin nanti juga). Di mana orang dapat benar-benar melihat titik dua setelah nama perangkat?
Ruslan
2
@ Ruslan, Anda benar bahwa mereka opsional di Windows yang telah menjatuhkan mereka, ia menerima keduanya tidak seperti MS-DOS. Tetapi karena belum pernah melihatnya ... (a) mencari teks pada perangkat MS-DOS; (B) dalam CP, ketik 'mode /?' dan lihat sintaks dari perintah yang digunakan untuk mengatur COMn: dan LPTn: parameter port, cobalah jika Anda mau; (c) di Command Prompt, ketik 'copy con: nul:' dan tontonlah itu berfungsi (Ctrl-C untuk mengakhiri).
1
@Ruslan Colon ada di sana karena itu perangkat seperti yang lain. Ini bukan usus yang istimewa - copy con:filename.txt nulberfungsi dengan baik, persis sama dengan copy c:filename.txt nul. Setidaknya sejauh MS-DOS 6.22, usus besar dapat dihilangkan dalam banyak kasus, karena tidak menimbulkan ambiguitas; tidak seperti nama drive, perangkat ini telah dicadangkan nama, jadi Anda tidak mengalami masalah copy file.txt c(haruskah saya menyalin file ke direktori saat ini di drive c, atau ke file bernama "c" di direktori saya saat ini?) .
Luaan
7

Untuk menambah jawaban Joren Vaes : perlu diketahui bahwa beberapa aplikasi perangkat lunak (seperti Arduino IDE) menginstal driver Windows yang menciptakan port "virtual COM". Ketika port-port itu diaktifkan, sistem operasi memberi tahu program-program bahwa ada port COM yang tersedia, yang terlihat seperti port serial standar [*], yang programnya (seperti Arduino IDE, tetapi juga yang lain) dapat mengirim dan menerima bit seperti ke port serial. Namun, di bawah kap, bit-bit itu dikirim ke kabel USB. Di dalam papan Arduino sesuatu yang analog terjadi.

[*] Dan, dengan "port serial standar" di sini yang kami maksud adalah protokol RS-232, jenis yang secara tradisional trasmitted melalui konektor DB-9 atau DB-25. Dalam konteks kami sama sekali tidak masalah bahwa USB juga "serial".

leonbloy
sumber
7

Pemahaman Anda tentang perbedaan antara port COM dan port USB sudah benar.

Pendek menjawab pertanyaan Anda, mengapa beberapa port USB dipetakan oleh OS sebagai port "COM", adalah: ada perangkat USB yang mengimplementasikan USB CDC (Communication Device Class). Perangkat ini menyediakan jembatan dari antarmuka USB yang sangat rumit ke antarmuka tipe UART / RS-232 standar. Untuk transparansi bagi pengguna, sistem operasi memuat driver USB yang meniru lapisan transport sebagai port COM, port COM virtual. Beberapa detail historis dan pembenaran untuk pendekatan ini mengikuti.

Port COM menggunakan konektor DB-9 / DB-15 (alias RS-232 serial, atau UART), dan pengontrol untuk port ini secara fisik dipetakan ke perangkat keras PC, ke alamat spesifik di ruang I / O. Pengontrol COM ini menjadi usang di PC modern, dan punah.

Pada saat yang sama banyak MCU masih menggunakan komunikasi serial RS-232 sebagai sarana utama untuk berkomunikasi dengan dunia periferal. Alasannya adalah perangkat keras (dan perangkat lunak) untuk jenis tautan ini sangat sederhana dan mudah diimplementasikan. Terlebih lagi, semua komunikasi pengembangan / debug Android modern dilakukan dalam gaya COM-port. Juga, banyak perangkat "komunikasi" (seperti modem, termasuk 4G LTE ke atas), masih menggunakan antarmuka gaya UART dengan protokol kontrol tipe ASCII di beberapa port "COM".

Sekarang pengembang memiliki dilema, bagaimana berkomunikasi dengan pengendali mikro seperti itu jika PC pengembangan host tidak memiliki port COM? Solusinya adalah dengan menggunakan port USB dan perangkat USB khusus yang menjembatani protokol USB dengan antarmuka COM-port RS-232. Ada perangkat USB khusus sebagai chip FTDI, dan banyak lainnya (Cypress, Microchip, dll.) Membuat perangkat yang menjalankan fungsi jembatan ini.

Sekarang, semua komunikasi asli ke MCU ini masih dinyatakan dalam protokol RS-232, dan sebagian besar contoh aplikasi mengasumsikan penggunaan beberapa aplikasi Terminal (TeraTerm, HyperTerminal, dll.) Untuk menggunakan tautan. Untuk kenyamanan pengguna, jembatan USB-ke-UART disediakan dengan driver yang mewakili port tersebut sebagai port COM virtual. Semua perangkat lunak modern menggunakan virtualisasi perangkat keras COM, yang memberikan transisi yang lancar ke PC "COM-less". Ini menjadi praktik umum untuk menambahkan jembatan FTDI khusus ke port UART pada platform pengembangan MCU (dan menggunakan driver FTDI pada PC host untuk membuat port USB terlihat seperti port COM), atau menanamkan kode jembatan yang tepat ke dalam MCU itu sendiri (jika ini memiliki fungsi USB asli).

Pendekatan langsung adalah dengan menggunakan papan USB-ke-UART eksternal dan menghubungkan UART ke MCU yang sedang dikembangkan. Atau, jika papan sudah memiliki konektor DB-9, ada dongle USB yang dapat dihubungkan langsung ke sana.

Dalam semua kasus kontrol UART asli MCU akan muncul di sisi host sebagai port COM virtual, melewatkan semua transformasi sinyal / protokol perantara. Itu sebabnya orang saat ini sering melewatkan perbedaan antara jembatan USB-ke-UART dan port COM.

Ale..chenski
sumber
3

Ini sangat membingungkan, tetapi Anda tidak perlu khawatir tentang hal itu. Pertama, pikirkan UART yang merupakan istilah umum, tetapi pikirkan satu yang menghasilkan protokol dengan bit mulai, satu atau dua bit stop, 7 atau 8 bit data, dan terkadang paritas yang genap atau ganjil; itu dapat bervariasi dari sana yang membuatnya jauh lebih buruk.

UART berada pada level TTL, apa pun artinya. Dulu 5 V dan sekarang 3,3 V, 1,8 V atau apa pun; mungkin TTL adalah istilah yang salah. MAKA Anda memiliki / memiliki RS-232, RS-422, dll. Ini adalah standar TEGANGAN DAN PIN, bukan standar protokol. Tidak benar mencampur istilah dan mengatakan RS-232 ketika Anda maksud semacam UART.

Kembali pada hari UART Anda berada di motherboard Anda dan Anda menginginkan semacam konektor ke dunia luar dengan tingkat tegangan yang pada saat itu masuk akal dan semacam pinout / kabel standar. Jadi standar 25 dan 9 pin yang populer sering ditemukan untuk berbagai periferal, dan di dunia PC Wintel ini disebut port komunikasi atau kadang-kadang port serial.

Tentu, port yang membawa data serial dapat dan disebut port serial, SPI, I²C, MDIO, UART, HDLC, SDLC, dll., Dan mungkin bahkan USB dan SCSI; Anda bisa menjadi gila dengan ini. Biasanya port serial berarti beberapa pin yang bisa Anda dapatkan di UART.

Dunia Unix / Linux mengatakan ttybukannya com/ serial/ uart, tetapi itu adalah hal yang sama.

Sekarang ada IMPLEMENTASI. Anda dapat membeli beberapa chip UART dengan beberapa antarmuka di atasnya (ya, Anda dapat memiliki SPI UART, yang serial di kedua ujungnya, atau I²C UART atau bus khusus atau USB, dll.). Bahkan di masa lalu, UART memiliki beberapa bus di satu sisi yang akhirnya berkomunikasi melalui CPU. Hari ini kami memiliki FTDI dan vendor lain yang membuat solusi USB UART yang bagus, tidak membuatnya berbeda beberapa lapisan antarmuka antara perangkat lunak dan UART dan kemudian sisi lain dari UART memiliki beberapa antarmuka, baik itu TTL / level chip atau RS-232C atau RS-422, dll.

Arduino awal Anda sering menggunakan papan USB-to-UART FTDI yang juga memberikan daya ke Arduino. Beberapa memiliki kekuatan USB dan serial / UART pada papan Arduino itu sendiri dan kemudian yang terhubung di papan ke UART pada chip AVR (kesepakatan yang sama beberapa prosesor dengan beberapa lapisan bus untuk memungkinkan perangkat lunak untuk berkomunikasi dengan UART yang memiliki beberapa antarmuka di sisi lain itu, dalam hal ini pin di tepi AVR, pada level tegangan chip, TTL).

Karena fungsi UART tidak berubah dalam beberapa dekade, mengapa terminologi perangkat lunak atau bahkan aplikasi perangkat lunak berubah pada tingkat aplikasi? Tulis aplikasi Linux / Unix TTY 10-15 tahun yang lalu terhadap chip UART pada motherboard Anda, dan ada kemungkinan ia masih berfungsi hari ini dengan level USB to TTL atau level USB to RS-232C atau RS-422 atau pin apa pun / definisi level. Hal yang sama berlaku untuk Windows, dan saya memiliki kode yang lama yang masih berfungsi pada keduanya. Di dunia Windows, istilah COM digunakan.

Saya belum pernah menggunakan kotak pasir Arduino dalam beberapa saat dan jika demikian akan di Linux, tapi saya tidak akan terkejut jika program yang Jawa, jika saya ingat benar, adalah generik dan menggunakan nama sistem jadi ttyS2pada Linux dan COM2 di windows.

Membaca kembali pertanyaan Anda ini dapat melangkah lebih jauh, mengambil keuntungan dari jumlah perangkat lunak yang sudah ada yang menggunakan panggilan API ini. Sekali lagi selama beberapa dekade, tidak ada alasan mengapa Anda tidak dapat membuat porta virtual dalam perangkat lunak yang membawa data dua arah ini ke hampir semua hal yang dapat Anda pikirkan. UART ke Ethernet adalah yang sangat umum, dan di ruang server di mana server masih sangat banyak menggunakan port COM / TTY / RS-232, Anda dapat memiliki server terminal yang memiliki sejumlah antarmuka yang dapat Anda sambungkan ke sejumlah server, kemudian Ethernet di sisi lain, maka jika Anda memilih untuk tidak telnet, Anda dapat menginstal driver port COM virtual.

Maka aplikasi Anda di komputer Anda berpikir itu berbicara ke port COM, tetapi pada kenyataannya bahwa aliran byte melompat ke Ethernet kemudian memukul server terminal, MAKA, ke UART ke tingkat RS-232C (tetapi tidak harus pinout) kabel ke server dan kembali dengan cara yang sama.

Terkadang tidak ada alasan untuk benar-benar membuatnya menjadi UART nyata, untuk alasan apa pun memvirtualisasikan port COM sehingga perangkat lunak yang ditulis untuk panggilan API tersebut masih dapat berfungsi. Anda mungkin dapat berpikir tentang perangkat lunak perbankan kuno yang masih kita gunakan yang memiliki terminal bisu ke antarmuka UART yang mungkin kembali pada hari itu bawaan atau masuk ke modem untuk akhirnya server. Anda dapat membuatnya agar perangkat lunak tetap berfungsi, melalui berbagai jumlah emulasi termasuk port COM virtual yang saat ini kemungkinan besar hanya menurunkan Ethernet ke server sebagai aliran serial (misalnya TCP / IP).

old_timer
sumber