Usb-grensesnitt arbeidsprinsipp. Slik fungerer det: USB. USB fysisk og logisk arkitektur

La oss starte med et minimum:
inkluderer 18f2455 - bibliotek for den brukte MK
--
enable_digital_io () - bytte alle innganger til digital modus
--
alias Knapp er pin_B7 - siden vi har en knapp tilkoblet, vil vi deklarere den
pin_B7_direction = input - knappen fungerer for oss å gå inn
--
- én linje - og vi har alt du trenger for å jobbe med USB CDC
inkluderer usb_serial - bibliotek for å jobbe med usb
--
usb_serial_init () - --initialiser USB CDC
evig løkke- hovedsyklusen, utføres konstant
usb_serial_flush () - usb oppdatering. Denne prosedyren utfører alt nødvendig
- handlinger for å opprettholde en forbindelse med en PC
endeløkke

Ved å kompilere denne koden, skrive den resulterende HEX-filen til MK ved hjelp av en bootloader og starte enheten, kan du se hvordan en ny enhet er definert i systemet: Virtual com-port.

Nå som enheten allerede fungerer, vil vi lære den å kommunisere.

For å lese den mottatte byten er det en funksjon usb_serial_read ( byte ) : boolsk. Hvis det er en mottatt byte, lagrer den den i den angitte variabelen og returnerer ekte, ellers kommer den tilbake falsk.

Det er en prosedyre for å sende en byte usb_serial_data... Den er forkledd som en variabel, så for å sende en byte er det nok å tildele den verdien til den sendte byten.

La oss erklære en bytestørrelsesvariabel før hovedsløyfen, i hovedsløyfen vil vi sjekke for tilstedeværelsen av mottatte bytes, og, hvis noen, sende dem tilbake.

inkluderer 18f2455
--
enable_digital_io ()
--
alias Knapp er pin_B7
pin_B7_direction = input
--
--
inkluderer usb_serial
--
usb_serial_init ()
var byte kap - vi erklærer en variabel
evig løkke- hovedsløyfe
usb_serial_flush ()
hvis(usb_serial_read (ch)) deretter- hvis en byte mottas, vil den bli skrevet til kap
usb_serial_data = kap - send den mottatte byten tilbake
slutt om
endeløkke

Vi kompilerer, holder nede knappen, sjonglerer med strømforsyningen, starter bootloaderen, endrer fastvaren, kjører den.
Enheten ble oppdaget i systemet igjen, nå trenger vi programvare for å teste driften av enheten.

Selv om vi ikke har vår egen, bruker vi en ferdig terminal: Jeg brukte RealTerm-programmet.
Vi åpner porten med ønsket nummer og sender dataene.


Og vi får tilbake det vi sendte. Så alt fungerer som det skal.

Programvare

Så mikrokontrolleren vår er i stand til å motta bytes og umiddelbart sende dem tilbake. La oss nå skrive vår egen programvare for å kommunisere med ham (jeg skal bruke Delphi).

Vi oppretter et nytt prosjekt, sprer de nødvendige komponentene i skjemaet:
SpinEdit1 - for å spesifisere portnummeret
Knapp1 - for å opprette en tilkobling
Knapp 2 - for å koble fra tilkoblingen
SpinEdit2 - for desimalbyteinndata
Knapp3 - for å sende en byte
Memo1 - for å vise den mottatte informasjonen.

Som nevnt ovenfor må du jobbe med com-porten på samme måte som med en vanlig tekstfil: ved å bruke funksjonene CreateFile, WriteFile og ReadFile.

For ikke å gå inn på detaljer, la oss ta et ferdig bibliotek for å jobbe med en com-port: ComPort.

Vi henger den nødvendige oppgaven på hver knapp og får den endelige koden:

enhet Enhet1;

grensesnitt

Bruker
Windows, meldinger, SysUtils, varianter, klasser, grafikk, kontroller, skjemaer,
Dialoger, StdCtrl, Spin, ComPort;

Type
TForm1 = klasse (TForm)
SpinEdit1: TSpinEdit;
Knapp1: TBknapp;
Knapp2: TBknapp;
SpinEdit2: TSpinEdit;
Knapp 3: TB-knapp;
Memo1: TMemo;
prosedyre OnRead (Sender: TObject; ReadBytes: array of Byte);
prosedyre Button1Click (Avsender: TObject);
prosedyre Button2Click (Avsender: TObject);
prosedyre FormDestroy (Avsender: TObject);
prosedyre Button3Click (Avsender: TObject);
privat
(Private erklæringer)
Port: TComPort;
offentlig
(Offentlige erklæringer)
slutt;

var
Form1: TForm1;
num: heltall;
gjennomføring

Prosedyre TForm1.Button1Click (Avsender: TObject);
begynne
Port: = TComPort.Create (SpinEdit1.Value, br115200); // opprette en tilkobling
Port.OnRead: = OnRead; // lag en strøm for å lese de mottatte dataene
Button2.Enabled: = sant; // aktiver knappen for å lukke forbindelsen
slutt;

Prosedyre TForm1.Button2Click (Avsender: TObject);
begynne
Port.Free; // lukk forbindelsen
Button2.Enabled: = false; // deaktiver knappen
slutt;

Prosedyre TForm1.Button3Click (Avsender: TObject);
begynne
hvis Button2.Enabled deretter Port.Write ();
slutt;

Prosedyre TForm1.FormDestroy (Avsender: TObject);
begynne
hvis Button2.Enabled da
Port.Free;
slutt;

Prosedyre TForm1.OnRead (Sender: TObject; ReadBytes: array of Byte);
var
i: heltall;
begynne
for i: = Lav (ReadBytes) til Høy (ReadBytes) gjør // gå gjennom utvalget av mottatte bytes
begynne
Memo1.Text: = Memo1.Text + "." + InttoHex (ReadBytes [i], 2); // legg til HEX-verdien i vinduet
inc (antall); // telle antall mottatte byte
slutt;
hvis num> 10 så begynn
Memo1.Lines.Add (""); // vikle linjen
antall: = 0;
slutt;
slutt;

Vi starter, oppretter en forbindelse, sender bytes:

Så vår enkleste terminal er klar til å fungere med den enkleste usb-enheten.

Som du kan se, utføres lesing og skriving av dynamiske byte-arrayer.

Ved å behandle den mottatte informasjonen er det mulig å komponere nødvendig utvekslingsprotokoll som passer for den aktuelle oppgaven.

inkluderer 18f2455
--
enable_digital_io ()
--
alias Knapp er pin_B7
pin_B7_direction = input
--
--
inkluderer usb_serial
--
usb_serial_init ()
var byte kap
var byte Jeg - vi erklærer den andre variabelen
evig løkke- hovedsløyfe
usb_serial_flush ()
hvis(usb_serial_read (ch)) deretter- hvis en byte mottas, utfører vi de nødvendige handlingene
sak ch av - iterer over bytenummeret
0: usb_serial_data = 0xff
1: usb_serial_data = Knapp - Sendeknappstatus
ELLERS blokkere- hvis noe annet mottas
til 16 ved hjelp av Jeg Løkke- send 10 byte med data
usb_serial_data = ch + i - ch til ch + 15
endeløkke
endeblokk
sluttsak
slutt om
endeløkke

Tilleggsfunksjoner

Stopper du ved dette får du en vanlig artikkel med en detaljert beskrivelse av et eksempel på bruk av biblioteket, som det finnes nok av på Internett. Derfor vil jeg legge til litt mer utdypende informasjon.

Forenkler sending av data

Det er ikke alltid praktisk å sende informasjon én byte om gangen. Et bibliotek kan ofte komme godt med skrive ut... Den inneholder prosedyrer for å sende data av alle mulige lengder i alle mulige formater: byte, hex, dec, bin, boolean, som kan forenkle utdataene i et program.
> inkludere utskrift
...
var dword data
print_dword_hex (usb_serial_data, data)

Navnet på alle kommandoene finner du i bibliotekfilen.

Venter på PC-tilkobling

Hvis det, før du starter hovedsyklusen til mikrokontrolleren, først må opprette en forbindelse med PC-en, kan du legge til linjer foran den
samtidig som(usb_cdc_line_status () == 0x00) Løkke
endeløkke

Bind portnummeret til enheten

Hvis du lar alt være som det er, vil systemet tildele det første ledige portnummeret med hver nye tilkobling. Dette betyr at du alltid må overvåke ham.
For å forhindre at dette skjer, må enheten tildeles en unik verdi for serienummeret før du kobler til usb-biblioteket:
Nummeret kan være av hvilken som helst lengde og inneholde forskjellige tegn.
const byte USB_STRING3 =
{
24 , - array lengde
0x03, - bDescriptorType
"0" , 0x00,
"1" , 0x00,
"2" , 0x00,
"3" , 0x00,
"4" , 0x00,
"5" , 0x00,
"6" , 0x00,
"7" , 0x00,
"8" , 0x00,
"9" , 0x00,
"X".0x00
}

Endre enhetsnavnet til ditt eget

Du kan endre enhetsnavnet som er synlig i systemet før du installerer driverne ved å deklarere en array med et navn som serienummeret, dette må gjøres før du kobler til USB-biblioteket.
const byte USB_STRING2 =
{
28 , --
0x03, - bDescriptorType
"D", 0x00,
"e", 0x00,
"m", 0x00,
"o", 0x00,
" " , 0x00,
"B", 0x00,
"o", 0x00,
"en", 0x00,
"r", 0x00,
"d", 0x00,
" " , 0x00,
"=" , 0x00,
")" .0x00
}

Men dessverre, etter å ha installert driverne, vil enheten endre navnet til det som er spesifisert i .inf-filen, så vi vil endre navnet der også.


DESCRIPTION = "Demo CDC"

Vi organiserer automatisk enhetstilkobling

Akk, det er ingen direkte måter å utføre denne oppgaven på, så du må konstruere.

Først av alt må du tilordne enheten en unik produsent- og produktverdi for enkelt å identifisere den blant hundrevis av andre standard CDC-firmwares.
VID og PID utstedes for penger, så la oss følge kinesernes vei: vi vil stille og rolig ta for oss selv åpenbart frie verdier.

Fastvare:
To variabler må deklareres i fastvaren før du kobler til USB-biblioteket

konstord USB_SERIAL_PRODUCT_ID = 0xFF10
konstord USB_SERIAL_VENDOR_ID = 0xFF10

I stedet for FF10 kan du sette inn to ord (2 byte). Sluttresultatet finnes i vedlagte arkiv.

Drivere:
Siden driverne ikke er ment for vår kombinasjon av VID og PID, la oss legge til verdiene våre til .inf-filen manuelt:


% BESKRIVELSE% = Driverinstallasjon, USB \ VID_FF10 & PID_FF10


% BESKRIVELSE% = Driverinstallasjon, USB \ VID_FF10 & PID_FF10

Programvare:
For å fange hendelsene med å koble til/fra en enhet, koble til ComponentUSB-biblioteket. Jeg anser det ikke som nødvendig å forklare hver linje: alle endringer kan sees i vedlagte prosjekt.

Resultat

Det er vanskelig å se på skjermbildet, men send-knappen er aktiv bare når det er en tilkoblet enhet, mens programmet hver 50. ms sender en forespørsel om å motta statusen til knappen (som imidlertid er feil, fordi du trykker på knappen må behandles på MC).

Som du kan se, er det ikke den vanskeligste oppgaven å organisere datautveksling mellom MK og PC via USB. Den resulterende forbindelsen kan ikke bare brukes til endelige formål: den er også egnet for feilsøking av et program. Tross alt er det mye klarere å sende resultatene av beregninger, gjeldende status for registre og variabler til en datamaskin enn å blinke et par lysdioder i morsekode.

Og til slutt: Jeg anbefaler deg å se nærmere på kildekoden til humørlampen. Der kan du finne et ganske godt alternativ for å behandle de mottatte dataene for å organisere en praktisk utvekslingsprotokoll.

Grensesnitt USB (Universal Serial Bus - Universal Serial Interface) er designet for å koble eksterne enheter til en personlig datamaskin. Gjør det mulig å utveksle informasjon med eksterne enheter med tre hastigheter (spesifikasjon USB 2.0):

  • Lav hastighet ( Lav hastighet- LS) - 1,5 Mbit/s;
  • Full fart ( Full fart- FS) - 12 Mbps;
  • Høy hastighet ( Høy hastighet- HS) - 480 Mbps.
En 4-leder kabel brukes til å koble til eksterne enheter: +5 V strømforsyning, signalledninger D + og D-, felles ledning.
USB-grensesnitt kobles til hverandre vert (vert) og enhet. Verten er plassert inne i den personlige datamaskinen og kontrollerer driften av hele grensesnittet. For å koble mer enn én enhet til én USB-port, bruk nav (hub- en enhet som gir tilkobling til grensesnittet til andre enheter). Rotnav (rotnav) ligger inne i datamaskinen og er koblet direkte til verten. USB-grensesnittet bruker en spesiell term "funksjon" er en logisk komplett enhet som utfører en bestemt funksjon. USB-grensesnitttopologien er et sett med 7 lag ( nivået): det første nivået inneholder verts- og rothuben, og det siste inneholder bare funksjoner. En enhet som inkluderer en hub og én eller flere funksjoner kalles sammensatte (sammensatt enhet).
En hub eller funksjonsport som kobles til en hub på høyere nivå kalles en oppstrømsport ( oppstrøms havn), og en hub-port som kobles til en hub eller funksjon på lavere nivå kalles en nedstrømsport ( nedstrøms havn).
Alle dataoverføringer på grensesnittet initieres av verten. Data overføres som pakker. USB-grensesnittet bruker flere typer pakker:
  • tag-pakke (token pakke) beskriver typen og retningen for dataoverføring, enhetsadressen og serienummeret til endepunktet (CT er den adresserbare delen av USB-enheten); pakkeetiketter er av flere typer: I, UTE, SOF, OPPSETT;
  • datapakke (datapakke) inneholder de overførte dataene;
  • godkjenningspakke (håndtrykk pakke) er beregnet på å rapportere resultatene av dataoverføring; det finnes flere typer rabattpakker: ACK, NAK, STILLE.
Dermed består hver transaksjon av tre faser: overføringsfasen til tag-pakken, dataoverføringsfasen og forhandlingsfasen.
USB-grensesnittet bruker flere typer informasjonsoverføringer.
  • Kontroll videresending (kontrolloverføring) brukes til enhetskonfigurasjon så vel som for andre enhetsspesifikke formål.
  • Streaming (bulkoverføring) brukes til å overføre en relativt stor mengde informasjon.
  • Avbryt videresending (gjentatt overføring) brukes til å overføre en relativt liten mengde informasjon, som rettidig overføring er viktig for. Har begrenset varighet og økt prioritet fremfor andre typer overføringer.
  • Isokron videresending (isokron overføring) kalles også sanntidsstrømming. Informasjonen som overføres i en slik overføring krever en sanntidsskala når den opprettes, sendes og mottas.

Streaming av overføringer er preget av garantert feilfri dataoverføring mellom verten og funksjonen ved å oppdage overføringsfeil og etterspørre informasjon.
Når verten blir klar til å motta data fra funksjonen, sender den til funksjonen i overføringsfasen av flaggpakken. I-plastpose. Som svar på dette sender funksjonen, i dataoverføringsfasen, en pakke med data til verten eller, hvis den ikke kan gjøre dette, sender NAK- eller STILLE-plastpose. NAK- pakken informerer om midlertidig utilgjengelighet for funksjonen for å overføre data, og STILLE-pakke informerer om behov for vertsinngrep. Hvis verten har mottatt dataene, sender den funksjoner i forhandlingsfasen ACK
Når verten blir klar til å overføre data, sender den ut funksjoner UTE-pakke etterfulgt av en datapakke. Hvis funksjonen har mottatt dataene, sender den til verten ACK-pakke, ellers sendes NAK- eller STILLE-plastpose.
Kontrolloverføringer inneholde minst to stadier: Oppsettstadiet og statusstadiet... Mellom dem kan også plasseres dataoverføringsstadiet. Oppsettstadiet brukes til å utføre OPPSETT transaksjoner, hvor informasjon sendes til kontroll-CT-funksjonen. OPPSETT transaksjon inneholder OPPSETT-plastpose , datapakke og avstemmingspakke. Hvis datapakken er vellykket mottatt av funksjonen, sender den til verten ACK-plastpose. Ellers avsluttes transaksjonen.
V dataoverføringsstadier kontrolloverføringer inneholder en eller flere I- eller UTE- transaksjoner, hvis overføringsprinsipp er det samme som ved strømmeoverføringer. Alle transaksjoner på stadiet av dataoverføring må gjøres i samme retning.
V statusstadiet den siste transaksjonen gjøres, som bruker samme prinsipper som i streaming. Retningen til denne transaksjonen er motsatt av den som brukes i dataoverføringsfasen. Statusstadiet brukes til å rapportere resultatet av SETUP-stadiet og dataoverføringsstadiet. Statusinformasjon sendes alltid fra funksjon til vert. På kontroll rekord (Kontroller skriveoverføring) statusinformasjonen overføres i dataoverføringsfasen til statusstadiet for transaksjonen. På kontrollere lesing (Kontroller leseoverføring) statusinformasjonen returneres i forhandlingsfasen av statusstadiet av transaksjonen, etter at verten har sendt en null-lengde datapakke i forrige fase av dataoverføringen.
Avbryt overføringer kan inneholde I- eller UTE- videresending. Ved mottak I-pakkefunksjon kan returnere en datapakke, NAK-pakke eller STILLE-plastpose. Hvis funksjonen ikke har informasjon som det kreves et avbrudd for, returnerer funksjonen i dataoverføringsfasen NAK-plastpose. Hvis driften av CT med avbrudd avbrytes, returnerer funksjonen STILLE-plastpose. Hvis avbrudd er nødvendig, returnerer funksjonen nødvendig informasjon i dataoverføringsfasen. Hvis verten har mottatt dataene, sender den ACK-plastpose. Ellers sendes ikke den matchende pakken av verten.
Isokrone transaksjoner inneholde overføringsfasen og dataoverføringsfasen men har ikke forhandlingsfasen... Verten sender I- eller UTE-tegn, hvoretter, i CT-dataoverføringsfasen (for I-tegn) eller vert (for UTE-sign) sender data. Isokrone transaksjoner støtter ikke avstemmingsfasen og sender data på nytt ved feil.

På grunn av det faktum at USB-grensesnittet implementerer en kompleks, kreves det en mikroprosessorenhet i USB-grensesnittenheten for å støtte protokollen. Derfor er hovedalternativet i utviklingen av en grensesnittenhet bruken av en mikrokontroller, som vil gi støtte for utvekslingsprotokollen. For tiden produserer alle store mikrokontrollerprodusenter produkter som inkluderer en USB-blokk.

Selskapets produsent Navn Beskrivelse

Atmel
AT43301 LS / FS hub-kontroller 1-4 med delt downlink-strømstyring.
AT43312A LS / FS hub-kontroller 1-4 med individuell downlink-strømstyring.
AT43320A Mikrokontroller basert på AVR-kjerne. Har en innebygd USB-funksjon og en hub med 4 eksterne nedstrømsporter som opererer i LS/FS-modus, 512 byte RAM, 32x8 generelle registre, 32 programmerbare pinner, serielle og SPI-grensesnitt. Funksjonen har 3 CT-er med FIFO-er på 8 byte. Nedstrømsportene til huben er individuelt drevet.
AT43321 Tastaturkontroller basert på AVR-kjerne. Har en innebygd USB-funksjon og en hub med 4 eksterne nedstrømsporter som opererer i LS/FS-modus, 512 byte RAM, 16 kbyte ROM, 32x8 generelle registre, 20 programmerbare utganger, serielle og SPI-grensesnitt. Funksjonen har 3 CT-er. Nedstrømsportene til huben er individuelt drevet.
AT43324

Mikrokontroller basert på AVR-kjerne. Har en innebygd USB-funksjon og en hub med 2 eksterne nedstrømsporter som opererer i LS / FS-moduser, 512 byte RAM, 16 kbyte ROM, 32x8 generelle registre, 34 programmerbare utganger. Tastaturmatrisen kan være 18x8 i størrelse. Kontrolleren har 4 utganger for tilkobling av lysdioder. Funksjonen har 3 CT-er. Nedstrømsportene til huben er individuelt drevet.

AT43355 Mikrokontroller basert på AVR-kjerne. Har en innebygd USB-funksjon og en hub med 2 eksterne nedstrømsporter som opererer i LS / FS-moduser, 1 KB RAM, 24 KB ROM, 32x8 generelle registre, 27 programmerbare pinner, serielle og SPI-grensesnitt, 12-kanals 10-bits ADC. Funksjonen har 1 kontroll-CT og 3 programmerbare CT-er med 64/64/8 byte FIFOer.
Fairchild Semiconductor USB100 Kontroller av manipulatorer (mus, styrekule, joystick). Støtter 2D / 3D mus, joystick med tre potensiometre, manipulator med 16 knapper.

Intel
8x931Ax Mikrokontroller med MSC-51 arkitektur. Har en innebygd USB-funksjon som opererer i LS / FS-moduser, 256 byte RAM, 0/8 kbyte ROM, 8x4 generelle registre, 32 programmerbare utganger, et seriell grensesnitt, et tastaturkontrollgrensesnitt. Funksjonen har 3 CT-er med 8/16/8 byte FIFO-er.
8x931Hx Mikrokontroller med MSC-51 arkitektur. Har en innebygd USB-funksjon og en hub med 4 eksterne nedstrømsporter som opererer i LS / FS-moduser, 256 byte RAM, 0/8 kB ROM, 8x4 generelle registre, 32 programmerbare utganger, et seriell grensesnitt, et tastatur kontrollgrensesnitt. Funksjonen har 3 CT-er med 8/16/8 byte FIFO-er.
8x930Ax Mikrokontroller med MSC-251 arkitektur. Har en innebygd USB-funksjon som fungerer i LS/FS-modus, 1024 byte RAM, 0/8/16 kbyte ROM, 40 generelle registre, 32 programmerbare pinner, et seriell grensesnitt. Funksjonen har 4 (6) CT-er med FIFO-er på 16/1024 (256) / 16 (32) / 16 (32) / (32) / (16) byte.
8x930Hx Mikrokontroller med MSC-251 arkitektur. Har en innebygd USB-funksjon og en hub med 4 eksterne nedstrømsporter som opererer i LS / FS-modus, 1024 byte RAM, 0/8/16 kbyte ROM, 40 generelle registre, 32 programmerbare pinner, et seriell grensesnitt. Funksjonen har 4 CT-er med 16/1024/16/16 byte FIFO-buffere.

Mikrobrikke
PIC16C745 Mikrokontroller med PIC-arkitektur. Den har en innebygd USB-funksjon som opererer i LS-modus, 256 byte RAM, 14336 byte ROM, 22 programmerbare pinner, et seriell grensesnitt, en 5-kanals 8-bits ADC.
PIC16C765 Mikrokontroller med PIC-arkitektur. Den har en innebygd USB-funksjon som fungerer i LS-modus, 256 byte RAM, 14336 byte ROM, 33 programmerbare utganger, et serielt grensesnitt, en 8-kanals 8-bits ADC.
PIC18F2450 Mikrokontroller med PIC-arkitektur. Den har en innebygd USB-funksjon som fungerer i LS/FS-modus, 1536 byte RAM, 16384 byte ROM, 19 programmerbare pinner, serielle og SPI-grensesnitt, 5-kanals 10-bits ADC. Funksjonen har 8 CT-er.
PIC18F2550 Mikrokontroller med PIC-arkitektur. Har en innebygd USB-funksjon som opererer i LS/FS-modus, 1536 byte RAM, 32768 byte ROM, 19 programmerbare pinner, serielle, CAN- og SPI-grensesnitt, 5-kanals 10-bits ADC. Funksjonen har 8 CT-er.
PIC18F4450 Mikrokontroller med PIC-arkitektur. Den har en innebygd USB-funksjon som fungerer i LS/FS-modus, 1536 byte RAM, 16384 byte ROM, 34 programmerbare pinner, serielle, CAN- og SPI-grensesnitt, 8-kanals 10-bits ADC. Funksjonen har 8 CT-er.
PIC18F4550 Mikrokontroller med PIC-arkitektur. Den har en innebygd USB-funksjon som fungerer i LS/FS-modus, 1536 byte RAM, 32768 byte ROM, 34 programmerbare pinner, serielle, CAN- og SPI-grensesnitt, 8-kanals 10-bits ADC. Funksjonen har 8 CT-er.
Texas Instruments TUSB2036 LS / FS hub 1-3-kontroller med individuell nedstrøms portstrømstyring.

Perifere enheter som mus, tastatur, webkamera, skriver er vanligvis koblet til datamaskinen via USB-porter. I dette tilfellet skjer det ofte at en eller flere porter slutter å fungere. Det vil si at når en USB-flash-stasjon er koblet til en datamaskin, for eksempel, gjenkjennes den ikke, tastaturet eller musen kan fryse, og skriveren kan ikke svare og skrive ut sider.

Det er flere sannsynlige årsaker til at noen eller alle USB-portene på datamaskinen din ikke fungerer. La oss prøve å forstå dette problemet og finne ut hva som bør gjøres for å gjenopprette den normale funksjonen til datamaskinen.

Sjekker BIOS-innstillinger

Det første du bør være oppmerksom på er BIOS-innstillingene til datamaskinen. For å gå inn i BIOS trenger du et funksjonelt tastatur. Hvis tastaturet er koblet til datamaskinen via USB og det ikke fungerer, må du koble til et tastatur med en PS / 2-kontakt. Ellers kan du rett og slett ikke gjøre noe.

Så vi går inn i BIOS, som, når du starter datamaskinen, må trykke på enter-tasten, vanligvis DEL. Det kan være en annen tast som vises på skjermen og er angitt i håndboken for hovedkortet. Når du er i BIOS, finner du delen Integrated Peripherals eller Advanced-delen. Her finner du underseksjonen "Konfigurasjon av enheter ombord". Det er i den at parametrene som er ansvarlige for driften av USB-kontrollere er plassert: USB-funksjon eller USB 2.0-kontroller. Disse parameterne må være aktivert. Og hvis en av dem er deaktivert (Deaktivert), hold musepekeren over den og trykk Enter, og aktiverer den. For at endringene du gjorde ikke tilbakestilles, må du lagre dem ved å trykke F10, og bekrefte lagringen ved å trykke på Y eller Enter-tasten.

Etter å ha startet datamaskinen på nytt, sjekk om USB-portene fungerer. Og hvis ikke, bør du se etter årsaken et annet sted.

USB-porter foran på datamaskinen fungerer ikke

Som et spesielt tilfelle kan det hende at bare frontpanelets USB ikke fungerer for deg. I en slik situasjon er det nødvendig å sjekke om de nødvendige kontaktene på hovedkortet er koblet til og om ledningene ikke er skadet. For å gjøre dette, åpne sidedekselet på systemenheten og vær oppmerksom på kontakten nederst på hovedkortet. På selve brettet er det en inskripsjon USB1 eller USB2, samt på selve blokken. Ledningene fra blokken går til frontpanelet, og hvis de er frakoblet eller ødelagt på ett sted, har du funnet årsaken til feilen. Skadede ledninger bør kobles til eller skiftes ut. Det vil ikke være overflødig å sjekke kontakten i kontakten på hovedkortet. Du bør også være oppmerksom på brettet på frontpanelet. Kanskje det er en kortslutning, forresten, en slik kortslutning kan utløses av akkumulert støv. Sørg derfor for å rengjøre systemenheten for støv.

Problemer med selve enheten eller kabelen

Den neste kilden til problemer med USB kan være kabelen som for eksempel skriveren er koblet til. Denne feilen er enkel å identifisere og fikse. Vi kobler USB-flashstasjonen til den testede kontakten. Hvis det fungerer, prøver vi å koble til annet kjent utstyr som kan repareres ved hjelp av en mistenkelig kabel, for eksempel en USB-hub. Hvis den også nekter å fungere, er årsaken definitivt i kabelen og den bør byttes ut.

Strømbrudd

Det er situasjoner der det rett og slett ikke er nok strøm til alle enheter. Hvis du for eksempel kobler til en ekstern harddisk som bruker to USB-porter samtidig, kan det slå av skriveren eller tastaturet. I dette tilfellet er ikke kraften til strømforsyningsenheten nok til å gi energi til alle forbrukere. I dette tilfellet kan det hende at problemet ikke vises umiddelbart, men en stund etter at du har slått på datamaskinen. Det er flere veier ut av situasjonen. Hvis du har installert en strømforsyningsenhet med lav effekt, for eksempel 300 W, vil det være logisk å endre den til en kraftigere, 450-600 W. Du kan også bruke en aktiv USB-hub (eksternt drevet). Det vil tillate ikke bare å øke antallet tilkoblede USB-enheter, men også å drive dem fra en separat strømforsyningsenhet.

En annen grunn som påvirker USB-ytelsen er et dødt CMOS-batteri. Men samtidig, hver gang du slår på datamaskinen, vil du observere tapt systemtid og dato. Etter å ha byttet batteri, forsvinner problemet. Men dette er ikke vanlig, så du bør se etter andre mulige kilder til funksjonsfeil.

Manglende eller feil installasjon av USB-drivere

Årsakene til programvarefeil i Windows 7/10 kan identifiseres ved hjelp av Enhetsbehandling. Hvis du oppdager at en eller flere enheter ikke fungerer spesifikt, uavhengig av porten som brukes, kan dette tyde på at problemet ligger i selve enheten. Åpne Kontrollpanel og gå til Enhetsbehandling. Alle tilkoblede enheter vil vises der. Hvis listen inneholder elementer med et gult utropstegn eller en ukjent enhet i stedet for et navn, ligger problemet i selve enheten. Det kan være flere alternativer for problemer.

Ofte slutter USB-inngangene å fungere etter å ha installert Windows 7/10 på nytt. Årsaken er feil installasjon av driverne eller at de nødvendige driverne ikke blir funnet i det hele tatt. Du må utføre valget og installasjonen manuelt.

Ofte krever feilsøking ganske enkelt å oppdatere driveren. Så hvis den automatiske Windows-oppdateringen er deaktivert, og selve systemet ble installert for lenge siden, går relevansen til programvaren tapt, systemfeil kan vises. Samtidig begynner enheten å fungere feil, eller slutter til og med å fungere helt. For å oppdatere (reinstallere) USB-kontrollerdrivere, kan du bruke hovedkortdriver-CD/DVD eller laste ned de nødvendige driverne fra hovedkortprodusentens nettsted.

Du kan også slå av strømsparing for alle porter ved å bruke Enhetsbehandling. Utvid listen over USB-enheter som er i bruk skjult i delene "USB-kontrollere", "Mus og andre pekeenheter", "Tastaturer". Dobbeltklikk på ønsket enhet for å åpne egenskapsvinduet. Nå bytter vi til "Strømstyring"-fanen og fjerner merket for "Tillat denne enheten å bli slått av for å spare strøm". Dermed vil enheten alltid brukes under alle omstendigheter.

Hvis noe utstyr ikke gjenkjennes, kan det være både et problem med driverne som allerede er kjent for oss, og et maskinvareproblem som består i mangel på kontakt, kabelskade eller en kontrollerfeil. Dessuten er det ofte en situasjon når, når en defekt enhet er tilkoblet, resten slutter å fungere normalt. Tastaturet begynner å fryse, det samme gjør musen, og skriveren slutter å skrive. Problemet ligner mangel på strøm, det vil si at forbruket av all strøm går til en defekt enhet, der det kan være en vanlig kortslutning eller annen funksjonsfeil.

USB-porter fungerer ikke på grunn av skadet kontroller

Hvis ingen av trinnene ovenfor hjalp til med å gjenopprette USB-portene til å fungere, bør du sjekke hovedkortets USB-kontroller, som kan ha mislyktes. I dette tilfellet bør reparasjoner og diagnostikk av høy kvalitet overlates til spesialistene på servicesenteret. Som en vei ut av problemet, prøv å installere et utvidelseskort, den såkalte USB PC-kontrolleren, installert i PCI-sporet på hovedkortet. En slik løsning er merkbart billigere enn å reparere en USB-hovedkortkontroller, og ved bruk av en ekstra USB-hub vil problemet med mangel på porter ikke være relevant i det hele tatt.

Som du kan se, er det ganske problem å finne og fikse problemer med USB-porter, og alt fordi det kan være mange årsaker. Sekvensielt søk og eliminering av bevisst ukorrekte baner vil tillate deg å identifisere og fikse problemet.

Dagens artikkel vil, som tittelen antyder, vies en diskusjon av det grunnleggende USB-grensesnitt... La oss vurdere de grunnleggende konseptene, strukturen til grensesnittet, finne ut hvordan dataoverføringen foregår, og i nær fremtid vil vi implementere alt dette i praksis 😉 Kort sagt, la oss komme i gang!

Det finnes en rekke forskjellige spesifikasjoner USB... Det hele startet med USB 1.0 og USB 1.1, så utviklet grensesnittet seg til USB 2.0, den endelige spesifikasjonen dukket opp relativt nylig USB 3.0... Men for øyeblikket er den vanligste implementeringen USB 2. 0.

Vel, for det første, hovedpoengene og egenskapene. USB 2.0 støtter tre driftsmoduser:

  • Høy hastighet- opptil 480 Mb/s
  • Full fart- opptil 12 Mb/s
  • Lav hastighet- opptil 1,5 Mb/s

Busssjef USB-vert(f.eks. PC) som du kan koble til opptil 127 forskjellige enheter til. Hvis dette ikke er nok, må du legge til en vert til. Dessuten er det viktig at enheten selv ikke kan sende / motta data til / fra verten; det er nødvendig at verten selv adresserer enheten.

I nesten alle artikler om USB som jeg har sett brukt begrepet " sluttpunkt“, Men hva det er er vanligvis skrevet ganske vagt. Så endepunktet er en del av enheten USB med sin egen unike identifikator. Hver enhet USB kan ha flere endepunkter. I det store og hele - endepunktet er bare et minneområde USB en enhet der alle data kan lagres (databuffer). Og til slutt får vi dette - hver enhet har sin egen unike adresse på bussen USB, og hvert endepunkt på denne enheten har sitt eget nummer. Så det er det)

La oss gå litt bort og snakke om "jerndelen" av grensesnittet.

Det finnes to typer kontakter - Type A og Type B.

Som allerede klart av figuren Type A refererer alltid til verten. Dette er kontaktene vi ser på datamaskiner og bærbare datamaskiner. Koblinger Type B referer alltid til USB-enheter som kan kobles til. USB-kabelen består av 4 ledninger i forskjellige farger. Vel, faktisk er rødt strøm (+5 V), svart er jord, hvitt og grønt er for dataoverføring.

I tillegg til de som er vist på figuren, finnes det også andre versjoner av USB-kontakter, for eksempel mini-USB og andre, vel, det vet du allerede 😉

Sannsynligvis er det verdt å berøre dataoverføringsmetoden litt, men vi vil ikke fordype oss i det) Så når du overfører data over bussen USB prinsippet om koding brukes NRZI(ingen tilbakevending til null med inversjon). For å overføre en logisk "1", er det nødvendig å heve nivået på D +-linjen over +2,8 V, og nivået på D-linjen må senkes under +0,3 V. For overføring av null er situasjonen motsatt - (D-> 2,8 V) og (D +< 0.3 В).

Separat er det verdt å diskutere kraften til enheter. USB... Og her er det også flere alternativer.

For det første kan enheter være bussdrevne, deretter kan de deles inn i to klasser:

  • Lite strøm
  • Høy effekt

Forskjellen her er at lite strøm enheter kan ikke forbruke mer enn 100 mA... Og enheter høy effekt bør ikke konsumere mer 100 mA bare på konfigurasjonsstadiet. Når de er konfigurert av verten, kan forbruket deres være opptil 500 mA.

I tillegg kan enheter ha sin egen strømforsyning. I dette tilfellet kan de motta opptil 100 mA fra bussen, og ta alt annet fra kilden din)

Dette ser ut til å være alt, la oss gå videre til strukturen til de overførte dataene. Likevel er dette av størst interesse for oss 😉

All informasjon blir overført personale som sendes med jevne mellomrom. På sin side består hver ramme av transaksjoner... Her vil det kanskje være klarere:

Hver ramme inkluderer en pakke , så følger transaksjoner for forskjellige endepunkter, vel, og det hele ender med en batch EOF (End Of Frame). For å være mer presis, da EOF- dette er ikke helt en pakke i ordets vanlige betydning - dette er tidsintervallet da datautveksling er forbudt.

Hver transaksjon ser slik ut:

Den første pakken (kalt Token plastpose) inneholder informasjon om enhetens adresse USB og også nummeret til endepunktet som denne transaksjonen er ment for. I tillegg lagrer denne pakken informasjon om typen transaksjon (vi vil diskutere hvilke typer det finnes, men litt senere =)). - alt er klart med ham, dette er data som overføres av verten, eller endepunktet (avhengig av transaksjonstype). Den siste pakken er Status- designet for å sjekke suksessen med å motta data.

Allerede mange ganger har ordet "pakke" blitt uttalt i forhold til grensesnittet USB, så det er på tide å finne ut hva han er. La oss starte med pakken Token:

Pakker Token er av tre typer:

  • Oppsett

Dette er hva jeg fortalte deg om ..) Avhengig av type pakke, verdien av feltet PID v Token pakken kan ha følgende verdier:

  • Tokenpakke av typen OUT - PID = 0001
  • Token-pakke av typen IN - PID = 1001
  • Tokenpakke av typen SETUP - PID = 1101
  • Tokenpakke av SOF-type - PID = 0101

Går videre til neste del av pakken Token- Enger Adresse og Endepunkt- de inneholder USB-enhetsadresse og endepunktnummer som er tiltenkt transaksjon.

Vel, feltet CRC– dette er en sjekksum, det er klart med dette.

Det er et annet viktig poeng her. PID inkluderer 4 biter, men under overføring blir de supplert med 4 biter til, som oppnås ved å invertere de første 4 bitene.

Så, neste i rekken - det vil si en datapakke.

Alt her er stort sett det samme som i pakken Token, bare i stedet for enhetens adresse og endepunktnummer, her har vi de overførte dataene.

Det gjenstår for oss å vurdere Status pakker og SOF-pakker:

Her PID kan bare ta to verdier:

  • Pakken ble mottatt riktig - PID = 0010
  • Feil under mottak av pakke - PID = 1010

Og endelig pakker:

Her ser vi et nytt felt Ramme- den inneholder nummeret til den overførte rammen.

La oss ta en titt på prosessen med å skrive data til en USB-enhet som et eksempel. Det vil si, vurder et eksempel på strukturen til en opptaksramme.

Rammen, som du husker, består av transaksjoner og ser slik ut:

Hva er alle disse transaksjonene? La oss finne ut av det nå! Transaksjon OPPSETT:

Transaksjon UTE:

På samme måte, når du leser data fra en USB-enhet, ser rammen slik ut:

Transaksjon OPPSETT vi allerede har sett, la oss se på transaksjonen I 😉

Som du kan se, har alle disse transaksjonene samme struktur som vi diskuterte ovenfor)

Generelt tror jeg det er nok for i dag 😉 Det ble en ganske lang artikkel, jeg håper vi i nær fremtid vil prøve å implementere USB-grensesnittet i praksis!

Dataverdenen har endelig samlet seg rundt ladestandarden, etter år med merkede adaptere og stygge vegger med forgrenede strømforsyninger. Vel, liksom: Vi ser allerede en viss fragmentering når det gjelder den nye USB Type-C-kontakten som til slutt kan erstatte USB, så vel som det som heldigvis viser seg Samsungs kortvarige besettelse med flere USB-mikro-B-kontakter for Galaxy linje. Men utover det, og med det åpenbare unntaket av Apples Lightning-kontakt, har mikro-USB utslettet bransjens forkjærlighet for tilpassede porter.

For ti år siden måtte du alltid sørge for at du hadde riktig strømkilde for hver av dingsene dine. Som regel var strømforsyninger ikke engang merket. I dag kan du lade telefonen hjemme hos vennen din (du kan kjøpe en lader og annet tilbehør på nettstedet https://itsell.ua i Ukraina, koble den til for å lese e-bøker til hvilken som helst datamaskin og laste opp bilder fra et digitalkamera direkte til TV-en, takk. I stedet er det imidlertid et nytt problem: USB-strøm. Ikke alle USB-ladere, kontakter og kabler er skapt like. Du har kanskje lagt merke til at noen ladere er kraftigere enn andre. Noen ganger kan en USB-kontakt per bærbar PC tilsynelatende kraftigere enn den andre. På noen stasjonære datamaskiner, selv når de er slått av, kan du lade smarttelefonen din via USB-kontakten. Det viser seg at det er en måte å løse all denne galskapen på - men først må vi forklare hvordan USB-strøm fungerer.

Det er for øyeblikket fire USB-spesifikasjoner - USB 1.0, 2.0, 3.0 og 3.1 - i tillegg til den nye USB-C-kontakten. Vi vil peke på hvor de skiller seg betydelig, men for det meste vil vi fokusere på USB 3.0, da det er det vanligste. På et USB-nettverk er det én vert og én enhet. I nesten alle tilfeller er datamaskinen din mesteren, og smarttelefonen, nettbrettet eller kameraet er enheten. Strøm flyter alltid fra verten til enheten, selv om data kan flyte i begge retninger, for eksempel når du kopierer filer frem og tilbake mellom datamaskinen og telefonen.

Ok, nå tallene. En USB 1.0- eller 2.0-kontakt har fire pinner og en USB-kabel har fire ledninger. Interne pinner bærer data (D + og D-), mens eksterne pinner gir en 5-volts strømforsyning. USB 3.0-porten legger til en ekstra rad med fem pinner, så USB 3.0-kompatible kabler har ni ledninger. Når det gjelder faktisk effekt (milliampere eller mA), er det tre typer USB-porter diktert av gjeldende spesifikasjon: standard nedstrømsport, nedstrøms ladeport og dedikert ladeport. De to første finner du på datamaskinen din (og bør merkes som sådan), og den tredje typen refererer til de "dumme" veggladerne.

I USB 1.0- og 2.0-spesifikasjonene er standard nedstrømsporten i stand til å levere opptil 500mA (0,5A); med USB 3.0 går den opp til 900mA (0,9A). Under lading gir de dedikerte ladeportene opptil 1500mA (1,5A). USB 3.1 har en båndbredde på opptil 10 Gbps, som kalles SuperSpeed ​​​​+-modus, som et resultat, det tilsvarer omtrent første generasjons Thunderbolt. Den støtter også 1,5A og 3A strøm over 5V-bussen.

USB Type-C-kontakt

USB Type-C er en helt annen kontakt. Den er allsidig; Du kan plassere den uansett, og den vil fungere i motsetning til USB eller Apples Lightning-kontakt. USB-C har også teoretisk dobbelt så stor båndbredde som USB 3.0 og kan gi ut mer strøm. Apple har sluttet seg til USB Type-C med USB 3.1 på sin 12-tommers MacBook, og Google har inkludert den på Chromebook Pixel nå. Dessuten begynner vi å se det på telefoner, med den første OnePlus 2; nåværende populære modeller inkluderer Google Nexus 6P, OnePlus 3 og Samsung Galaxy versjon 7. Men det kan også være eldre versjoner med USB-porter som støtter 3.1-standarden.

USB-spesifikasjonen tillater også en "sleep-and-charge"-port der USB-portene på en datamaskin forblir aktive når strømmen er slått av. Du har kanskje lagt merke til dette på en stasjonær datamaskin hvor det alltid strømmer noe strøm gjennom hovedkortet, noen bærbare datamaskiner er også i stand til å sove og lade.

Universallader

Nå, dette er hva spesifikasjonene tilsier. Men det er mange USB-ladere som ikke oppfyller disse spesifikasjonene - for det meste venstrehendte eller globale giganter. iPaden bruker en Apple-lader, for eksempel gir 2,1A ved 5V; Amazons Kindle Fire bruker 1,8A laderutganger; og mange billadere kan sende ut alt fra 1A til 2,1A.

Det er en enorm forskjell mellom vanlige USB-porter vurdert for 500mA og dedikerte ladeporter som strekker seg helt opp til 3000mA. Dette leder til et viktig spørsmål: Hvis du for eksempel tar en telefon som fulgte med en 900mA-lader og kobler den til en 2100mA iPad-lader, kan den eksplodere?

Kort sagt, nei: du kan koble hvilken som helst USB-enhet til en hvilken som helst USB-kabel og til en hvilken som helst USB-port og ingenting vil eksplodere – og faktisk bør bruk av en kraftigere lader bare øke hastigheten på batteriladingen. Vi gjør dette hele tiden med våre mobile enheter, og vi har aldri hatt noen problemer.

Svaret er det alder enheten din spiller en viktig rolle i å diktere hvor raskt den kan lades, og om den kan lades med en universallader for alle. Tilbake i 2007 ga USB Implementers Forum ut Battery Charging Specification, som standardiserte som raskere måter å lade USB-enheter på, enten ved å pumpe flere forsterkere gjennom USB-portene på datamaskinen din, eller ved å bruke en vegglader. Kort tid etter begynte USB-enheter basert på denne spesifikasjonen å bli kjøpt.

Hvis du har en moderne USB-enhet - faktisk nesten hvilken som helst smarttelefon, nettbrett eller kamera - bør du kunne koble til en høystrøms USB-port og nyte raskere lading. Hvis du har et eldre produkt, vil det sannsynligvis ikke fungere med USB-porter som bruker batteriladerens spesifikasjoner. Den kan bare fungere med gamle, originale (500mA) USB 1.0 og 2.0 PC-porter. I noen (eldre) tilfeller kan USB-enheter kun lades med datamaskiner med visse drivere, men lignende datamaskiner har pågått i over ti år.

Det er et par andre ting å være klar over. Mens datamaskiner kan ha to typer USB-porter - standard nedstrøms eller lading - merker OEM nedstrømsprodusenter dem ikke alltid som det. Som et resultat kan du ha en enhet som lader fra én port på den bærbare datamaskinen, men ikke en annen. Dette er et trekk ved eldre datamaskiner siden det ikke ser ut til å være noen grunn til å bruke standard nedstrømsporter når ladeporter med høy strømstyrke er tilgjengelige. De fleste produsenter setter nå et lite lyn over de riktige ladeportene på bærbare datamaskiner, og i noen tilfeller kan disse portene til og med forbli med lokket lukket.

På samme måte krever enkelte eksterne enheter – 3,5-tommers harddisker i utgangspunktet – mer strøm enn en vanlig USB-port kan gi. Det er derfor de inkluderer to USB-porter, en Y-kabel eller en ekstern strømadapter.

Ellers har USB absolutt gjort ladingen av dingsene og periferiutstyret mye enklere enn noen gang. Og hvis den nye USB-C-kontakten blir populær, vil ting bli enda enklere å få tak i, fordi du aldri banner etter hvilken stikkontakt du kobler den til. Lykke til og takk for oppmerksomheten!