Parallel port, dapat digunakan untuk mengubungkan printer, scanner atau Zip
drive. Yang menjadi masalah adalah kebanyakan komputer hanya memiliki sebuah
parallel port sehingga pemakai harus menggunakan alat-alat tersebut secara
bergantian. Belum lagi masalah kecepatan, zip drive yang membutuhkan transfer
data kecepatan tinggi menjadi lambat karena harus menggunakan parallel port.
Serial port, umumnya digunakan untuk modem dan komunikasi langsung antar 2
komputer. Bila dibandingkan dengan parallel port maka serial port jauh lebih
lambat.
Slot ISA atau PCI, digunakan oleh peralatan-peralatan lain yang memerlukan
transfer data secara cepat. Sayangnya, prosedur instalasi card-card yang datang
bersama alat-alat tersebut pada umumnya tidak mudah.
Tujuan utama dari USB adalah untuk mengakhiri segala ketidak nyamanan diatas.
USB memberikan sebuah bus yang terstandarisasi, mudah digunakan dan dapat
menghubungkan sampai 127 peralatan pada komputer. Setial alat yang duhubungkan
memungkinkan untuk mencapai kecepatan transfer data sampai 6 MBps. Kecepatan transfer
tersebut akan mencukupi untuk kebutuhan kebanyakan peralatan eksternal komputer. Dewasa
ini hampir semua peralatan dapat menggunakan USB : printer, scanner, mouse, joystick,
digital camera, webcam, modem, speaker, storage device, network device dan lain-lain.
Peralatan yang menggunakan USB dapat dihubungkan dengan komputer dengan
sangat mudah. Konektor USB dapat dengan mudah ditemukan baik di belakang ataupun di
depan casing komputer. Apabila peralatan tersebut baru untuk pertama kalinya dihubungkan
dengan komputer, maka sistem operasi akan mendeteksinya secara otomatis dan meminta
pemakai untuk memasukkan driver disk untuk peralatan tersebut. Apabila driver telah
terinstalasi maka komputer akan langsung menggunakan alat tersebut. Apabila peralatan itu
untuk kemudian dilepas maka driver akan secara otomatis di-unload.
2
Kebanyakan peralatan USB datang dengan langsung membawa suatu konektor USB
tipe A, bila tidak maka peralatan tersebut pasti memiliki soket yang dapat dihubungkan
dengan konektor tipe B.
Konektor tipe A
Konektor Tipe B
Dengan adanya dua jenis konektor tersebut maka dapat dipastikan tidak akan terjadi
kesalahan dalam menghubungkan.
3
Suatu hub standar memiliki 4 port. Setiap hub dapat dihubungkan dengan hub lainnya,
ini berarti dengan membuat rantai-hub akan banyak sekali peralatan USB yang dapat
dihubungkan pada komputer. Suatu peralatan USB dan hub USB dapat memiliki power
supply sendiri atau dapat pula menggunakan suplai dari komputer. Suatu self-powered HUB
diperlukan apabila akan terdapat banyak sekali peralatan USB yang tidak memiliki suplai
sendiri akan dihubungkan ke hub tersebut. Namun, peralatan-peralatan besar seperti printer
dan scanner pastilah memiliki power supply sendiri, sehingga apabila terdapat banyak
peralatan seperti itu yang akan dihubungkan maka yang diperlukan adalah suatu unpowered
USB hub.
Komputer selalu dan hanya akan selalu bertindak sebagai host (master).
Sampai 127 peralatan dapat dihubungkan dengan master port baik secara langsung
atau melalui hub.
Kabel USB dapat sampai 5 meter, tetapi dengan merantai hub maka panjang
kabel bisa sampai 30 meter.
Suatu port (USB 1.1) dapat memiliki kecepatan transfer maksimum 12 MBps.
Setiap peralatan USB dapat meminta bandwidth sampai 6 MBps (USB 1.1)
Setiap port USB pada komputer dapat memberikan suplai tegangan 5V dengan
maksimum 500 mA.
Low-power device, seperti mouse dapat menggunakan suplai yang diberikan oleh
port.
Peralatan USB adalah hot-swappable, ini berarti mereka dapat dihubungkan dan
diputuskan ke port kapan saja.
Saat komputer memasuki mode suspend atau power-saving maka suatu peralatan
USB sebaiknya dapat ikut masuk ke mode tersebut demi menghemat tenaga.
4
Suatu kabel USB memiliki konfigurasi sebagai berikut :
Dua buah kabel untuk suplai (merah untuk +5V dan hitam untuk ground).
Dua buah kabel data diferensial yang saling dipilin (putih untuk D- dan hijau untuk
D+).
Pelindung (shield)
Saat host dinyalakan atau pada saat ada peralatan baru yang dihubungkan, maka host akan
melakukan pemeriksaan (query) terhadap peralatan-peralatan tersebut. Proses ini disebut
enumeration. Host juga akan menanyakan pada peralatan, tipe atau cara transfer data yang
bagaimana yang diinginkan oleh alat tersebut :
Control, mode ini digunakan oleh host untuk melakukan query dan kontrol
terhadap peralatan.
Interrupt, peralatan seperti mouse dan keyboard yang akan mengirim data dalam
jumlah sangat sedikit biasanya menggunakan mode ini.
Bulk, peralatan seperti printer yang menerima data dalam bentuk paket-paket yang
besar akan menggunakan mode ini. Terdapat proses handshaking untuk
memastikan data yang dikirim benar.
Isochronous, peralatan streaming seperti speaker yang akan dan harus menerima
data secara terus menerus hampir real-time akan menggunakan mode ini. Tidak
ada pengecekan kesalahan pada mode ini, apapun datanya dianggap benar.
Secara khusus, bandwidth dari bus dicadangkan seanyak 10% untuk keperluan paketpaket kontrol. Setiap peralatan dapat meminta bandwidth sampai maksimum 90% dari total
kemampuan bus. USB membagi-bagi bandwidth kedalam frame-frame. Setiap frame berisi
1500 byte dan sebuah frame baru selalu ada setial mili detik (USB 1.1). Mode interrupt dan
isochronous selalu mendapatkan kesempatan pertama pada setiap frame sehingga dapat
dipastikan mereka akan selalu mendapatkan bandwidth yang mereka minta. Mode bulk hanya
dapat mengunakan bandwidth yang tersisa.
Standar USB versi 1.1 mendukung dua jenis kecepatan transfer, mode full speed
dengan 12 MBps dan mode low speed dengan 1.5 MBps. Dengan adanya mode lambat ini
yang lebih kebal Electromagnetic Interference (EMI) maka ongkos pembuatan alat dapat
ditekan. Sedangkan USB 2.0 dapat mencapai kecepatan transfer sampai 480 MBps (mode
high speed).
5
USB dikontrol oleh host, dengan demikian hanya diperbolehkan ada satu host
untuk setiap bus (USB 2.0 memungkinkan suatu protocol negosiasi sehingga dua host
dapat saling memilih untuk menjadi host). Suatu USB host bertanggung jawab penuh
untuk mengontrol dan melangsungkan transaksi. USB menggunakan topologi star
sehingga semua peralatan yang dihubungkan harus memiliki suatu pusat (host atau
hub). Dengan topologi ini diperoleh suatu keuntungan, yaitu pemakain arus oleh setiap
peralata dapat dikontrol dan bahkan bisa diputuskan apabila terjadi kondisi kelebihan
arus.
USB 1.1 memiliki dua standar protocol (Host Controller Interface
Specification), yaitu :
USB 2.0 memiliki protocol khusus untuk mendukungnya yang disebut dengan
Enhanced Host Controller Interface (EHCI) yang dikembangkan oleh Intel, Compaq,
NET, Lucent dan Microsoft. EHCI dikembangkan dengan prinsip standarisasi
sehingga suatu peralatan USB 1.1 akan dapat tetap dapat berjalan pada host USB 2.0.
Untuk dapat me-load driver yang tepar maka suatu peralatan USB memiliki
suatu kode yang disebut Vendor ID (VID) dan Product ID (PID). VID/PID hanya
dapat dikeluarka oleh USB Implementor's Forum dengan mendaftar dan melakukan
pembayaran. Untuk keperluan non komersial (misalnya pendidikan), USB
Implementor's Forum mengijinkan pemakai untuk menggunakan VID/PID milik
pabrik manufakturing IC untuk digunakan pada IC USB ASIC yang didesain sendiri.
Suatu manufaktur juga mungkin menjual PID untuk dipasangkan dengan VID milik
mereka. Suatu pabrik pembuat IC USB kontroler untuk keperluan umum bahkan
mengijinkan VID/PID IC tersebut untuk digunakan.
6
III.1 Spesifikasi Elektrik Sinyal Data
USB menggunakan transmisi data diferensial yang dikodekan dengan metoda NRZI
(Non Return to Zero Invert) untuk mengirim data dengan field sinkronisasi untuk melakukan
sinkronisasi antara clock dari host dan device. Transmitter USB 1.1 menggunakan cara-cara
berikut untuk mengirimkan bit data :
Pada USB 2.0, polaritas sinyal-sinyal tersebut dibalik. Untuk memudahkan maka kode J
dan K digunakan untuk melambangkan status dari transmisi serial tersebut. Pada USB 1.1,
J state adalah diferensial 0 sedangkan pada USB 2.0, J state adalah diferensial 1.
Namun, sebenarnya transceiver USB tidak selalu menggunakan mode diferensial.
Beberapa status dari bus dapat ditunjukkan dari status tunggal D+, D- atau keduanya secara
terpisah. Sebagai contoh, Single Ended Zero (SE0) yang dibuat dengan cara membawa D+
dan D- keduanya ke tegangan lebih kecil dari 0.3V. SE0 apabila diberlakukan selaman lebih
dari 10 mS digunakan untuk me-reset device. Ini berarti sinyal diferensial dan single ended
sama-sama penting, sehingga suatu USB device controller tidak bisa hanya melakukan
sampling pada salah satunya.
Suatu low speed atau full speed bus memiliki impedansi 90 ohm dengan toleransi +/15%. Mode High speed menggunakan constant current source 17.78 mA untuk mengurangi
noise.
High Speed device selalu memulai koneksi sebagai full speed device (1.5k to 3.3V).
Setelah dia akan melakukan high speed chirp (transisi JKJKJK secara cepat) pada sat
device reset untuk meminta koneksi high speed pada host atau hub jika mereka dapat
mendukungnya. Setelah beroperasi pada high speed maka resistor pull-up akan
dinonaktifkan.
8
Suatu USB 2.0 compliant device tidak harus mendukung high speed, sama
halnya bahwa USB 1.1 compliant device tidak harus mendukung full speed dan juga
low speed sekaligus. Namun, suatu high speed device tidak boleh mendukung low
speed. Suatu USB host atau hub yang USB 2.0 compliant harus mendukung semua
mode kecepatan.
Self-powered device
Suatu low-power bus powered device mengambil arus sepenuhnya dari V BUS dan tidak
boleh mengambil arus lebih dari satu unit load yang besarnya 100 mA. Suatu high-power bus
powered device mengambil arus sepenuhnya dari VBUS dan tidak boleh mengambil arus lebih
dari satu unit load pada saat konfiurasi, setelah itu, sesuai spesifikasi yang dideskripsikan
pada saat enumeration, ia dapat mengkonsumsi sampai maksimum 5 unit load (500 mA).
Suatu self-powered device dapat mengambil arus dari VBUS sampai maksimal sebesar 1 unit
load dan menggunakan suplai eksternal untuk sisa kebutuhannya. Apabila karena suatu
kondisi maka suplai eksternal mengalami gangguan peralatan jenis ini harus diatur agar tidak
menggunakan lebih dari 100 mA. Apabila host mematikan VBUS karena suatu hal, maka suatu
self-powered device harus sudah menonaktifkan resistor pull-up atau pull-down ke D+ atau D(yang digunakan untuk identifikasi kecepatan) tidak lebih dari 10 detik.
9
Untuk membatasi arus sesaat (inrush current) pada saat suatu peralatan ditancapkan
(plugged), maka kapasitor decuupling yang boleh digunakan adalah maksimum 10 uF. Untuk
mencegah timbulnya flyback yang muncul pada ujung kabel pada saat suatu peralatan
dilepaskan (unplugged), maka harus digunakan kapasitor decoupling dengan ukuran minimal
1 uF.
High speed bus akan mengirim micro-frame setiap 125.0 uS +/- 62.5 nS
Full speed bus akan mengirim frame setiap 1.0 mS +/- 500 nS
Low speed bus akan mengirim sebuah keep-alive, yang adalah suatu kode End of
Packet (EOP) setiap 1.0 mS hanya dan hanya jika tidak ada low speed data yang perlu
dikirim.
Suatu peralatan USB akan kembali aktif apabila ia mendeteksi adanya sembarang sinyal pada
bus. Peralatan yang memiliki kemampuan remote wakeup diperbolehkan untuk memberikan
sinyal pada host untuk meminta host kembali aktif.
10
Setiap transaksi USB terdiri atas :
Token packet, merupakan header yang mendefinisikan paket apa selanjutnya yang
mengikutinya.
Sistem USB adalah terpusat pada host, ini berarti suatu peralatan USB tidak dapat mengirim
data pada host tanpa diminta. Host akan mengirim token packet yang berisi kode apakah host
akan mengirim atau meminta data ke atau dari device.
Sync, setiap paket harus diawali dengan field ini. Field ini terdiri atas 8 bit pada
low dan full speed dan 32 bit pada high speed. Paket ini berguna untuk melakukan
sinkronisasi clock antara host dan device.
PID, PID adalah Packet ID. Paket ini berguna sebagai identifikasi dari tipe paket
yang sedang dikirim.
Group
PID Value
Packet Identifier
Token
0001
OUT Token
1001
IN Token
0101
SOF Token
1101
SETUP Token
0011
DATA0
1011
DATA1
0111
DATA2
1111
MDATA
0010
ACK Handshake
1010
NAK Handshake
1110
STALL Handshake
0110
Data
Handshake
11
Special
1100
PREamble
1100
ERR
1000
Split
0100
Ping
Terdapat 4 bit untuk setiap ID, tetapi untuk memastikan agar diterima secara tepat
maka 4 bit tersebut di-invert dan diulang sehingga total menjadi 8 bit sebagai
berikut :
PID0
PID1
PID2
PID3
nPID0
nPID1
nPID2
nPID3
ADDR, paket ini berukuran 7 bit dan berisi alamat ke device manakah paket ini
ditujukan. Alamat 0 adalah tidak valid.
CRC, suatu cyclic redundancy checks diterapkan pada setiap data yang dikirim.
Setiap token packet memiliki 5 bit CRC sedangkan paket data memiliki CRC 16
bit.
EOP, menunjukan akhir paket (end of packet). Ditransmisikan dalam wujud Single
Ended Zero (SE0) selama kira-kira waktu 2 bit dan diikuti dengan sebuah J selama
waktu 1 bit.
PID
ADDR
ENDP
CRC5
EOP
12
Data Packet, terdapat dua tipe data untuk USB 1.1, yaitu :
o Data0
o Data1
USB 2.0 memiliki jenis data tambahan :
o Data2
o MData
Paket ini memiliki format sebagai berikut :
Sync
PID
Data
CRC16
EOP
Ukuran data maksimum untuk low-speed device adalah 8 byte, untuk full-speed
device adalah 1023 byte dan untuk high-speed device adalah 1024 byte.
Handshake Packet, paket ini hanya berisi PID dan memiliki 3 tipe :
o ACK, suatu acknowledgment yang menunjukkan bahwa paket telah
dikirim dengan sukses.
o NAK, suatu tanda bahwa device untuk sementara waktu tidak dapat
menerima atau mengirim data. Dalam transaksi tipe interrupt juga
digunakan untuk memberi informasi pada host bahwa tidak ada data yang
harus dikirim.
o STALL, suatu kondisi yang menyatakan bahwa device dalam kondisi stall
sehingga dibutuhkan tindakan dari host.
Secara lengkap, paket ini memiliki format sebagai berikut :
Sync
PID
EOP
PID
Frame Number
CRC5
EOP
13
Pada saat peralatan USB mengirim dan menerima data ke dan dari endpoint, maka
client software akan mentransfer data tersebut melalui sesuatu yang disebut dengan pipe.
Suatu pipe adalah sebuah logical connection antara host dan endpoint. Suatu pipe juga
dikonfigurasikan oleh beberapa parameter :
Suatu peralatan USB selalu dan harus memiliki sebuah default pipe yaitu bi-directional pipe
yang dihubungkan dengan endpoint zero out (EP0 OUT) dan endpoint zero in (EP0 IN).
Terdapat dua jenis pipe :
Stream Pipe, tidak memiliki format data yang khusus. Melakukan transfer data
secara sekuensial sesuai arah yang telah dikonfigurasikan sebelumnya. Digunakan
untuk transfer data bulk, interrupt dan isochronous.
Message Pipe, memiliki format data khusus. Merupakan pipe khusus yang
digunakan untuk transfer data control.
Setup Stage, adalah pada saat request dikirimkan. Terdiri atas 3 paket, yaitu :
o Setup Token, yang berisi alamat dan nomor endpoint
o Data Packet, yang selalu memiliki PID Data0, digunakan untuk
mendeskripsikan request.
o Handshake Packet, berupa ACK yang akan dikirimkan oleh peralatan
apabila data kontrol yang diterima benar (PID dan CRC benar). Apabila
terjadi kesalahan maka device akan dan harus membiarkan (ignore) paket
kontrol tersebut tanpa mengirim NAK ataupun STALL.
14
Data Stage, bersifat opsional dan dapat tersusun atas satu atau beberapa transfer
IN atau OUT. Prinsip pengiriman data adalah sebagi berikut :
o Tipe IN, host ingin menerima data kontrol dari device. Apabila Setup Stage
yang telah diterima sebelumnya (berisi permintaan IN) benar maka device
akan mengirimkan data yang diminta atau NAK apabila tidak ada data
yang dikirim.
o Tipe OUT, host ingin mengirim data ke device. Setelah Setup Stage maka
host akan langsung mengirimkan data yang dimaksud. Apabila device
sukses menerima maka device akan mengirim ACK, apabila sedang sibuk
akan mengirim NAK, sedangkan apabila ada kesalahan pada endpoint
maka akan dikirim STALL.
Status Stage, digunakan untuk melaporkan hasil dari request secara keseluruhan.
o Apabila Setup Stage berisi tipe IN maka setelah host menerima data dengan
benar dari device, host akan mengirim token OUT yang diikuti dengan zero
length data packet. Device akan mengirim ACK apabila telah siap
menerima perintah selanjutnya, apabila masih sibuk akan dikirim NAK.
Apabila terjadi kesalahan akan dikirim STALL.
15
o OUT, apabila Setup Stage berisi tipe OUT maka setelah mengirim data,
host akan mengirim token IN yang akan direspon oleh device dengan
mengirim zero length Data0 untuk mengindikasikan sukses dan NAK
untuk meminta pengiriman diulang. Apabila ada kesalahan, akan dikirim
STALL.
Pada saat enumeration maka untuk meminta device descriptor dari device, maka host
akan mengirim Setup Packet pada EP0 yang tersusun atas 3 tahap :
1. Setup Token
Sync
PID
ADDR
2. Data0 Packet
Sync
PID
Data0
3. Ack Handshake
Sync
PID
EOP
ENDP
CRC5
EOP
CRC16
EOP
Apabila device dapat menerima 3 tahap diatas dengan baik, maka IN request selanjutnya dari
host maka device akan mengirimkan data-datanya dalam 1x3 atau 2x3 tahap :
1. In Token
Sync
PID
ADDR
2. Data0 Packet
Sync
PID
3. Ack Handshake
Sync
PID
EOP
1. In Token
Sync
PID
ADDR
2. Data1 Packet
Sync
PID
3. Ack Handshake
Sync
PID
ENDP
Data0
EOP
CRC16
EOP
First 8 Bytes of
Device Descriptor
ENDP
Data1
EOP
CRC5
CRC5
EOP
CRC16
EOP
16
Jika sukses make host akan mengirim zero length packet. Device akan membalas dengan
paket status :
1. Out Token
Sync
PID
ADDR
2. Data0 Packet
Sync
PID
Data0
3. Ack Handshake
Sync
PID
EOP
ENDP
CRC5
EOP
CRC16
EOP
Error detection
Pada kecepatan rendah, ukuran data maksimum adalah 8 byte. Pada kecepatan penuh
(full speed) ukuran data maksimum adalah 64 byte. Sedangkan pada kecepatan tinggi dapat
mencapai 1024 byte.
17
IV.3.3 Isochronous Transfer
Tipe transfer ini digunakan pada umumnya untuk melakukan streaming pada data
audio dan video yang sangat sensitif dengan waktu. Transfer jenis ini memiliki spesifikasi
sebagai berikut :
Bandwidth dijamin sehingga pada saat setup akan ditolak (denied) oleh hosi
apabila bandwidth bus tersisa tidak mencukupi
Error detection dengan CRC namun host tidak akan mengirim ulang data yang
salah
No data toggling (data tidak berubah-ubah tipe dari Data0 dan Data1)
Pada kecepatan penuh (full speed) ukuran data maksimum adalah 1023 byte.
Sedangkan pada kecepatan tinggi dapat mencapai 1024 byte. Tidak ada handshake packet
yang dapat dikirim oleh device untuk menyatakan sukses tidaknya transfer (ACK, NAK atau
STALL).
Error detection dengan CRC dan host akan mengirim ulang data yang salah
Pada kecepatan penuh (full speed) ukuran paket adalah 6/16/32/64 byte. Sedangkan pada
kecepatan tinggi dapat mencapai 512 byte.
18
19
Setiap descriptor diatas tersusun atas format sebagai berikut :
Offset
Field
Size
Value
Description
bLength
Number
bDescriptionType
Constant
DescriptorType
...
...
Apabila dalam praktek, ukuran dari descriptor yang diterima host lebih kecil atau lebih besar
dari yang dispesifikasikan maka host akan membiarkan hal itu. returned.
Field
Size
Value
Description
bLength
Number
bDescriptorType
Constant
bcdUSB
BCD
bDeviceClass
Class
bDeviceSubClass
SubClass
bDeviceProtocol
Protocol
bMaxPacketSize
Number
idVendor
ID
10
idProduct
ID
12
bcdDevice
BCD
14
iManufacturer
Index
15
iProduct
Index
16
iSerialNumber
Index
17
bNumConfigurations
Integer
20
bcdUSB menyatakan versi USB terbaru yang didukung oleh device. Harga ini dikodekan
dalam BCD (Binary Coded Decimal) dalam bentuk 0xJJMN dengan JJ adalah versi mayor, M
adalah versi minor dan N adalah versi sub minor. Pada USB 1.0 harga tersebut adalah
0x0100, untuk USB 1.1 adalah 0x0110 dan untuk USB 2.0 adalah 0x0200.
idVendor dan idProduct digunakan oleh sistem operasi untuk me-load driver yang sesuai.
Vendor ID ditetapkan oleh USB-IF.
bcdDevice yang dikodekan dalam BCD berisi vers dari device yang dibuat oleh vendor.
iManufacturer, iProduct dan iSerialNumber merupakan data string opsional yang berisi
detail dari peralatan, apabila tidak digunakan harus diisi index nol.
Field
Size
Value
Description
bLength
Number
bDescriptorType
Constant
wTotalLength
Number
bNumInterfaces
Number
Number of Interfaces
bConfigurationValue
Number
iConfiguration
Index
21
Offset
Field
Size
Value
Description
bmAttributes
Bitmap
bMaxPower
mA
Suatu konfigurasi pada dasarnya adalah suatu hirarki dengan ukuran total
wTotalLength yang berbentuk :
bConfigurationValue berisi kode yang akan dikembalikan host pada saat menyetujui salah
satu konfigurasi yang ditawarkan.
iConfiguration adalah indek ke suatu string yang berisi teks informasi tentang konfigurasi.
22
bMaxPower menunjukkan arus maksimum yang akan dipakai device dalam satuan per 2 mA
sampai maksimum 500 mA.
Field
Size
Value
Description
bLength
Number
bDescriptorType
Constant
bInterfaceNumber
Number
Number of Interface
bAlternateSetting
Number
bNumEndpoints
Number
bInterfaceClass
Class
bInterfaceSubClass
SubClass
bInterfaceProtocol
Protocol
iInterface
Index
23
bNumEndpoints berisi jumlah endpoint yang dimiliki device tanpa menghitung EP0.
bInterfaceClass,
bInterfaceSubClass
dan
bInterfaceProtocol
digunakan
untuk
mendefinisikan class standar yang didukung oleh device, misalnya HID (Human Interface
Device), communications, mass storage, dan lain-lain.
Field
Size
Value
Description
bLength
Number
bDescriptorType
Constant
bEndpointAddress
Endpoint
Endpoint Address
Bits 0..3b Endpoint Number.
Bits 4..6b Reserved. Set to Zero
Bits 7 Direction 0 = Out, 1 = In (Ignored for Control Endpoints)
24
Offset
3
Field
bmAttributes
Size
1
Value
Bitmap
Description
Bits 0..1 Transfer Type
00 = Control
01 = Isochronous
10 = Bulk
11 = Interrupt
Bits 2..7 are reserved.
If Isochronous endpoint,
Bits 3..2 = Synchronisation Type (Iso Mode)
00 = No Synchonisation
01 = Asynchronous
10 = Adaptive
11 = Synchronous
Bits 5..4 = Usage Type (Iso Mode)
00 = Data Endpoint
01 = Feedback Endpoint
10 = Explicit Feedback Data Endpoint
11 = Reserved
4
wMaxPacketSize
Number
bInterval
Number
bInterval menunjukkan interval pooling dalam satuan frame, ini berarti kelipatan dari setiap
1 mS untuk low / full speed dan 125 uS untuk high speed.
25
IV.5.5 String Descriptor
Digunakan untuk menampung informasi-informasi tambahan. Apabila tidak
digunakan haris diisi dengan nol. Dikodekan dalam format Unicode. String indeks 0 harus
berisi daftar dari bahasa yang didukung. Format untuk string descriptor zero adalah sebagai
berikut :
Offset
Field
Size
Value
Description
bLength
Number
bDescriptorType
Constant
wLANGID[0]
number
wLANGID[1]
number
wLANGID[x]
number
Field
Size
Value
Description
Blength
Number
BdescriptorType
Constant
Bstring
Unicode
Standard Device requests tanpa data stage harus selesai dalam 50 mS.
Standard Device requests dengan data stage harus mulai mengirim data dalam 500
mS. Setiap paket data berurutan harus dikirim dalam maksimal 500 mS setelah
paket sebelumnya. Status stage harus selesai maksimal dalam 50 mS setelah paket
data terakhir ditransmisikan.
SetAddress command harus selesai dalam 50 mS, untuk kemudian device memiliki
setidaknya 2 mS untuk mengubah address internalnya sebelum request selanjutnya
dikirimkan.
26
Setiap request memiliki format sebagai berikut :
Offset
Field
Size
Value
Description
bmRequestType
Bit-Map
bRequest
Value
Request
wValue
Value
Value
wIndex
Index or Offset
Index
wLength
Count
wLength berisi panjang data yang akan mengikuti (bila ada data phase).
bRequest
wValue
wIndex
wLength
Data
1000 0000b
GET_STATUS (0x00)
Zero
Zero
Two
Device Status
0000 0000b
CLEAR_FEATURE
(0x01)
Feature
Selector
Zero
Zero
None
0000 0000b
SET_FEATURE (0x03)
Feature
Selector
Zero
Zero
None
27
bmRequestType
bRequest
wValue
wIndex
wLength
Data
0000 0000b
SET_ADDRESS (0x05)
Device Address
Zero
Zero
None
1000 0000b
GET_DESCRIPTOR
(0x06)
Descriptor
Type & Index
Zero
or
Language
ID
Descriptor
Length
Descriptor
0000 0000b
SET_DESCRIPTOR
(0x07)
Descriptor
Type & Index
Zero
or
Language
ID
Descriptor
Length
Descriptor
1000 0000b
GET_CONFIGURATION
(0x08)
Zero
Zero
Configuration
Value
0000 0000b
SET_CONFIGURATION
(0x09)
Configuration
Value
Zero
Zero
None
Get Status request akan membuat device mengembalikan 2 byte pada data phase dengan
format sebagai berikut :
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
Reserved
D5
D4
D3
D2
D1
D0
Remote
Wakeup
Self
Powered
Clear Feature dan Set Feature dapat digunakan untuk mengeset suatu harga boolean. Fitur
yang dapat diset adalah DEVICE_REMOTE_WAKEUP dan TEST_MODE.
Set Address digunakan pada saat enumerasi untuk memberikan alamt unik pada peralatan
USB. Suatu USB device akan mengeset alamat internalnya dengan alamat yang diberikan Set
Address setelah keseluruhan status stage komplit.
Get Descriptor atau Set Descriptor digunakan untuk mengambil dan menentukan informasi
mengenai suatu deskriptor. Permintaan untuk mengirim configuration descriptor akan
mengembalikan keseluruhan device descriptor lengkap dengan semua interface dan endpoint
descriptor pada satu transaksi. Suatu interface dan endpoint descriptor tidak dapat diakses
secara langsung dengan request ini. String descriptor mengandung ID dari suatu bahasa untuk
memungkinkan dukungan pada banyak bahasa.
28
Get Configuration digunakan untuk mengambil informasi mengenai konfigurasi aktif dari
suatu peralatan. Harga nol apabila dikembalikan menyatakan bahwa device tidak
terkonfigurasi sedangkan harga bukan nol menunjukkan bahwa device telah terkonfigurasi.
Set Configuration digunakan untuk mengaktifkan suatu device. Request ini memberikan
harga bConfigurationValue (pada byte rendah dari wValue) yang telah dikirimkan melalui
configuration descriptor sebelumnya untuk menyatakan persetujuan host terhadap konfigurasi
yang diminta.
bRequest
wValue
wIndex
wLength
Data
1000 0001b
GET_STATUS (0x00)
Zero
Interface
Two
Interface Status
0000 0001b
CLEAR_FEATURE
(0x01)
Feature Selector
Interface
Zero
None
0000 0001b
SET_FEATURE (0x03)
Feature Selector
Interface
Zero
None
1000 0001b
GET_INTERFACE
(0x0A)
Zero
Interface
One
Alternate
Interface
0000 0001b
SET_INTERFACE (0x11)
Alternative
Setting
Interface
Zero
None
wIndex berisi nomor interface yang dimana request tersebut ditujukan dengan format sebagai
berikut :
D15
D14
D13
D12
D11
D10
D9
D8
D7
Reserved
D6
D5
D4
D3
D2
D1
D0
Interface Number
Get Status digunakan untuk meminta status dari suatu interface. Untuk sekarang, device harus
mengembalikan dua byte, yaitu : 0x00, 0x00. Fungsi ini dicadangkan untuk masa depan.
Clear Feature dan Set Feature digunakan untuk menagaktifkan dan menonaktifkan fitur dari
interface. Fungsi ini dicadangkan untuk masa depan.
29
Get Interface dan Set Interface digunakan untuk mengaktifkan konfigurasi interface
alternatif.
bRequest
wValue
Windex
wLength
Data
1000 0010b
GET_STATUS (0x00)
Zero
Endpoint
Two
Endpoint Status
0000 0010b
CLEAR_FEATURE (0x01)
Feature Selector
Endpoint
Zero
None
0000 0010b
SET_FEATURE (0x03)
Feature Selector
Endpoint
Zero
None
1000 0010b
SYNCH_FRAME (0x12)
Zero
Endpoint
Two
FrameNumber
wIndex berisi informasi arah aliran data dan nomor endpoint dengan format sebagai berikut :
D15
D14
D13
D12
D11
D10
D9
D8
Reserved
D7
D6
Dir
D5
D4
Reserved
D3
D2
D1
D0
Endpoint Number
Get Status digunakan untuk mengetahui apakah suatu endpoint berada dalam keadaan stall
atau halt.
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
Reserved
D1
D0
Halt
Clear Feature dan Set Feature digunakan untuk mengaktifkan atau mematikan fitur dari
suatu endpoint. Untuk sekarang hanya ada satu fitur, yaitu ENDPOINT_HALT (0x00), yang
memungkinkan host untuk meng-stall dan meng-clear suatu endpoint. Suatu endpoint selain
EP0 sebaiknya dikonfigurasi untuk memiliki fitur ini.
30
31
32
33
34
35
VI. Program Demo Rangkaian Modul USB
Dibawah ini disertakan 4 buah program demo untuk digunakan pada board rangkaian
USB seperti yang digambarkan pada poin V diatas.
// ***** Demo Circuit : Buttons & LEDs
// *****
#include
#include
#include
C++ Headers
<conio.h>
<stdio.h>
<windows.h>
LEDs Circuit
0x000000FF
0x00000100
0x00000200
36
printf(" * Press SW2 to reverse the direction\n");
printf(" * Press SW1 & SW2 to exit\n\n");
for(;;)
{
// Read port
if(DAPI_ReadIoPorts(hDev, (long *) &dwIn) == 0) goto ERRRead;
// Check the read value
if(dwIn & EZ_RDMASK_SW1)
{
while(dwIn & EZ_RDMASK_SW1)
{
if(dwIn & EZ_RDMASK_SW2) goto DoExit;
if(DAPI_ReadIoPorts(hDev, (long *) &dwIn) == 0) goto ERRRead;
}
}
else if(dwIn & EZ_RDMASK_SW2)
{
// Pause till released
while(dwIn & EZ_RDMASK_SW2)
{
if(dwIn & EZ_RDMASK_SW1) goto DoExit;
if(DAPI_ReadIoPorts(hDev, (long *) &dwIn) == 0) goto ERRRead;
}
// Reverse the direction
cDir = -cDir;
}
// Write port
if(DAPI_WriteIoPorts(hDev, DWORD(aucData[cCnt]), EZ_WRMASK_BAL) == 0) goto
ERRWrite;
// Update counter
cCnt += cDir;
if(cCnt > 7) cCnt = 0;
if(cCnt < 0) cCnt = 7;
// Wait
Sleep(200);
if(kbhit()) getch();
}
// ..... Exiting
DoExit:;
DAPI_WriteIoPorts(hDev, 0x00000000, EZ_WRMASK_BAL);
DAPI_CloseDeviceInstance(hDev);
printf("Press any key to exit ...\n");
getch(); return(0);
// ..... Error handlers
ERROpen:
printf("Couldn't open USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRConfig:
DAPI_CloseDeviceInstance(hDev);
printf("Set port configuration of USBI2CIO device failed !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRRead:
DAPI_CloseDeviceInstance(hDev);
printf("Error reading ports from USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRWrite:
DAPI_CloseDeviceInstance(hDev);
printf("Error writing ports to USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
}
37
// ***** Demo Circuit : ADC
// *****
#include
#include
#include
C++ Headers
<conio.h>
<stdio.h>
<windows.h>
LEDs Circuit
0x000000FF
0x00000100
0x00000200
38
if(DAPI_ReadIoPorts(hDev, (long *) &dwIn) == 0) goto ERRRead;
if(DAPI_WriteIoPorts(hDev, 0xFFFFFFFF, EZ_WRMASK_ADC_RD) == 0) goto ERRWrite;
ucData = (unsigned char) ((dwIn & 0x0000FF00) >> 8);
// Print the read value
if(ucData != ucOld)
{
ucOld = ucData;
printf("%03d\n", ucData);
}
// Wait
if(kbhit())
{
DAPI_CloseDeviceInstance(hDev);
getch(); return(0);
}
}
return(0);
// ..... Error handlers
ERROpen:
printf("Couldn't open USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRConfig:
DAPI_CloseDeviceInstance(hDev);
printf("Set port configuration of USBI2CIO device failed !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRRead:
DAPI_CloseDeviceInstance(hDev);
printf("Error reading ports from USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRWrite:
DAPI_CloseDeviceInstance(hDev);
printf("Error writing ports to USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
}
39
// ***** Demo Circuit : DAC
// *****
#include
#include
#include
C++ Headers
<conio.h>
<stdio.h>
<windows.h>
LEDs Circuit
0x000000FF
0x00000100
0x00000200
40
// Wait
if(kbhit())
{
DAPI_WriteIoPorts(hDev, 0x00000000, EZ_WRMASK_DAC_DTA);
DAPI_CloseDeviceInstance(hDev);
getch(); return(0);
}
}
// ..... Error handlers
ERROpen:
printf("Couldn't open USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRConfig:
DAPI_CloseDeviceInstance(hDev);
printf("Set port configuration of USBI2CIO device failed !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRWrite:
DAPI_CloseDeviceInstance(hDev);
printf("Error writing ports to USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
}
41
// ***** Demo Circuit : ADC-DAC
// *****
#include
#include
#include
C++ Headers
<conio.h>
<stdio.h>
<windows.h>
LEDs Circuit
0x000000FF
0x00000100
0x00000200
42
for(;;)
{
if(DAPI_ReadIoPorts(hDev, (long *) &dwIn) == 0) goto ERRRead;
if(!(dwIn & EZ_RDMASK_ADC_INT))
{
// Read port
if(DAPI_WriteIoPorts(hDev, 0x00000000, EZ_WRMASK_ADC_RD) == 0) goto ERRWrite;
if(DAPI_ReadIoPorts(hDev, (long *) &dwIn) == 0) goto ERRRead;
if(DAPI_WriteIoPorts(hDev, 0xFFFFFFFF, EZ_WRMASK_ADC_RD) == 0) goto ERRWrite;
ucData = (unsigned char) ((dwIn & 0x0000FF00) >> 8);
break;
}
}
// Write port
if(DAPI_WriteIoPorts(hDev, DWORD(ucData & ucTm), EZ_WRMASK_DAC_DTA) == 0) goto
ERRWrite;
// Update data
if(ucTm)
ucTm = 0;
else
ucTm = 255;
// Wait
if(kbhit())
{
DAPI_CloseDeviceInstance(hDev);
getch(); return(0);
}
}
return(0);
// ..... Error handlers
ERROpen:
printf("Couldn't open USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRConfig:
DAPI_CloseDeviceInstance(hDev);
printf("Set port configuration of USBI2CIO device failed !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRRead:
DAPI_CloseDeviceInstance(hDev);
printf("Error reading ports from USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
ERRWrite:
DAPI_CloseDeviceInstance(hDev);
printf("Error writing ports to USBI2CIO device !\n");
printf("Press any key to exit ...\n");
getch(); return(-1);
}
43
VII. Daftar Pustaka
http://computer.howstuffworks.com/usb.htm/printable
http://www.beyondlogic.org/usbnutshell/usb1.htm
http://www.beyondlogic.org/usbnutshell/usb2.htm
http://www.beyondlogic.org/usbnutshell/usb3.htm
http://www.beyondlogic.org/usbnutshell/usb4.htm
http://www.beyondlogic.org/usbnutshell/usb5.htm
http://www.beyondlogic.org/usbnutshell/usb6.htm