Ini semua berkaitan dengan arbitrase. Sistem apa pun yang memerlukan banyak perangkat untuk dihubungkan membutuhkan cara untuk menentukan siapa yang harus berbicara kapan. Ada skema berbeda seperti yang Anda harapkan tergantung pada aplikasi.
Contoh umum - dalam jaringan kami memiliki banyak node yang saling berbicara satu sama lain. Ini dilakukan oleh setiap node yang memiliki alamat (misalnya alamat IP), dan ketika sebuah node ingin berbicara dengan node lain, ia mengirimkan paket ke alamat itu. Anda kemudian memiliki perangkat seperti router yang membawa paket yang masuk pada beberapa port dan meneruskannya ke port yang benar. Arbitrase dilakukan menggunakan memori untuk menyimpan paket sampai port tujuan bebas.
Sekarang ke USB. Ini sebenarnya jauh lebih sederhana daripada jaringan karena tidak semua node dibuat sama. Anda memiliki dua macam, host, dan titik akhir. Hanya ada satu host, tetapi bisa banyak endpoint. Dalam hal ini arbitrase jauh lebih mudah karena hanya port host yang diizinkan untuk berbicara sesuka hati. Titik akhir hanya diperbolehkan untuk berbicara ketika diminta oleh tuan rumah , dan tuan rumah hanya pernah berbicara ke satu titik akhir pada suatu waktu.
Untuk paket endpoint host ->, hub USB hanya meneruskan permintaan dari host ke semua titik akhir. Karena semua titik akhir memiliki alamat, hanya alamat tujuan yang dialamatkan yang akan melakukan apa pun dengannya (mis. Merespons), semua yang lain akan mengabaikan paket tersebut.
Untuk paket endpoint-> host, host pertama-tama mengirim paket ke titik akhir spesifik berdasarkan alamat untuk mengatakan "Anda bisa bicara sekarang", dan kemudian titik akhir itu harus segera mengirim respons. Karena hanya satu titik akhir yang diizinkan untuk berbicara pada waktu tertentu, hub USB hanya akan merutekan paket dari port mana saja yang menanggapi permintaan dari host.
Dalam hal bagaimana host mengetahui perangkat apa yang terpasang, dan bagaimana titik akhir mendapatkan alamat mereka, ini dicapai melalui penghitungan.
Semua port host dan hub memiliki resistor pull-down (15kOhm) pada garis D + dan D-. Ini menempatkan jalur data port tersebut ke dalam kondisi yang diketahui saat tidak ada perangkat yang terpasang, suatu keadaan di mana port tidak akan mengirim data apa pun melalui jalur D + / D- sama sekali.
Ketika perangkat terpasang, itu membuat dirinya dikenal dengan menghubungkan baik D + (kecepatan penuh) atau D- (kecepatan rendah) data ke VCC menggunakan resistor 1,5kOhm. Ini memicu acara enumerasi. Port kemudian akan memulai proses mengkonfigurasi perangkat dan menetapkan alamat. Jika Anda menyambungkan dua perangkat secara bersamaan, mereka akan disebutkan satu per satu .
Jika tidak ada hub, tuan rumah hanya berbicara ke perangkat baru dan memasangnya. Jika ada hub dalam sistem, itu adalah hub yang melaporkan perangkat baru terpasang . Jika hub melaporkan perangkat baru terhubung, tuan rumah akan memerintahkan hub untuk mereset perangkat baru dan memulai komunikasi. Selama reset, titik akhir diberi alamat default 0 (*). Host kemudian dapat berbicara ke titik akhir menggunakan alamat default, dan mengkonfigurasinya dengan alamat non-nol unik yang akan memungkinkannya untuk tahu kapan sedang diajak bicara.
(*) Karena hanya satu perangkat yang disebutkan satu per satu, alamat 0 akan selalu unik untuk perangkat yang baru dipasang.
Anda mungkin kemudian bertanya, "bagaimana saya bisa membuat semua perangkat berbicara pada saat yang sama?" Katakanlah Anda memiliki mouse, keyboard, dan flash drive yang semuanya terhubung ke hub USB yang sama. Kita semua tahu bahwa Anda dapat menggunakan mouse dan keyboard Anda secara bersamaan sambil juga menyalin file ke / dari flash drive Anda, tetapi jika hanya satu perangkat yang dapat berbicara pada satu waktu, bagaimana mungkin?
Nah, itu semua bermuara pada fakta bahwa beberapa ratus milidetik yang diperlukan otak Anda untuk menyadari bahwa Anda telah menekan tombol dan berharap layar untuk memperbarui adalah kekekalan bagi komputer. Antarmuka USB 2.0 dapat berjalan hingga 480Mbps (USB 3.1 dapat berjalan hingga 10Gbps!), Yang berarti bahwa meskipun tuan rumah hanya pernah berbicara dengan satu titik akhir pada waktu tertentu, ia membuat siklus di antara mereka begitu cepat sehingga Anda dapat katakan itu melakukannya.
Host USB: "Hei, mouse pada port 1, beri tahu saya jika Anda telah pindah. Ok sekarang keyboard pada port 2 apakah Anda punya tombol yang perlu dilaporkan? Sekarang Anda ada di port 3, flash drive, simpan data ini untuk saya. Adakah yang harus saya ajak bicara? Tidak, oke, tetikus pada port 1, beri tahu saya apakah Anda sudah pindah ... "
Manusia: "Oh, lihat, komputer memperhatikan saya baru saja menggerakkan mouse saya, menekan tombol pada keyboard saya, dan menyalin gambar ke flash drive, semuanya pada saat bersamaan!"
Perangkat host melacak alamat titik akhir mana yang digunakan dan akan mengirim paket ke masing-masing secara berurutan atau sesuai kebutuhan (yaitu ketika OS meminta akses ke perangkat tertentu). Jadi sementara itu tidak semua terjadi secara bersamaan, arbitrase begitu cepat sehingga komputer manusia tidak bisa membedakannya.