Bagaimana cara USB 2.0 menghindari tabrakan?

33

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?

VortixDev
sumber
2
Anda mungkin juga tertarik untuk melihat hal-hal seperti CSMA / CD, yang bagaimana hal itu diselesaikan dalam konteks lain
PlasmaHH
1
Pasangan transmisi / penerimaan terpisah tidak menyelesaikan semua konflik. Bayangkan Anda memiliki pendrive dan modem, mereka berdua ingin mengirim beberapa data ke host, sehingga mereka berdua mulai mentransmisikan. Dimana? Pada pasangan yang sama: host menerima. Konflik masih ada. Ini bukan cara kerja USB, tapi ini tepatnya cara kerja Ethernet 10/100: setiap arah memiliki pasangannya sendiri tetapi lampu "tabrakan" pada hub terus berkedip.
Agent_L

Jawaban:

67

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.

peufeu
sumber
3
Penjelasan yang bagus, dan perbandingan yang sangat pas dengan FireWire (dan yeah, mari kita membangun jaringan arbiting berbasis token untuk ... secara realistis, paling banyak 5 perangkat di bus).
Marcus Müller
3
Ini jawaban yang bagus, tapi saya pikir akan lebih lengkap jika Anda menyebutkan enumerasi. Menemukan perangkat apa yang terhubung ke jaringan dinamis tanpa kemampuan arbitrase (seperti jaringan multi-master) adalah masalah non-sepele, dan dalam banyak hal mendefinisikan mengapa USB tidak dapat menggunakan topologi bus yang sebenarnya.
Jon
Terima kasih;) Saya tidak tahu detail mengerikan tentang enumerasi dari sisi tuan rumah. Tapi IMO alasan sebenarnya USB seperti ini adalah bahwa itu dirancang pada pertengahan 1990-an dan pada saat itu mikrokontroler lebih mahal hari ini, dan cara untuk perangkat murah adalah membuat mereka sebodoh mungkin dengan sesedikit mungkin RAM dan kode mungkin. Selain itu, itu bekerja dengan sangat baik, itu agak memukul sweet spot.
peufeu
5
Salah, USB adalah bus . Itu hanya memiliki topologi yang berbeda (bintang) sebagai lawan dari bus "linear" yang lebih akrab. Semua transaksi host USB 2.0 (HS) disiarkan di semua segmen bintang, sehingga tidak jauh berbeda dari bus "linear". Mirip dengan bus linier, semua perangkat melihat aktivitas bus hampir bersamaan. Satu-satunya perbedaan adalah bahwa respons perangkat tidak terlihat oleh beberapa perangkat lain yang duduk di cabang yang berbeda.
Ale..chenski
2
@rahuldottech itu cukup keren jika berfungsi , tetapi FireWire jauh kurang dapat diandalkan daripada USB, khususnya plug & play WRT. Dan dengan USB, Anda dapat dengan mudah menghubungkan banyak drive ke satu port dengan menggunakan hub tambahan. Ada tradeoff kinerja, tetapi keandalan dan kemudahan mengalahkan.
leftaround sekitar
18

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".

Ale..chenski
sumber
1
Not familiar with the USB protocol, so how does the host know the correct device responded?
Derek 朕會功夫
@Derek朕會功夫, host knows this because this is the only device that is supposed to respond, no one else will respond. USB 2.0 transactions are "atomic", there is no deferred responses, everything relies on time-out. No timely response (uncompleted transaction) will result in re-try of it.
Ale..chenski
Untuk menindaklanjuti, pertanyaan saya adalah bahwa karena setiap perangkat terhubung ke bus yang sama, apa yang menghentikan saya dari berpura-pura menjadi perangkat lain yang juga terhubung?
Derek 朕 會 功夫
7
@Derek 朕 會 功夫: Tidak ada. Itu sebabnya Anda tidak mencolokkan kunci USB acak yang Anda dapatkan dari pasar off-street. Anda tidak bisa mempercayai mereka.
Lightness Races dengan Monica
7
@Derek朕會功夫, malicious intent aside, a USB device has to accept an address during enumeration, and another device will have a different address, all controlled by host. This is no different than when several memory modules are connected to a parallel bus, but each module responds only to address decoder/ chip select. And if two USB devices would accidentally respond (say, host screwed up with address assignment), there will be a mess of collisions on the bus, and no packet will pass CRC (which is attached to every USB token), and corresponding port will be disabled due to massive errors.
Ale..chenski