Sejauh pemahaman saya tentang port komputer berjalan,
- Port serial adalah plug 9 pin seperti yang ditunjukkan di sini dan juga disebut port COM.
- 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.
Jawaban:
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.
sumber
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.
sumber
type file.txt > lpt1
tanpa 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?copy con:filename.txt nul
berfungsi dengan baik, persis sama dengancopy 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 masalahcopy file.txt c
(haruskah saya menyalin file ke direktori saat ini di drive c, atau ke file bernama "c" di direktori saya saat ini?) .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".
sumber
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.
sumber
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
tty
bukannyacom
/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
ttyS2
pada 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).
sumber