Melihat pin wadah USB 3.0, saya dapat melihat bahwa ada pasangan transmisi dan penerima yang terpisah, namun untuk USB 2.0 hanya ada satu pasangan pin "data". Bagaimana cara USB 2.0 memastikan bahwa perangkat tidak berkomunikasi secara bersamaan?
Melihat pin wadah USB 3.0, saya dapat melihat bahwa ada pasangan transmisi dan penerima yang terpisah, namun untuk USB 2.0 hanya ada satu pasangan pin "data". Bagaimana cara USB 2.0 memastikan bahwa perangkat tidak berkomunikasi secara bersamaan?
Jawaban:
USB benar-benar master-slave. Perangkat tidak mengirim kecuali tuan rumah menyuruhnya mengirim.
Bahkan yang disebut mode "interupsi" benar-benar polling: misalnya, setiap 8 milidetik (atau kurang jika Anda mendapat gamer mouse), PC menanyakan mouse "apa posisi Anda" dan mouse itu menjawab.
Sama jika Anda memiliki antarmuka serial-USB misalnya. Ketika antarmuka menerima data pada garis serial, itu tidak akan mengirimkannya ke PC. Sebaliknya ia akan menunggu PC untuk memulai transaksi dan meminta data.
Halaman web ini memiliki penjelasan yang bagus tentang paket yang dipertukarkan. Pada dasarnya, perlu diingat bahwa USB diimplementasikan untuk memungkinkan perangkat yang paling bodoh dan termurah berfungsi, yang berarti sebagian besar kecerdasan ada di host, host usb controller, OS, dan driver. Ini sangat jelas ketika membaca spec.
Firewire (misalnya) memiliki filosofi yang sama sekali berbeda, jauh lebih kuat, multi-master sehingga perangkat dapat berbicara satu sama lain tanpa bantuan dari host / master. Ini sebenarnya jauh lebih dekat dalam filosofi untuk sesuatu seperti token ring dengan transfer isochronous yang ditampar di atas, daripada ke USB. Namun "multi master" berarti itu memerlukan mikrokontroler yang kuat di perangkat, menjalankan tumpukan perangkat lunak yang kompleks. Karena itu lebih mahal, dan karena itu terbatas pada produk mahal seperti camcorder dan penutup hard drive yang cepat. Mouse firewire tidak masuk akal, itu akan terlalu mahal. Itulah salah satu alasan mengapa FireWire gagal.
Dalam kerangka USB perangkat tidak dapat berkomunikasi secara bersamaan, karena mereka hanya "berbicara" ketika host USB "memungkinkan" mereka untuk berbicara. Dan host USB memungkinkan perangkat lain untuk "berbicara" hanya ketika protokol transaksi sekuensial dengan perangkat pertama selesai. Dan perangkat USB tidak memiliki sarana untuk "berbicara" sendiri, tidak ada mekanisme interupsi aktif di USB. Secara singkat, mekanisme penerapan disiplin ini adalah sebagai berikut.
Setelah perangkat USB 2.0 terhubung, host menghitungnya dengan menetapkan alamat unik untuk setiap perangkat.
Setiap transaksi di bus dimulai oleh host USB.
Header dari setiap transaksi USB membawa alamat perangkat tertentu. Bahkan ketika transaksi disiarkan melalui seluruh pohon USB (pada instance pengontrol host tertentu), hanya perangkat dengan alamat yang cocok yang akan menanggapi transaksi, dan mengambil data, atau merespons dengan data.
Tautan "mitra" kemudian akan mengirim pemberitahuan ke arah dari siapa yang menerima data dengan sukses. Seluruh transaksi mengikuti protokol yang ditetapkan dengan urutan token, batas waktu, dan kode koreksi kesalahan yang ditetapkan, untuk memastikan integritas transaksi.
Semua perangkat lain hanya mendengarkan dan mengabaikan lalu lintas yang tidak diarahkan ke mereka.
Itu saja, itu adalah antarmuka "setengah dupleks".