Gerçekten bir “USB iletişim protokolü” var mı?


24

Wikipedia'ya göre , USB:

Bilgisayar ve elektronik cihazlar arasında bağlantı, iletişim ve güç kaynağı için veriyolunda kullanılan kabloları, konektörleri ve iletişim protokollerini tanımlar.

Ama gerçekten bir "USB iletişim protokolü " var mı? Benim anlayışım şudur:

  1. Bir USB cihazını makineye bağlarsınız (örneğin, Ubuntu veya herhangi bir Linux türü)
  2. Linux, bu aygıtın aygıt sürücüsünü bulur (bir şekilde - eğer biliyorsanız bonus !) Ve yükler
  3. Cihaz şimdi altında bağlı /dev/theDevice
  4. Kullanıcı alanı uygulamaları artık okuyabilir / yazabilir /dev/theDeviceve sürücü düşük seviye IO'yu temeldeki cihaza / donanıma bağlar

Bana göre, bu akışta hiçbir yerde bir "USB iletişim protokolü" görünmüyor. Anlayışım doğruysa, USB sadece PC ile cihaz arasındaki elektrik kablosudur.

Burada yanlış mıyım? USB, yukarıdaki debinin altını çizen bir çeşit düşük seviye protokolü kullanıyor mu? Eğer öyleyse, nedir ve 30.000 fitlik bir bakış açısıyla nasıl çalışıyor?


45
"sürücü düşük seviye IO'yu temeldeki cihaza / donanıma aktarır" bunu standartta olan iletişim protokolünü kullanarak yapar.
EBGreen

29
Oh ... "Gerçekten bir" USB iletişim protokolü "var mı?" Sorusunu okudum. Yani cevap evet olurdu. Gerçek iletişim protokolünün ne olduğunu bilmek istiyorsanız, sadece standardı okuyun. Veya bağladığınız wiki sayfasındaki 11. bölümü okuyun.
EBGreen

6
"USB, sadece PC ile cihaz arasındaki kablo ve elektrik bağlantısıdır". Ethernet kablosu, sadece PC ile bir anahtar / yönlendirici / arasında bir kablodur. Yine de, bu kablo üzerinden iletişim kurmak ve onunla faydalı şeyler yapmak için kullanılan bazı protokoller var.
ysdx

13
"Linux, bu aygıtın aygıt sürücüsünü bulur" Linux'un hangi aygıtın diğer ucuna bağlı olduğunu algılayabileceğini nasıl düşünüyorsunuz? Ortak bir protokol belki de?
spender

4
@Ramhound "Bu iletişim protokolleri, en azından Ethernet durumunda standarttan bağımsızdır." Bu yanlış. Ethernet protokolleri (hem fiziksel hem de MAC katmanı), IEEE Ethernet standartları (özellikle, 802.3 standartları ) tarafından tanımlanır . RJ-45 konektörleri, ancak bu noktada artık Ethernet değildir. Bu, örneğin VoIP olmayan telefon sistemlerinde yaygın bir uygulamadır.
reirab

Yanıtlar:


47

Evet, bkz. USB protokolleri

Anladığım kadarıyla, USB spec karmaşık bir katmanlı protokol seti ve cihaz profili tanımlar.

Örneğin, USB aygıtları yığın depolama, klavye (veya İnsan Arabirim Cihazı, vb.) Gibi üst düzey şablonlara uyabilir ve genel bir aygıt sürücüsü tarafından yönetilebilir. Bazı USB aygıtları, işletim sistemi düşük seviye USB desteğinin aygıta özgü daha yüksek sürücü sürücülerine ihtiyaç duyduğunu algılayabileceği şekilde daha düşük düzeyde iletişim kurabilir.


30

Soru: Uygulamada düşük seviyeli bir USB iletişim protokolü var mı ve nedir?

Cevap:

Evet var, USB özelliği veri yolunun bit düzeyinde nasıl kullanıldığını tanımlayan USB protokolünü içeriyor . Bu, daha yüksek seviyeli protokollerin, yani yığın depolama, HID vb.

USB protokolünün nasıl çalıştığı hakkında ayrıntılı bilgi için, bu OSDev wiki yardımcı olur. USB protokolü başına çeşitli veri işlemlerini tanımlamak için dizi diyagramlarını kullanarak başka ilginç bir açıklama .

Bonus Soru: Linux, bu aygıtın aygıt sürücüsünü nasıl bulur ve yükler?

Bonus cevabı:

'Linux'ta USB etkin bir çekirdek kullanıldığında, USB spesifikasyonu nedeniyle donanım ve çekirdek aracılığıyla çalışan bir USB cihazı algılanacaktır . Donanım tarafında algılama, USB Host Controller tarafından yapılır. Daha sonra çekirdekte Ana Bilgisayar Denetleyici Sürücüsü devraldı ve kablodaki düşük düzeyli bitleri USB protokolü formatlı bilgilere dönüştürür. Bu bilgiler daha sonra çekirdekteki USB çekirdek sürücüsünde doldurulur. '

Linux bağlamında sorunuzla ilgili çok daha fazla ayrıntı ve netliğe sahip olan bu mükemmel opensourceforu makalesinden de alıntı yaptım .


7
Umarım "Bonus soru" senin için "Ödül" anlamına gelir.
dotancohen

@projectdp - Birincil referanslarınızdaki bilgilerin bir kısmını cevabınıza eklerseniz çok yararlı olur.
Ramhound

@Ramhound - Geri bildiriminiz için teşekkür ederiz, cevabımı daha faydalı bir şekilde yeniden yazdım. Kaynaklardan daha fazla bilgi eklemeye gelince, bunun sorularla alakalı olduğunu görmek ister misiniz?
projectdp

14

Neredeyse diğer tüm iletişim arabirimi türlerinde olduğu gibi, USB protokol yığını olarak uygulanır. Bu yığın içerisindeki tüm ya da çoklu cihaz tipleri için ortak olan seviyeler, hem uyumluluğu mümkün kılan hem de her cihazın yedek protokol tasarımı yapmasını önleyen USB standartları tarafından tanımlanır. Ayrıca, protokolün her katmanı, bir sonraki katmanın endişelenmeye gerek duymadığı ayrıntıları soyutlar. Bu nedenle, cihaza özel bir katman yazdığınızda, yalnızca A noktasından B noktasına kadar veri alan genel 'gönderme' ve 'alma' işlevlerine sahip olursunuz. bu nasıl olur. Ayrıca, protokol yığını içindeki düşük seviyeler, üstlerindeki katmana ortak bir arabirim gösterdiği sürece uygulamayı değiştirebilir. Bu şekilde, protokol yığınının bir kısmı değiştiğinde yığının geri kalanının mutlaka değişmesi gerekmez.Hangi protokol istifin daha düşük bir seviyesinde kullanılıyor? Genel olarak konuşursak, istifin arkasındaki her bir katman, bir mesaj gönderilirken, bir sonraki en yüksek katman tarafından üretilen kendi yükü alanı içinde üretilen mesajı içerecektir. Bir mesaj alındığında, her bir katman o katmanla ilgili kısmı soyar ve yükünü istifin üstündeki bir sonraki uygun katmana iletir. Bu sadece USB için değil, hemen hemen her iletişim veriyolu için de geçerlidir. Örneğin, TCP / IP / Ethernet yığını muhtemelen bunlardan en yaygın kullanılanıdır. Katmanların verildiği görevler genellikle sorumludur, OSI modeli gibi modellerde açıklanmıştır .

USB'de voltaj durumlarını / zamanlamasını / vb. Tanımlayan fiziksel bir katman protokolü vardır. Telin üzerinde ve nasıl yorumlanmaları gerektiği hakkında. Bu protokolün belli bir cihaza özgü olmayan USB standartlarının bir parçası olması gerektiği açıktır (özellikle de ev sahibi belirli bir USB portuna ne tür bir cihazın takılacağını bilmenin hiçbir yolu olmadığından).

Daha sonra, otobüste kiminle konuşabileceğini açıklamak için kullanılan bir otobüs yönetimi protokolü var. Bu OSI modelinde medya erişim katmanı olarak adlandırılır. USB'de bu katman hemen hemen "cihaz ana bilgisayar tarafından söylendiğinde iletebilir" şeklinde özetlenebilir, bu nedenle USB'de bu katmanda özellikle karmaşık bir protokol yoktur.

Daha sonra, bir veri paketini ve göndericiden alıcıya nasıl yönlendirilmesi gerektiğini açıklayan standart bir protokol var . Bu katmanın aynı zamanda USB standardının da bir parçası olması gerekir, böylece belirli bir aygıt türü aslında ana bilgisayar tarafından bilinmeden önce ne tür bir aygıtın takıldığını keşfetmek için ilk iletişimin gerçekleşmesi gerekir. Bu katmanda belirli bir kimliği olan her cihaza ek olarak, bir uç nokta kimliğinin USB'sinde de bir kavram vardır. Bu, herhangi bir cihazın standart USB yığını tarafından çoklanmış ve ayrılmamış çoklu USB uç noktalarına sahip olmasına izin verir, aynı şekilde soketler standart TCP / IP yığını ile çarpılır ve ayrılmaz. Bir uygulama bu uç noktaların her birini ayrı veri akışları olarak ele alabilir.

Son olarak, cihazın kendisi için tanımlanan protokol var. Aslında, her aygıt üreticisinin yeniden icat etmesi gerekmeyecek şekilde, toplu depolama aygıtları, fareler, klavyeler vb. Gibi yaygın kullanım durumları için USB standardının bir parçası olarak dahil edilen bazı önceden tasarlanmış olanlar olduğunu unutmayın. tekerlek. Ancak, daha karmaşık cihazlar bu katmanda kendi özel protokollerini tasarlamakta özgürdür. Belirli bir aktarım için bu katmanın çıktısı, önceki kattaki bir veri paketinin yükü olarak geçirilir. Yeterli derecede karmaşık cihazlar için, protokolün cihaza özel kısmının kendisinin birden fazla bağımsız katmana bölünebileceğini, ancak daha düşük seviyelerin bunu bilmesi veya ilgilenmesi gerekmediğine dikkat edin. Bilmeleri gereken tek şey, belirli bir bayt grubunu ana bilgisayardan belirli bir cihaz son noktasına veya belirli bir cihaz son noktasından ana bilgisayara geçirmeleri gerektiğidir. Yine, katmanlar arasındaki standart ara yüze sahip olmak kaygıların ayrılmasına izin verir, bu nedenle bir katmanın başka bir katmanın iç işleyişini umursaması gerekmez, ancak yalnızca hemen üstündeki katlardan hemen geçmesi veya alması gereken özel veriler yığını altında.


9

Aslında etkileşimde bulunan bir dizi ilgili iletişim protokolü vardır.

En düşük seviyede, bayt paketlerinin seri bağlantı üzerinden nasıl gönderildiğini açıklayan bir protokol vardır. Bu, tüm USB cihazları için ortaktır (ancak USB2 ve USB3 arasında farklıdır).

Gönderilen ilk paketlerden biri cihazdan kendini tanımlamasını ister. Tavuk ve yumurta problemini önlemek için, tanımlama protokolü tüm USB cihazlarında aynıdır. İşletim sistemi bu kimliği doğru sürücüyü yüklemek için kullanabilir.

Yine bir başka seviyede, USB bir veriyoludur, bu da birden fazla cihazın bant genişliğini paylaşması gerektiği anlamına gelir. Bu, her cihaza ne zaman konuşabileceğini ve ne zaman konuşmayacağını söyleyen bir protokol olduğu anlamına gelir. Tüm USB cihazlarının buna uyması gerektiğinden, bunu düzenlemek için ortak bir protokol kullanılır.

Son olarak, birçok basit USB cihazı o kadar basittir ki, bütün bir cihaz sınıfını tanımlayan ek protokoller vardır (fareler, klavyeler, depolama, ethernet adaptörleri, ...). Çoğu cihaz sıfır veya bu işlevsel protokollerden birini destekler.


"USB, birden fazla cihazın bant genişliğini paylaşması gerektiği anlamına gelen bir veriyolu" - OP, yalnızca sorusu için noktadan noktaya bir kurulum kullandığında göz ardı ettiği bir nokta. İki (veya daha fazla) USB cihazı, kabloyu ana bilgisayarla paylaşabildiğinden, bir protokol olması gerektiği sonucuna varabiliriz.
talaş

@ sawdust Hiç çalıştığından (hatta noktadan noktaya), bir protokol olduğu sonucuna varabiliriz. Örneğin, standart bir protokol olmasaydı cihaz keşfi mümkün olmazdı.
saat

Gerçekten de bir iletişim standardı var ve özünde seri bir iletişim dolayısıyla var Universal Serial Bus.
Ramhound

@Ramhound Evet, bellek arayüzleri dışındaki her şey için en modern veri yolu tasarımları gibi, USB de veri iletimi için seri diferansiyel çiftleri kullanır. USB 3 iki ek diferansiyel çiftini sahipken USB <= 2.0 (SuperSpeed yerleştirilmesi için SuperSpeed iletimi için bir başka 5 Gbps her yöne tam çift yönlü iletişim sağlayan,.), Tek bir diferansiyel çiftini vardı
reirab

Seri bir veri yolunu standardın çekirdeğine çekeceğimi düşündüm, yazar bu gerçeğin farkında değildi, dolayısıyla soru.
Ramhound

5

Muhtemelen cevabın bir kısmı “ iletişim protokolü ” ifadesinin tanımında yatmaktadır . Yaptığınız aynı kaynağa (Wikipedia) gitmek gibi yararlı bilgiler bulacaksınız:

  • İletişimin gerçekleşmesi için protokollerin üzerinde anlaşılması gerekiyor.
  • İletişim sistemleri, mesaj alışverişi için iyi tanımlanmış formatları (protokol) kullanır.
  • Bir protokol, iletişimin sözdizimini, anlamını ve senkronizasyonunu tanımlamalıdır.
  • Bir protokol bu nedenle donanım, yazılım veya her ikisi olarak uygulanabilir.

Bunu düşünmenin basit bir yolu, bir protokolün önceden tanımlanmış ve bir şeyler yapmanın yolu üzerinde anlaşmaya varılmış olmasıdır , bu durumda bir şey USB bağlantılı bir cihazın içine ve dışına veri taşımaktır. Donanım olarak her pimin önceden tanımlanmış bir voltaj seviyesi ve kullanım protokolü vardır, her cihazın her pimi için önceden tanımlanmış bir kullanım protokolü vardır ve her veri paketi önceden tanımlanmış bir sözdizimi ve veri formatına sahiptir. Ayrıca bir iletişim el sıkışması protokolü dahil edilmiştir. Toplu olarak, bunlar USB aygıtlarını, yani USB protokolünü kullanmak için standartlar koleksiyonunun tüm parçalarıdır.USB Implementers Forum, Inc. üyeleri tarafından karar verilen (yani, tasarlanan, önerilen, tartışılan, gözden geçirilen ve en sonunda kararlaştırılan)

Yani evet, orada olan USB protokolü, daha doğrusu orada olan bir dizi önceden tanımlanmış ve USB protokolü üzerinde anlaşılan ler farklı bir USB kullanımlar için.


1
1. yöntem iletişim (en azından) içeren üç element: (1) kodlama / gönderme ve (2) (rasgele gürültü karşıt olarak) (3) _information_ kod çözme / alma. Bu 3 elementten herhangi biri eksikse işlem başarısız olur. Geri bildirim, ortam (kanal) ve diğerleri arasında bağlam gibi ek öğeler de mevcut olabilir. KAYNAK: Derecelerimden biri İletişim Çalışmaları alanında.
OMY

1
2. SETI olduğu değil ne hakkında olduğunu, iletişim konusunda keşif ve keşif . Gerçek bir üretilmiş sinyal tespit etsek bile, onu anlayacağımıza veya gönderenle iletişim kurabileceğimize dair hiçbir garanti yoktur. KAYNAK: [SETI Misyonu] [1] [1]: seti.org/about-us
OMY

1
3. Çapraz tarayıcı uyumluluğu genellikle (a)protokolleri takip etmeyen tarayıcı üreticileriveya (b) hatalı uygulamalara neden olan kötü yazılmış protokoller (örneğin, kötü niyetli IE kutu modeli hatalarınıdikkate alırve ayrıca < quirksmode.org> bölümüne bakın). Bu yüzden artık HTML 5 ve CSS 3'e sahibiz, çünkü protokollerin iyileştirilmesi gerekiyordu. KAYNAK: Birkaç yıl boyunca kendi web geliştirme şirketime sahip oldum ve işletildim
OMY

1
4. İlk önce, frekansta "senkronize olan" radyo sinyalleri, AM (genlik modülasyonu) protokollerini kullanır. FM (frekans modülasyonu) radyo, bir zaman integraline "senkronizasyon" yapar. FM sistemleri için protokollerbilgiyi işlemek için sabit ve dinamik öğeleriçerir. Dinamik eleman,önceden tanımlanmış ve sınırlı bir frekans aralığı ile sınırlı olan değişken frekans ayarlarıdır.
OMY

1
Sabit elemanlar, sinyali modüle etmek ve demodüle etmek için kullanılan matematiksel formüllerdir. Bu formüller frekansları ne olursa olsun sabittir ve sinyali analog donanım veya dijital yazılım üzerinden işlemek için uygulanabilir. KAYNAK: Elektronik hobisi olarak kişisel deneyim ve ayrıca [Wikipedia] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
OMY
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.