Department of Science and Technology
Institutionen för teknik och naturvetenskap
USB kommunikation
David Kiland
2005-10-28
USB kommunikation
Examensarbete utfört i Datorteknik
vid Linköpings Tekniska Högskola, Campus
Norrköping
David Kiland
Handledare Per Johansson
Examinator Kent Axelsson
Rapporttyp
Report category
Examensarbete
B-uppsats
C-uppsats
D-uppsats
_ ________________
Språk
Language
Svenska/Swedish
Engelska/English
_ ________________
Titel
Title
Författare
Author
Sammanfattning
Abstract
ISBN
_____________________________________________________
ISRN
_________________________________________________________________
Serietitel och serienummer
ISSN
Title of series, numbering ___________________________________
Nyckelord
Keyword
URL för elektronisk version
Institutionen för teknik och naturvetenskap
Department of Science and Technology
2005-10-28
x
x
LITH-ITN-EX--05/033--SE
USB kommunikation
David Kiland
Examensarbete som behandlar USB kommunikation.
Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare –
under en längre tid från publiceringsdatum under förutsättning att inga
extra-ordinära omständigheter uppstår.
Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner,
skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för
ickekommersiell forskning och för undervisning. Överföring av upphovsrätten
vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av
dokumentet kräver upphovsmannens medgivande. För att garantera äktheten,
säkerheten och tillgängligheten finns det lösningar av teknisk och administrativ
art.
Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i
den omfattning som god sed kräver vid användning av dokumentet på ovan
beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan
form eller i sådant sammanhang som är kränkande för upphovsmannens litterära
eller konstnärliga anseende eller egenart.
För ytterligare information om Linköping University Electronic Press se
förlagets hemsida
http://www.ep.liu.se/
Copyright
The publishers will keep this document online on the Internet - or its possible
replacement - for a considerable time from the date of publication barring
exceptional circumstances.
The online availability of the document implies a permanent permission for
anyone to read, to download, to print out single copies for your own use and to
use it unchanged for any non-commercial research and educational purpose.
Subsequent transfers of copyright cannot revoke this permission. All other uses
of the document are conditional on the consent of the copyright owner. The
publisher has taken technical and administrative measures to assure authenticity,
security and accessibility.
According to intellectual property law the author has the right to be
mentioned when his/her work is accessed as described above and to be protected
against infringement.
For additional information about the Linköping University Electronic Press
and its procedures for publication and for assurance of document integrity,
please refer to its WWW home page:
http://www.ep.liu.se/
Sammanfattning
Denna tekniska rapport behandlar mitt slutliga examensarbete
på data- elektroingenjör vid Linköpings universitet. Syftet med
examensarbetet har varit att undersöka möjligheten att ersätta ett
seriellt gränssnitt till datorn med ett USB (Universal Serial Bus)
gränssnitt.
Rapporten beskriver i detalj teorin om hur en dator kommunicerar
med en enhet via USB bussen och hur signalering och
dataöverföring hanteras. USB-protokollet beskrivs med
inriktning mot hur en masslagringsenhet använder bussen som
överföringskanal. Den beskriver också hur man enkelt kan
implementera en masslagringsenhet som använder bussen med
hjälp av en microcontroller från Microchip.
Implementeringen är gjord på en datalogger vars uppgift är att
logga temperatur. Arbetet är genomfört på Eltex Of Sweden i
Älmhult.
Sammanfattning
Abstract
This technical report refers to my final thesis work at Linköpings
University. The purpose of this work was to examine the possibility
to replace an older serial interface to a computer by the newer
Universal Serial Bus (USB).
The report describe in detail the theory behind communication
between a computer and a USB device, everything from signaling
to data transfer. It mainly describes how USB handle a mass storage
device connected to a computer. It also handles the possibility to
implement a mass storage device and use the Universal Serial Bus
with a small 8-bit microcontroller from Microchip.
The implementation has been made on a data logger, a small device
which task is to measure the temperature with a specified interval
over a longer time and store it into a memory. The thesis work has
been carried out at Eltex Of Sweden in Älmhult, Sweden.
David Kiland
Linköpings Universitet
Innehållsförteckning
1.
Inledning
5
1.1 Eltex Of Sweden
5
1.2 Bakgrund
5
1.3 Syfte
5
1.4 Struktur
5
2.
USB - Universal Serial Bus
6
2.1 Introduktion
6
2.2 Elektriska gränssnittet
6
2.3 Hastighet
6
2.4 USB bussens arkitektur
7
2.5 USB Device States
7
2.6 Bus Enumeration (Initiering vid inkoppling)
8
2.7 Endpoint typer
9
2.7.1 Control Transfer
9
2.7.2 Interrupt Transfer
10
2.7.3 Isochronous Transfer
10
2.7.4 Bulk Transfer
10
2.8 USB Descriptorer
11
2.8.1 Device Desciptor
12
2.8.2 Configuration Descriptor
13
2.8.3 Interface Descriptor
14
2.8.4 Endpoint Descriptor
15
2.8.5 String Descriptor
16
2.9 USB Requests
17
2.9.1 Standard Requests
17
2.9.2 Standard Device Requests
18
2.9.3 Standard Interface Requests
19
2.9.4 Standard Endpoint Requests
19
2.9.5 Class Requests
20
2.9.6 Vendor Requests
20
3.
Mass Storage Class
21
3.1 Class Specific Requests
21
3.1.1 Bulk-Only Mass Storage Reset
21
3.1.2 Get Max LUN
21
3.2 Command Block Wrapper (CBW)
22
3.2.1 dCBWSignature
22
3.2.2 dCBWTag
22
3.2.3 dCBWDataTransferLength
22
3.2.4 bmCBWFlags
22
3.2.5 bCBWLUN
22
3.2.6 bCBWBLength
22
3.2.6 CBWCB
22
3.3 Command Status Wrapper (CSW)
23
3.3.1 dCSWSignature
23
3.3.2 dCSWTag
23
3.3.3 dCSWDataResidue
23
3.3.4 bCSWStatus
23
3.4 Exempel på en dataöverföring
24
3.5 Descriptorer för Mass Storage Class
24
3.5.1 Device Descriptor
24
3.5.2 Configuration Descriptor
25
3.5.3 Interface Descriptor
25
3.5.4 Endpoint Descriptor
26
4.
SCSI Multimedia Commands
27
4.1 INQUIRY
28
4.2 READ_CAPACITY
28
4.3 READ_FORMAT_CAPACITIES
28
4.4 READ
28
4.5 WRITE
28
5.
Implementering
29
5.1 Introduktion
29
5.2 Mätman USB
30
5.2.1 Struktur
30
5.2.2 Processor
30
5.2.3 Flashminne
30
5.2.4 A/D-Omvandlare
31
5.2.5 Strömförsörjning
31
5.2.6 Filsystem
32
5.2.6.1 File/dir entries
33
5.2.6.2 FAT tabellen
34
6.
Slutsats och diskussion
35
7.
Referenser
36
8.
Bilagor
37
8.1 Komplett kopplingsschema till Mätman USB
37
8.2 Kravspecifikation
38
8.3 Källkod
40
David Kiland
Linköpings Universitet
Tabellförteckning, figurförteckning
Tabellförteckning
Tabell 2.1 - Descriptorernas generella format
11
Tabell 2.2 - Device Descriptorn
12
Tabell 2.3 - Configuration Descriptor
13
Tabell 2.4 - Interface Descriptor
14
Tabell 2.5 - Endpoint Descriptor
15
Tabell 2.6 - String Descriptor
16
Tabell 2.7 - SETUP paketets struktur för olika Requests
17
Tabell 2.8 - Standard Device Requests
18
Tabell 2.9 - Standard Interface Requests
19
Tabell 2.10 - Standard Endpoint Requests
19
Tabell 3.1 - Bulk-Only Mass Storage Reset
21
Tabell 3.2 - Get Max LUN
21
Tabell 3.3 - Command Block Wrapper
22
Tabell 3.4 - Command Status Wrapper
23
Tabell 3.5 - Giltiga värden på bCSWStatus
23
Tabell 3.6 - Divice Descriptor för en Mass Storage Device
24
Tabell 3.7 - Configuration Descriptor för en Mass Storage Device
25
Tabell 3.8 - Interface Descriptor för en Mass Storage Device
25
Tabell 3.9 - Endpoint Descriptor för en Mass Storage Device
26
Tabell 4.1 - SCSI Multimedia Commands för
27
Tabell 5.1 - Strukur för en file/dir entry
33
Figurförteckning
Figur 2.1 - Descriptorernas förhållande till varandra
11
Figur 4.1 - Kommunikationslagrens struktur
27
Figur 5.2 - Struktur hos Mätman G-2
29
Figur 5.3 - Struktur hos Mätman USB
29
Figur 5.1 - Mätman G-2
29
Figur 5.4 - Minnesstruktur i en FAT16 partition
32
Figur 5.5 - Exempel på en mapp i FAT16
33
1. Inledning
1.1 Eltex Of Sweden
Eltex Of Sweden utvecklar och säljer olika former av trådövervakningssystem
till textilindustrin. Företaget har 40 års erfarenhet av branchen med sitt ursprung i
Älmhult i Småland. Från början utvecklades och producerades allt i Älmhult men
numera sker bara utvecklingen där. Produktionen är nu förlagd på Irland
1.2 Bakgrund
När det gäller databussar för anslutning av externa enheter till en dator är det lite
av ett generationsskifte pågående. Äldre generationer av bussar såsom skrivarport,
COM-port, PS/2 port, gameport börjar försvinna från nya datorer. Dessa bussar
är mycket begränsade i sitt användningsområde eftersom de ofta enbart är till för
en typ av enhet. Ingen av dem har heller någon hög hastighet. Därför har nya,
mer flexibla bussar utvecklas som är lämpade för alla dessa ändamål. De två
vanligaste typerna är USB (Universal Serial Bus), och FireWire. Den senare är
fortfarande dock mest vanligt på Apples Macintosh datorer.
Eltex Of Sweden säljer en datalogger som utvecklades för många år tillbaka innan
dessa nya bussar existerade. Den använder sig av ett RS-232 gränssnitt vilket inte
är kompatibelt med många nya datorer.
1.3 Syfte
Syftet med detta examensarbete har varit att undersöka möjligheterna att ersätta
ett seriellt RS-232 gränssnitt med ett USB gränssnitt på en befintlig produkt.
Produkten är en datalogger från företaget Eltex of Sweden i Älmhult, en enhet
vars uppgift är att logga t.ex. temperatur under en längre period för att sedan
anslutas till datorn för avläsning.
1.4 Struktur
Rapporten behandlar först generell information om USB protokollet, såsom
hårdvaran och dess programvaruprotokoll med speciell inriktning mot ett flyttbart
lagringsmedia. Rapporten behandlar också själva konstruktionen av hårdvara, val
av komponenter m.m.
David Kiland
6
Linköpings Universitet
2. USB - Universal Serial Bus
2.1 Introduktion
USB som industristandard togs fram under mitten av 90 talet utav Intel, Compaq,
Microsoft och NEC. Innan detta fanns det ingen generell buss för olika enheter på
en dator. Skrivaren hade sin, tangentbord och mus likaså. Dessa bussar saknade
också funktionaliteten ”Plug-n-Play” alltså att datorn känner av när enheten ansluts
och letar reda på lämpliga drivrutiner. Många nya externa enheter började också
komma ut på marknaden vilket skapade ett behov av en sådan generell buss.
Till detta behövdes en snabb, billig och dynamisk buss där alla typer av enheter
passade. Med detta i åtanke utvecklades Universal Serial Bus eller USB som den
ofta betecknas. Organisationen som nu ansvarar för USB standarden kallar sig för
USB Implementers Forum, Inc. (USB-IF).
Många förbättringar har gjorts på bussen med tiden och mycket mer kommer
förmodligen att hända. Förr var det bara en dator som kunde vara värd för olika
enheter. En ny standard som kallas USB On-The-Go gör det möjligt för en enhet
att vara värd för ett system. En trådlös version av bussen håller i skrivandets stund
också på att utvecklas, där man slopar kablarna helt och hållet.
2.2 Elektriska gränssnittet
USB bussen består av 4 st ledare, Vbus, GND, D+ och D-. Vbus är bussens
matningsspänning som ligger på +5V för att driva enheter som inte har någon
egen strömförsörjning, så kallade Bus Powered-enheter. D+ och D- är själva
dataledningarna där transmissionen sker differentiellt. Bitarna skickas med
kodningen NRZ-I (Non-Return-to-Zero Inverted) för att få en felfri överföring.
I rapporten beskrivsdet inte i detalj hur bitarna skickas på bussen eftersom detta
sköter i nästan alla fall själva USB controllern, alltså den integrerade kretsen som
hanterar bussen.
2.3 Hastighet
Det finns tre specificerade hastigheter för bussen:
•
Low Speed 1,5Mbit/s
•
Full Speed 12Mbit/s
• High Speed 480Mbit/s
Från början i version 1.1 av bussen fanns bara Low Speed och Full Speed som möjliga
hastigheter, men med tiden har storlek på data och lagringsmedia ökat kraftigt.
Behovet av högre överföringshastigheter ökade och med version 2.0 av bussen
kom ytterligare ett hastighetsläge, nämligen High Speed. Hastigheten bestäms av
pullup-resistorer på bussens dataledningar. En pullup på D+ ger Full Speed och en
pullup på D- ger Low Speed. High speed aktiveras genom att använda Full Speed i
initieringen och sedan om enheten stöder High Speed gå över mjukvarumässigt.
2.4 USB bussens arkitektur
USB bussen brukar ofta delas in i tre olika lager som definieras enligt följande:
•
Det nedersta lagret närmast hårdvaran som skickar och tar emot paket med
data.
•
Mittenlagret som ansvarar för ett interface och dess endpoints. En endpoint
kan beskrivas som en kanal till en specifik enhet där data kan skickas.
Bussen är specificerad för maximalt 16 endpoints till varje enhet varav endpoint
0 alltid är reserverad för enumeration av olika enheter. Enumeration beskrivs
i avsnitt 2.6
•
Översta lagret sköter funktionaliteten för olika interface typer, t.ex en virtuell
serieport, skrivare, flyttbar minnesenhet mm.
2.5 USB Device States
En USB enhet har många olika ”lägen” eller så kallade States beroende på hur långt
den kommit i initieringen eller om den är ansluten eller ej.
Attached
I detta läge är enheten ansluten fysiskt till bussen men ej konfigurerad av värden.
Enheten har heller inte någon strömförsörjning
Powered
Powered state menas att enheten är ansluten till bussen och dess strömförsörjning är
aktiverad. En enhet som har sin spänningskälla externt kan ofta vara strömförsörjd
innan den är i powered state. Enheten anses inte vara i powered state förrän den är
attached.
Default
Nu är enheten både attached och powered vilket innebär att den är ansluten till
bussen och att dess strömförsörjning är aktiverad. I detta läge ska värden göra en
reset på bussen för att placera enheten i Adress state.
Address
Fram till detta läge har enheten inte haft någon specifik adress. En adress har nu
tilldelats enheten för att skilja den från ytterligare eventuella enheter.
Configured
Nu är enheten konfigurerad korrekt av värden och är redo att användas.
Suspended
För att spara ström kan värden placera en enhet som suspended för att spara energi
om det inte funnits någon aktivitet på bussen till denna enhet inom en specificerad
David Kiland
8
Linköpings Universitet
tid. Enheten går ej att använda i detta läge förrän den har ”väckts” av värden.
2.6 Bus Enumeration (Initiering vid inkoppling)
Nedan beskrivs generellt hur ett datorsystem känner av och initierar en nyligen
ansluten USB enhet.
1. Värden känner av att en enhet har anslutits till bussen genom pullup-resistorerna
på dataledarna. Värden väntar minst 100ms för att kontakten ska hinna sättas i
korrekt läge och strömförsörjningen stabiliserat sig.
2. Nu gör värden en reset på bussen och placerar enheten i default state. Enheten
ska nu svara på standardadressen 0.
3. Värden frågar nu enheten efter de 64 första byten av Device Descriptor.
4. Efter att ha mottagit 8 byte av Device Descriptor görs en ny reset på bussen.
Descriptorer beskrivs i avsnitt 2.8.
5. Kommandot Set Adress skickas till enheten som tilldelas en adress och placeras
i Addressed state.
6. Värden frågar efter hela de 18 bytes som Device Descriptor består av.
7. Nu frågas enheten efter 9 byte av Configuration Descriptor för att ta reda på
totala storleken för Configuration Descriptor.
8. Värden begär 255 byte av Configuration Descriptor. Denna transaktion ska
innehålla Configuration Descriptor, Interface Descriptor och två Endpoint
Descriptor.
9. Värden frågar efter eventuella String Descriptors som beskriver den aktuella
konfigurationen.
Denna initering används av nyare versioner av Microsoft Windows och kan skilja
lite i andra operativsystem.
2.7 Endpoint typer
I specifikationerna för USB bussen finns fyra olika Endpoint/Transfer typer. Dessa
typer har lite olika karaktäristik beroende på bl.a dessa faktorer:
•
Riktning på dataflödet
•
Storlek på datapaketen
•
Tidsfördröjning i dataöverföringen
•
Överföringshastighet
•
Feltolerans vid överföringen
Dessa Endpoint/Transfer typer är:
•
Control Transfers
•
Interrupt Transfers
•
Isochronous Transfers
•
Bulk Transfers
Nedan beskrivs främst typerna Control och Bulk transfer eftersom dessa har varit
aktuella i själva hårdvarukonstruktionen.
2.7.1 Control Transfer
Denna typ används ofta för olika kommandon och statusoperationer på bussen.
Överföring är så kallad Best effort, alltså ingen garanti med avseende på tider finns.
Paket skickas när bussen blir ledig. På Enpoint 0 som enumeration sker på, används
alltid Control Transfers. För high-speed enheter är tillåtna paketstorlekar 8, 16, 32
eller 64 byte, för low-speed endast 8 byte och för full-speed endast 64 byte.
Control Transfer brukar oftast ha tre olika nivåer eller steg i överföringen
Setup Stage
I det första steget, det så kallade Setup Stage skickas en förfrågan till enheten.
Data Stage
Nästa steg är en eventuell Data Stage beroende på vad för request som skickats
i Setup Stage. Överskrider datamängden som ska skickas den max tillåtna
paketstorleken skickas data i flera transaktioner.
Data Stage kan ha två olika scenarion beroende på vilken riktning data ska
skickas.
Från enhet till värd
Eftersom bussen kontrolleras av värden kan enheten inte skicka någon data på eget
bevåg utan måste ha tillåtelse av värden. Detta sker genom att värden skickar ett
IN Token som talar om att den är redo att ta emot data. Nu kan enheten svara på
tre olika sätt beroende på dess status. Finns det data så skickar den det i ett
DATA-paket, ett STALL-paket om det har skett ett fel på denna endpoint eller ett NAK-
paket om det för tillfället inte finns någon data att skicka.
Från värd till enhet
Här skickar värden ett OUT Token följt av datan. När all data är skickad skickas ett
IN Token som enheten ska svara på för att bekräfta transaktionen.
David Kiland
10
Linköpings Universitet
2.7.2 Interrupt Transfer
Denna typ används av enheter där data skickas icke-periodiskt men där krav på
fördröjning finns.
2.7.3 Isochronous Transfer
Isochronous transfers används när data skickas kontinuerligt och hög bandbredd
erfordras. Typiska tillämpningar är att strömma video eller audio där krav på låg
fördröjning finns men lite förlorad data då och då inte märks av användaren.
Dess egenskaper är:
•
Garanterad bandbredd på bussen
•
Fast fördröjning
•
Ingen garanti på överföringen.
•
Finns endast i full och high speed enheter
2.7.4 Bulk Transfer
Bulk transfers används när stora datamängder ska skickas med noll tolerans
på fel i överföringen. Lämpar sig ypperligt till flyttbara media och externa
datalagringsenheter. Dess endpoints har lägre prioritet på bussen än interrupt och
och Isochronous transfers.
Viktiga egenskaper är:
•
Överför stora datamängder
•
CRC Check för korrigering av fel, garanterad korrekt överföring
•
Ingen garanti på bandbredd
•
Ingen garanti på fördröjningstider
•
Finns enbart på full och high speed enheter.
Bulk transfers använder sig av två olika transaktionstyper, IN och OUT.
•
IN Token: Fungerar på samma sätt som Control tranfers IN Token. Värden
skickar ett IN Token när data är redo att tas emot. Enheten svarar med antingen
ett DATA-, STALL- eller NAK-paket.
•
OUT Token: Värden skickar ett OUT Token följt av data. När all data är skickad
skickas ett IN Token som enheten ska svara på för att bekräfta transaktionen.
2.8 USB Descriptorer
USB bussen använder sig av så kallade descriptorer, en typ av datapaket för att
ta reda på information om en enhet som anslutits till bussen. Det finns 5 vanliga
typer:
•
Device Descriptor
•
Configuration Descriptor
•
Interface Descriptor
•
Endpoint Descriptor
•
String Descriptor
I figur 2.1 kan descpriptorernas förhållande till varandra studeras.
Alla descriptorer har ett generellt format enligt tabell 2.1.
Offset
Fält
Storlek
Värde
Beskrivning
���������������� ������������� ������������� ������������� ������������� ����������� ���������� ��������������������� ����������� ���������� ����������� ���������� ��������� ���������� ��������� ���������� ��������� ���������� ��������� ���������� ��������� ���������� ������������������� ��������� ���������� ������������������� ������������������ �������������� �������������� ������������� ������������� ������������� �������������