2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tässä artikkelissa käsitellään ohjeita USB-kaistanleveyden huolelliseen hallintaan. Jokainen USB-asiakasohjain on vastuussa käyttämänsä USB-kaistanleveyden minimoimisesta ja käyttämättömän kaistanleveyden palauttamisesta käytettävissä olevan kaistanleveyden joukkoon mahdollisimman nopeasti.
Uskomme, että USB 2.0:n nopeus on 480 Mbps, 12 Mbps ja 1,5 Mbps, mikä vastaa vastaavasti suurta nopeutta, täyttä nopeutta ja hidasta nopeutta. Mutta itse asiassa USB 2.0:n kaistanleveys on myös yksi Tämän artikkelin lähtökohdista USB 3.0 näyttää Tämä lievittää kaistanleveysongelmaa, mutta kaistanleveysongelma ei ole riittämätön yläraja, vaan aikataulutusongelma.
Kilpailu USB-väylän kaistanleveydestä tulee useista lähteistä, mukaan lukien laitteistot ja ohjelmistot. On vaikea ennustaa tarkasti USB-asiakasohjaimen käytettävissä olevan kaistanleveyden määrää. USB-isäntäohjaimet vaativat tietyn määrän kaistanleveyttä toimiakseen. Tarvittava määrä riippuu siitä, onko säädin nopea. Se vaihtelee järjestelmästä toiseen. Nopeilla nopeuksilla toimivien USB-keskittimien on joskus muutettava tapahtumia nopeiden ylävirran porttien ja alavirran hitaampien laitteiden välillä, ja tämä käännösprosessi kuluttaa kaistanleveyttä. Kuitenkin se, vaatiiko tapahtuman muuntaminen kaistanleveyttä, riippuu yhdistetyn laitteen tyypistä ja laitepuun topologiasta.
Vakavin paine kaistanleveysresursseihin tulee yleensä USB-asiakasajureilta, jotka monopolisoivat kaistanleveyden. Järjestelmä jakaa kaistanleveyden saapumisjärjestyksessä. Jos ensimmäinen ladattu USB-ohjain pyytää kaikkea käytettävissä olevaa kaistanleveyttä, seuraavat ladatut USB-ohjaimet eivät salli kaistanleveyttä laitteilleen. Järjestelmä ei voi konfiguroida tai luetella laitetta. Koska luettelon epäonnistumisen syy ei ole ilmeinen, käyttökokemus on huono.
Joskus asiakasohjaimet kuluttavat käytettävissä olevan kaistanleveyden nopeiden keskeytyssiirtojen kautta. Mutta ylivoimaisesti yleisin skenaario on, että asiakasohjain varaa liian paljon kaistanleveyttä jatkuvaan siirtoon eikä pysty vapauttamaan sitä ajoissa. Järjestelmä säilyttää varatun kaistanleveyden, kunnes sitä pyytänyt ohjain sulkee päätepisteensä avaamalla toisen päätepisteen tai laite, jolle sille on varattu kaistanleveys, poistetaan. Järjestelmä ei varaa taattua kaistanleveyttä joukkosiirtoihin, joten joukkosiirrot eivät koskaan aiheuta luettelointivirheitä. Joukkosiirtolaitteen suorituskyky riippuu kuitenkin laitteelle varatun kaistanleveyden määrästä säännöllisiä (jatkuvat odotukset ja keskeytykset) siirtoja varten.
USB 2.0 -spesifikaatio edellyttää, että vakiolaitteiden oletusasetuksissa on nollakaistanleveyspäätepisteet. Tämä varmistaa, että laitteelle ei ole varattu kaistanleveyttä, ennen kuin toimintoohjain avaa ei-oletusrajapinnan, mikä auttaa estämään luettelon epäonnistumisia, jotka johtuvat liiallisista kaistanleveyspyynnöistä laitteen määrityksen aikana. Se ei estä asiakasohjaimia varaamasta liikaa kaistanleveyttä laitteidensa määrittämisen jälkeen, mikä estää muita laitteita toimimasta kunnolla.
Oikean kaistanleveyden hallinnan avain on, että jokaisen järjestelmän USB-laitteen, joka suorittaa jatkuvasti siirtoja, on annettava useita vaihtoehtoisia (Alt) asetuksia jokaiselle vakiopäätepisteitä sisältävälle liitännälle, ja asiakasohjaimen on käytettävä näitä Alt-asetuksia viisaasti. Asiakasohjaimien tulee ensin pyytää korkeimman kaistanleveyden käyttöliittymäasetusta. Jos pyyntö epäonnistuu, asiakasohjaimen tulee pyytää rajapinta-asetuksia yhä pienemmillä kaistanleveyksillä, kunnes pyyntö onnistuu.
Oletetaan esimerkiksi, että verkkokameralaitteessa on seuraava käyttöliittymä:
Liitäntä 0 (Oletusrajapinnan asetukset: oletusasetuksissa ei ole päätepisteitä, joiden vakiokaistanleveys ei ole nolla)
Jatkuva päätepiste 1: Paketin enimmäiskoko = 0 tavua
Jatkuva päätepiste 2: Paketin enimmäiskoko = 0 tavua
Liitäntä 0 Alt-asetus 1
Jatkuva päätepiste 1: Paketin enimmäiskoko = 256 tavua
Jatkuva päätepiste 2: Paketin enimmäiskoko = 256 tavua
Liitäntä 0 Alt-asetus 2
Jatkuva päätepiste 1: Paketin enimmäiskoko = 512 tavua
Jatkuva päätepiste 2: Paketin enimmäiskoko = 512 tavua
Verkkokameran ajuri määrittää verkkokameran käyttämään oletuskäyttöliittymäasetuksia alustuksen yhteydessä. Oletusasetuksissa ei ole vakio kaistanleveyttä, joten oletusasetusten käyttäminen alustuksen aikana välttää vaaran, että verkkokamera ei pysty luetteloimaan epäonnistuneen jatkuvan kaistanleveyden pyynnön vuoksi.
Kun asiakasohjain on valmis suorittamaan jatkuvia isokronisia siirtoja, sen tulisi yrittää käyttää Alt-asetusta 2, koska Alt-asetuksen 2 pakettikoko on suurin. Jos pyyntö epäonnistuu, kuljettaja voi yrittää toisen kerran käyttämällä Alt-asetusta 1. Koska Alt-asetus 1 vaatii vähemmän kaistanleveyttä, tämä pyyntö voi onnistua, vaikka ensimmäinen pyyntö epäonnistuisi. Useat Alt-asetukset sallivat kuljettajan tehdä useita yrityksiä ennen luovuttamista.
Kun verkkokamera tulee käyttämättömäksi, varattu kaistanleveys voidaan palauttaa käytettävissä olevaan kaistanleveyspooliin valitsemalla oletusasetukset uudelleen.
Käyttäjät voivat nähdä, kuinka paljon kaistanleveyttä USB-ohjain on varannut, tarkistamalla ohjaimen ominaisuudet Windowsin laitehallinnassa. Valitse ohjaimen ominaisuudet ja katso Lisäasetukset-välilehti. Tämä lukema ei ilmaise, kuinka paljon kaistanleveyttä USB-keskitin varaa tapahtuman kääntämiseen.
Laitehallintaominaisuus, joka ilmoittaa USB-ohjaimen kaistanleveyden käytön, ei toimi oikein Windows XP:ssä.
Suurin siirtokoko määrittää kovakoodatun rajan USB-ohjainpinossa. Näitä rajoja pienemmät siirtokoot voivat epäonnistua järjestelmäresurssien rajoitusten vuoksi. Vältä suuria siirtokokoja USB-siirroissa välttääksesi tämän tyyppiset viat ja varmistaaksesi yhteensopivuuden kaikkien Windows-versioiden kanssa.
USBD_PIPE_INFORMATION-rakenteen MaximumTransferSize-jäsen on vanhentunut. USB-ohjainpino jättää huomioimatta MaximumTransferSize-arvon komposiitti- ja ei-komposiittilaitteille.
Windows 2000:ssa USB-ohjainpino alustaa MaximumTransferSize-koon USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE. Asiakasohjaimet voivat asettaa pienemmän arvon laitetta määritettäessä. Komposiittilaitteissa toimintokohtaiset asiakasohjaimet voivat muuttaa putken MaximumTransferSize-arvoa vain muissa kuin oletusrajapinnan asetuksissa.
USB-siirron kokoa rajoittavat:
Siirron koon rajoittaminen MaximumTransferSize-toiminnolla ei vaikuta suoraan laitteen kuluttamaan kaistanleveyteen. Asiakasohjaimen on muutettava liitäntäasetuksia tai rajoitettava USBD_PIPE_INFORMATION-tiedoston MaximumPacketSize -jäsenessä asetettua enimmäispakettikokoa.
Paketin enimmäiskoon määrittää päätepistekuvaajan wMaxPacketSize-kenttä. Asiakasohjaimet voivat säätää USB-paketin kokoa valituissa liitäntäpyynnöissä laitteelle. Tämän arvon muuttaminen ei muuta laitteen wMaxPacketSize-kokoa.
Pyydetyn URB:n sisällä on putken USBD_PIPE_INFORMATION-rakenne. Tässä rakenteessa
Kun asiakasohjain antaa lukupyynnön, lähetyspuskurin on oltava paketin enimmäiskoon kerrannainen. Vaikka ajuri vaatisi vähemmän dataa kuin suurin paketin koko, sen on silti pyydettävä koko paketti. Siirto on valmis, kun laite lähettää enimmäiskokoa pienemmän paketin (lyhyt paketti).
Vanhemmissa ohjaimissa asiakasohjaimet voivat ohittaa tämän toiminnan. Tiedonsiirron URB:n TransferFlags-jäsenessä asiakasohjaimen on asetettava lippu USBD_SHORT_TRANSFER_OK. Tämän lipun avulla laite voi lähettää paketteja, jotka ovat pienempiä kuin wMaxPacketSize.
xHCI-isäntäohjaimissa USBD_SHORT_TRANSFER_OK jättää huomiotta joukkopäätepisteet ja keskeytyspäätepisteet. Lyhyiden pakettien lähettäminen EHCI-ohjaimella ei aiheuta virhetilaa.
EHCI-isäntäohjaimissa USBD_SHORT_TRANSFER_OK jätetään huomiotta joukko- ja keskeytyspäätepisteissä.
Jos UHCI- ja OHCI-isäntäohjaimissa USBD_SHORT_TRANSFER_OK ei ole asetettu joukko- tai keskeytyssiirtoihin, lyhyet pakettisiirrot pysäyttävät päätepisteen ja palauttavat siirron virhekoodin.
USB-ajurin pinoohjain asettaa paketin koolle eri rajoituksia kirjoitettaessa laitteeseen kuin lukittaessa laitteesta. Joidenkin asiakasohjaimien on usein lähetettävä pieniä määriä ohjaustietoja laitteidensa hallitsemiseksi. Tässä tapauksessa on epäkäytännöllistä rajoittaa tiedonsiirtoa tasakokoisiin paketteihin. Siksi ohjainpino ei anna datan kirjoittamisen aikana mitään erityistä merkitystä paketeille, jotka ovat pienempiä kuin päätepisteen enimmäiskoko. Tämän ansiosta asiakasohjain voi hajottaa suuret siirrot laitteeseen useiksi URB:iksi, joiden koko on pienempi tai yhtä suuri kuin maksimi.
Kuljettajan on lopetettava siirto enimmäiskokoa pienemmällä paketilla tai käytettävä nollapituista pakettia rajaamaan siirron loppu. Siirto ei ole valmis, ennen kuin ohjain lähettää paketin, joka on pienempi kuin wMaxPacketSize. Jos siirtokoko on täsmälleen maksimiarvon kerrannainen, kuljettajan on lähetettävä nollapituudella rajattu paketti päättääkseen siirron nimenomaisesti.
USB-määrityksen mukaisesti asiakasohjain on vastuussa tiedonsiirron rajaamisesta nollapituisilla paketeilla. USB-ohjainpino ei luo näitä paketteja automaattisesti.
Yhteensopivien USB 2.0- ja USB 1.1 -ajureiden on lähetettävä enimmäiskokoinen paketti (wMaxPacketSize) ja lopetettava lähetys enimmäiskokoa pienemmällä paketilla tai rajattava lähetyksen loppu nollapituisella paketilla. Siirto ei ole valmis, ennen kuin ohjain lähettää paketin, joka on pienempi kuin wMaxPacketSize. Jos siirtokoko on täsmälleen maksimiarvon kerrannainen, kuljettajan on lähetettävä nollapituudella rajattu paketti lopettaakseen siirron nimenomaisesti
Laiteohjain on vastuussa tiedonsiirron rajaamisesta nollapituisilla paketeilla USB-määrityksen edellyttämällä tavalla. Järjestelmän USB-pino ei luo näitä paketteja automaattisesti.