Kablo ilk bağlandığında ne yapılacağını açıklayan USB özellikleri tam olarak nerede?


15

Bu yüzden USB.org sitesinde bulunan USB 2.0 özellikleri hakkında bilgim var .

Biraz tembel ve sabırsızım. Birisi bana USB kablosu bağlıyken çevrebirim cihazımdan tam olarak ne beklendiğini bulmak için nereye gideceğim söyleyebilir mi?

Örneğin, çevresel aygıtım bir yazıcıysa, diğer uçtaki bilgisayara bir yazıcının (sanırım belirli bir model açıklamasına sahip) yeni bağlandığını nasıl anlarım? Bilgisayarda, yazıcı sürücüsü yazıcıya hangi USB bağlantı noktasının bağlı olduğunu nasıl bilir?

Uygulamam aslında USB MIDI. Bu USB-MIDI belgesini de aldım, ancak daha temel USB protokolü ile eksikim.

Sadece insanların bilgisi için kullandığım USB yongası FTDI FT220x ve bir ADSP-21479 SHArC'nin SPI'sine bağlı. Şimdi bunu sadece PC'yi (TeraTerm çalıştıran) "konsol" olarak kullanan metin iletişimleri için kullanıyoruz . SPI bağlantı noktasını kurar ve FTDI çipine bağlanan koda erişebilir, ancak herhangi bir ilk iletişimi yapan bir kod yoktur. FT220x'in PC'ye ilk bağlandığında ne yaptığını bilmiyorum.

Okumak ve öğrenmek için mutsuz değilim, ama nerede okumaya başlayacağımı bilmek istiyorum ve 100 MB'lık bir USB spesifikasyonu ateş etmek için çok büyük bir hedef. Eyleme geçirilebilir yardım için herkese içten teşekkürler.


1
Yani FTDI FT220x'in perde arkasında ne yaptığını merak ediyorsun, değil mi? FTDI sizin için birçok USB işini üstlendiğinden, yapmanıza izin vereceği bazı sınırlamalar da vardır. FT2232H ailesini bir süre kullandım, bildiklerimi açıklamaya çalışacağım ...
MarkU

Sonunda yapmaya çalıştığım, TeraTerm çalıştıran PC'ye metin ileri geri göndermek için yeterince akıllı olan bu USB bağlantı noktasını kullanmaktır, yapmayı umduğum şey USB MIDI yapmak için aynı USB konektörünü kullanmaktır. nasıl " 32-bit pakete veri paketlemek" anlamak gerekiyor , ama (ve hala düşünmek) diğer ucunda bu bir USB MIDI cihazı olduğunu söyleyen bazı protokol olması gerektiğini düşündüm. (Şimdiye kadar, sadece USB temelleri üzerinde bir
tutuşum yok

Yanıtlar:


21

USB'nin, USB 2.0 Spesifikasyonu'nda açıklanan çeşitli katmanları vardır . OSI katmanlı ağ modelini biliyorsanız, bunu şöyle düşünebilirsiniz:

  • Oturum katmanı = Bölüm 10 USB Ana Bilgisayar Donanım ve Yazılımı (aygıt sürücüleri)
  • Aktarım katmanı = Bölüm 9 USB Aygıt Çerçevesi
  • Ağ katmanı = Bölüm 8 Protokol Katmanı (bit akımı)
  • Veri Bağlantı katmanı = Bölüm 7 Elektrik (devre)
  • Fiziksel katman = Bölüm 6 Mekanik (kablo ve konektör)

Kavramsal olarak USB, IN (ana bilgisayara) veya OUT (ana bilgisayardan) olabilen Endpoints adı verilen veri akışlarına dayanır . Her cihaz, kontrol ve durum için kullanılan Bitiş Noktası 0'a sahiptir. Bir cihazın uygulama verileri için ek uç noktaları olabilir. Her uç nokta bir FIFO tamponu gibi davranır.

Veriler bir uç noktaya Toplu olarak aktarılır (TCP / IP gibi, her baytın geldiği ve doğru sırada olduğu gibi) veya Eşzamanlı (UDP / IP gibi, taze olduğu garanti edilir ancak paketleri düşürebilir) olarak aktarılır. Ana bilgisayar tarafından gerçekten sorgulanan yanıltıcı olarak adlandırılan " Kesme " aktarım türü var.

USB 2.0 veri bağlantısı için bir diferansiyel çifti kullanır. Bu, USB 2.0 spec bölüm 7 kapsamında olduğu için fazla ayrıntıya girmeyeceğim. Genel olarak PCB düzeninde, bunu eşleşen uzunluk, diferansiyel çifti olarak ele alıyoruz ve USB PHY (Fiziksel ne olursa olsun gerekli seri dirençleri koyuyoruz) Interface) kullanılıyor. USB çevre birimi, ana bilgisayara yüksek hızlı veya düşük hızlı bir çevre birimi olduğunu bildirmek için D + veya D hatlarından birinde yüksek değerli bir direnç kullanır.

USB ana bilgisayarı bir aygıtın varlığını keşfettikten kısa bir süre sonra, ana bilgisayar aygıttan bir grup tanımlayıcı ister . Bu, FTDI çipi tarafından perde arkasında halledilir. Tanımlar Bölüm 9.5'te açıklanmaktadır . Bunlar Cihaz Tanımlayıcı , Yapılandırma Tanımlayıcı , Arayüz Tanımlayıcılar , Uç Nokta Tanımlayıcılar , Dize Tanımlayıcıları içerir , hatta HID Rapor Tanımlayıcıları'nı içerir .

Cihaz Tanımlayıcı USB içeren VID (Vendor Identification) ve PID (Ürün Belirleme) sayılar. İşletim sistemi, bu aygıt için hangi aygıt sürücüsünün kullanılacağını belirlemek için bu sayı çiftini (VID_PID) kullanır. VID numarasının USB uygulayıcıları forumuna üye olarak verildiğini unutmayın, bu nedenle bireysel bir mucitseniz bu bir sorun olabilir.

Ek olarak, klavye / fare / vb. İçin bir miktar genel giriş ve ayrıca herhangi bir genel giriş / çıkış sağlayan HID (İnsan Arabirim Aygıtı) sınıf sürücüsü vardır. HID'in bir avantajı, özel bir aygıt sürücüsü sağlamayı gerektirmemesidir, ancak verimi özel bir toplu sürücüye kıyasla biraz sınırlıdır. HID tanımlayıcıları hakkında başka bir spesifikasyon belgesi daha vardır ; ve belirli bir insan arayüzlü cihazda bulunan çeşitli özellikleri tanımlayan tüm kod numaralarını detaylandıran bir HID Kullanım Tablosu belgesi .

FT220X veri sayfası gibi FTDI yongası USB "seri arayüz motoru" sağlar (SPI seri veya RS232 seri ile karıştırılmamalıdır). Bu, bölüm 6, 7 ve 8'de açıklanan düşük seviyeli şeylerin çoğunu halleder.

FTDI, tanımlayıcılara giren bilgileri biraz içermek için bir EEPROM (FT2232H'de offchip, FT220X üzerinde çip üzerinde) kullanır. VID / PID değerlerini özelleştirebilir ve özel açıklama dizeleri sağlayabilirsiniz.


6
Özeti beğendim. Birkaç hafta boyunca THE ENTIRE 2.0 spesifikasyonunu (hatırladığım şekilde 1000 sayfadan fazla) okumak zorunda kaldım çünkü tüm bu saçmalığı kendim çözmeliydim. Hoş bir deneyim değildi, söylemeliyim. (Benim durumumda HID kullanılamadı.) Konu hakkında da iyi kitaplar yok. Jan Axelson'ın USB'deki kitabından nefret ettim ve kitabını bu işi sıfırdan gömülü bir mikro olarak yapmaya çalışan biri için "neredeyse tamamen yararsız" olarak değerlendirdim. Aslında çoğunlukla değersizdir. Bir uygulayıcı (özel donanım) için iyi bir kitap biliyorsanız, bir başlık duymaktan mutluluk duyarım! +1
jonk

1
Op'un potansiyel pazarına bağlı olarak VID / PID en büyük zorluktur. Axelsons metodolojisini kullanmak, VID'sini (kendiniz için 3,5k dolara mal olan) kullanabilir ve bir veya daha fazla PID'sini ücretsiz olarak talep edebilirsiniz. Ayrıca Microchip / Atmel, FTDI ve TI (VID'lerine göre) gibi kuruluşlardan PID talep edebilirsiniz. En iyi kitap IMO Intels "örnek olarak USB tasarımı", dişte biraz uzun, ancak USB 2.x için iyi. Ne yazık ki kod örneklerinin çoğu, revizyonları nedeniyle Visual Studio'daki değişiklikler nedeniyle kesiliyor.
Jack Creasey

1
Hobist için VID / PID'ye erişmenin en iyi yolu LUFA (ücretsiz) kullanmaktır: fourwalledcubicle.com/files/LUFA/Doc/130303/html/… ..... bunlar ticari üründe kullanılamaz ancak çarpışmaları büyük ölçüde kontrol edebileceğiniz ev / demo kullanımı için iyidir.
Jack Creasey

1
PS. Harika bir giriş, "Gömülü USB tasarımını örnek olarak kullanmaktır: FTDI'nın yayınladığı: ftdichip.com/Support/Documents/TechnicalPublications/… ... bunun birçok yararlı örneği vardır (elbette FTDI cihazlarına dayanarak) ve tüm ilgili PSOC denetleyicilerinin kullanımı da dahil olmak üzere çalışma dosyaları
Jack

1
USB cihaz kendi kendine güç alıyorsa, D + veya D-pullistörünü uygulamadan önce VBUS voltajının algılanmasını beklemesi gerektiğini unutmayın. Bunun üzerine sertifikasyonda başarısız oldum.
Adam Haun

4

USB "iş ortaklarının" (bir ana bilgisayar ve bir cihaz) davranışı ve etkileşimi USB spesifikasyonuna dağılmıştır. Bazı temelleri almanın en iyi yolu Bölüm 10 ve 11'deki olası (zorunlu) cihaz durumlarını (Şekil 9-1) ve Ana Bilgisayar (ve Hub) çerçevesini açıklayan "cihaz çerçevesi", Bölüm 9'a bakmaktır. protokol ayrıntıları (borular / işlem türleri / soyut OSI protokol katmanları, PCB düzeni, vb.), bağlantı noktası durum diyagramı incelenerek ilk etkileşimde daha iyi bir kavrama elde edilebilir (Şekil 11-10).

Esasen, ana bilgisayar ve cihaz arasında kablo bağlı değilse, ana makine bağlantı noktaları "Güç Durumunda" (VBUS AÇIK), ancak "Bağlantı Kesildi" durumundadır. D + ve D telleri 15k aşağı çekmelerle alçak tutulur.

Kablo bağlandığında, VBUS aygıta girer. Cihaz bağlandığını algılar ve D kablolarından YÜKSEK birini, FS / HS cihazı ise D + ve LS cihazı ise D- yi çekerek bir "bağlantı" olayı sinyali verir.

Belirli bir bağlantı noktasındaki D +/- kablolarını çekmek, ana bilgisayar yazılımına "bağlantı noktası durum değişikliği" bildirerek bir kesinti verir. Ana bilgisayar yazılımı (genellikle ehci.sys) daha sonra söz konusu sunucuda "bağlantı noktası sıfırlama" dizisini başlatır port. "USB bağlantı noktası sıfırlama" başarıyla tamamlandıktan sonra, ana bilgisayar bağlantı noktası USB iletişimi için etkinleştirilir. Bağlantı noktası etkinleşir (çerçeve paketleri dışarı akmaya başlar).

Ana makine, USB protokolünü kullanarak bu cihaza benzersiz bir adres atar ve "cihaz tanımlayıcısı" nı okur. Bu, "aygıt numaralandırma" işlemini başlatır. Aygıt tanımlayıcı, hangi aygıt sınıfına ait olduğu (HID, COM, MIDI, Yazıcı vb.) Ve söz konusu aygıtın VID / PID'si ile bir dizi başka bilgi hakkında bilgi içerir, bkz. Tablo 9-8.

Aygıt sınıfı ve VID / PID'yi aldıktan sonra, ana bilgisayar yazılımı bu bilgileri aygıt kayıt defterinde eşleştirmeye çalışır ve genel bir sürücü veya satıcıya özgü (varsa) ilgili DEVICE sürücüsünü yükler. Aygıt sürücüsü daha sonra "aygıt yapılandırması" ayarıyla biten aygıt arabirimini seçerek numaralandırma işlemini tamamlar. Açıkçası, tüm paketler etkin tüm bağlantı noktalarına yayınlansa bile , tüm USB iletişimi yalnızca bu bağlantı noktasının arkasında tanınır .

Yukarıdaki USB bağlantı protokolünün genel çerçevesidir. Verileri belirli bir amaç için (MIDI gibi) paketlemek farklı bir öyküdür ve sistem uygun cihaz sınıfına sahipse uygulama düzeyinde veya aygıt sürücüsü düzeyinde işlenir. Yerel MIDI iletişimi almak için aygıtın bu sınıfın tanımlayıcısında olması ve tüm MIDI sınıfı tanımlarını izlemesi gerekir .

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.