INTERFACE USB

DEFINISI
Universal Serial Bus adalah standar bus
serial untuk perangkat penghubung, biasanya kepada komputer namun
juga digunakan di peralatan lainnya seperti konsol
permainan, ponsel dan PDA.
USB ialah port yang sangat diandalkan saat ini dengan bentuknya yang kecil dan
kecepatan datanya yang tinggi. Anda dapat menghubungkan hingga 127 produk usb
dalam 1 komputer. USB versi 1.1 mendukung 2 kecepatan yaitu mode kecepatan
penuh 12Mbits/s dan kecepatan rendah 1.5 Mbits/s. USB 2.0 mempunyai kecepatan
480Mbits/s yang dikenal sebagai mode kecepatan tinggi.
Sistem USB
mempunyai desain yang asimetris, yang terdiri dari
pengontrol host dan
beberapa peralatan terhubung yang berbentuk pohon dengan
menggunakan peralatan hub yang
khusus.
Desain USB
ditujukan untuk menghilangkan perlunya penambahan expansion card ke ISA komputer
atau bus PCI, dan
memperbaiki kemampuan plug-and-play (pasang-dan-mainkan) dengan
memperbolehkan peralatan-peralatan ditukar atau ditambah ke sistem tanpa
perlu mereboot
komputer. Ketika USB dipasang, ia langsung dikenal sistem komputer dan memroses
device
driver yang diperlukan untuk menjalankannya.
Saat ini transfer
data menggunakan port USB sudah semakin marak, port USB menjadi pilihan utama
karena ukuran yang ringkas dan kecepatan transfer data yang cukup besar.
Sebagai perbandingan, Bus PCI saat ini mendukung transfer data hingga 132
MB/s, dimana AGP (pada 66MHz) mendukung hingga 533 MB/s. AGP dapat
melakukan ini karena kemampuannya untuk mentransfer data pada ujung naik dan
turun detak 66MHz.

Perbedaan paling
mencolok antara versi 2.0 dan lama adalah kecepatan transfer yang jauh
meningkat. Kecepatan transfer data USB dibagi menjadi tiga, antara lain:
·
High speed data dengan
frekuensi clock 480.00Mb/s dan tolerasi pensinyalan data pada ± 500ppm.
·
Full speed data dengan
frekuensi clock 12.000Mb/s dan tolerasi pensinyalan data pada ±0.25% atau
2,500ppm.
·
Low speed data dengan frekuensi
clock 1.50Mb/s dan tolerasi pensinyalan data pada ±1.5% atau 15,000ppm.
USB 3.0 (Super-Speed USB) meningkatkan
data rate hingga 4,8 Gbit / s, 600 MB / s. USB 3.0 port dan kabel yang
dirancang untuk memungkinkan kompatibilitas ke belakang, sehingga konektor baru
dan kabel berisi antarmuka USB 3.0 dan USB 2.0 interface.

USB 3.0 konektor berisi pin warisan untuk
antarmuka untuk perangkat USB 2.0, dan satu set baru pin untuk USB 3.0
konektivitas (kedua set berada di konektor yang sama).
Catatan editor, ketika standar baru pertama
kali diumumkan USB 3.0 akan menambahkan sebuah antarmuka serat; 'masa
depan-pemeriksaan untuk kemampuan optik'. Namun, standar akhir yang digunakan
'seperti' sebuah antarmuka PCIe untuk menambah kemampuan USB 3.0.
USB [Universal Serial Bus] mendefinisikan
lapisan Mekanikal, Listrik dan Protokol antarmuka. USB terdiri dari 2 jenis
perangkat keras, Hub dan Fungsi. Sampai dengan 127 perangkat dapat dihubungkan
bersama-sama dalam Bus Topologi. Faktor pembatas terdiri 7 bit alamat. Segmen
kawat fisik point-to-point antara Host, Hub, atau Fungsi. Sistem hanya dapat
memiliki satu host, yang menghubungkan ke Hub seorang. Sebuah USB Hub dapat
terhubung ke Hub lain atau ke Fungsi USB. Setiap lapisan transisi dari Hub ke
Hub merupakan Tier lain. Hub USB memungkinkan koneksi ke bus USB, sementara
Fungsi Usb adalah perangkat yang melakukan beberapa fungsi.

PERANGKAT INTERFACE
Konektor USB (Tipe A dan B)
Nomor kaki
(dilihat pada soket):
Kaki
|
Fungsi
|
|
|
1
|
VBUS (4.75–5.25 V)
|
|
2
|
D−
|
|
3
|
D+
|
|
4
|
|
|
Shell
|

Konfigurasi pin konektor USB Standard A / B, dilihat dari wajah plug
Standard tipe A
Standard-A jenis konektor USB adalah persegi panjang pipih yang memasukkan ke dalam wadah "hilir-port" pada host USB, atau hub, dan membawa kedua daya dan data. Sumbat ini sering terlihat pada kabel yang secara permanen terpasang ke perangkat, misalnya sebagai salah satu menghubungkan keyboard atau mouse ke komputer melalui koneksi usb. Koneksi USB pada akhirnya aus sebagai mengendur koneksi melalui diulang plugging dan mencabut. Umur laki-laki A Konektor USB adalah sekitar 1.500 terhubung / disconnect siklus.
Ada konektor perempuan-perempuan.
Adaptor terdiri dari wadah B dan Standar-Standar-wadah A digunakan untuk menghubungkan dua kabel
Standar tipe B
Sebuah plug Standar-B-yang memiliki bentuk persegi dengan colokan eksterior sudut-biasanya miring ke dalam "stop kontak hulu" pada perangkat yang menggunakan kabel dilepas, misalnya printer. Sebuah plug Tipe B menghasilkan tenaga selain membawa data. Pada beberapa perangkat, wadah Tipe B tidak memiliki sambungan data, digunakan hanya untuk menerima daya dari perangkat hulu. Ini-konektor tipe skema dua (A / B) mencegah pengguna sebuah dari sengaja membuat loop listrik .
PERIPHERAL
Ada tiga komponen
phisik pada USB sistem. Ini meliputi host ( komputer), hubs,
devise. Semua
connectors adalah one-size-fits-all, maka suatu alat dapat diisi secara
langsung ke dalam
host, ke dalam suatu pusat kegiatan yang mana
pada gilirannya diisi
ke dalam host.
USB dapat
menghubungkan peralatan tambahan komputer seperti mouse, keyboard, pemindai
gambar, kamera digital, printer, hard disk,
dan komponen networking. USB kini telah menjadi standar
bagi peralatan multimedia seperti pemindai gambar
dan kamera digital.
![]() |
![]() |
![]() |
|||
Peripheral USB pada PC

Perancangan peralatan yang menggunakan USB
Untuk membuat
suatu peralatan yang dapat berkomunikasi dengan protokol USB tidak perlu harus
mengetahui secara rinci protokol USB. Bahkan kadang tidak perlu pengetahuan
tentang USB protokol sama sekali. Pengetahuan tentang USB protokol hanya
diperlukan untuk mengetahui spesifikasi yang dibutuhkan untuk alat kita. Pada
kenyataannya untuk mengimplemetasikan USB protokol di FPGA. Field-Programmable Gate Array (FPGA)
adalah komponen elektronika dan semikonduktor
yang mempunyai komponen gerbang terprogram (programmable logic) dan sambungan
terprogram ataupun perangkat bantu lain sangat tidak efisien dan banyak waktu
terbuang untuk merancangnya. Menggunakan kontroler USB sangat lebih
dianjurkan dalam membuat alat yang dapat berkomunikasi melalui protokol ini.
Kontroler USB mempunyai banyak macam bentuk, dari microcontroller berbasis 8051
yang mempunyai input output USB secara langsung sampai pengubah protocol dari
serial seperti I2C bus ke USB.
USB controller
biasanya dijual dengan disertai berbagai fasilitas yang mempermudah
pengembangan alat, diantaranya manual yang lengkap, driver untuk windows XP,
contoh code aplikasi untuk mengakses USB, contoh code untuk USB controller, dan
skema rangkaian elektronikanya.

Contoh Gambar FPGA
Dalam sisi
pengembangan software aplikasi dalam personal computer, komunikasi antar
hardware di dalam perangkat keras USB tidak terlalu diperhatikan karena Windows
ataupun sistem operasi lain yang akan mengurusnya. Pengembang perangkat lunak
hanya memberikan data yang akan dikirim ke alat USB di buffer penyimpan dan
membaca data dari alat USB dari buffer pembaca. Untuk driver pun kadang-kadang
Windows sudah menyediakannya, kecuali untuk peralatan yang mempunyai
spesifikasi khusus kita harus membuatnya sendiri.
METODE PENGIRIMAN
Persinyalan USB
USB adalah host-centric
bus di mana host/terminal induk memulai semua transaksi. Paket
pertama/penanda (token) awal dihasilkan oleh host untuk menjelaskan apakah paket
yang mengikutinya akan dibaca atau ditulis dan apa tujuan dari perangkat dan
titik akhir. Paket berikutnya adalah data paket yang diikuti oleh handshaking
packet yang melaporkan apakah data atau penanda sudah diterima dengan baik
atau pun titik akhir gagal menerima data dengan baik.
Setiap proses
transaksi pada USB terdiri atas:
- Paket token/sinyal penanda (Header yang menjelaskan data yang
mengikutinya)
- Pilihan paket data (termasuk tingkat muatan) dan
- Status paket (untuk acknowledge/pemberitahuan hasil transaksi
dan untuk koreksi kesalahan)
Paket data umum USB
Data di bus USB
disalurkan dengan cara mendahulukan Least Significant Bit(LSB). LSB adalah bagian
dari barisan data biner (basis dua)
yang mempunyai nilai paling tidak berarti/paling kecil.
Paket-paket USB terdiri dari data-data berikut
ini:
- Sync
Semua paket harus
diawali dengan data sync. Sync adalah data 8 bit untuk low dan full speed atau
data 32 bit untuk high speed yang digunakan untuk mensinkronkan clock dari
penerima dengan pemancar. Dua bit terakhir mengindikasikan dimana data PID
dimulai.
- PID (Packet Identity/Identitas paket)
Adalah field untuk
menandakan tipe dari paket yang sedang dikirim. Tabel dibawah ini menunjukkan
nilai-nilai PID:
Group
|
Nilai PID
|
Identitas Paket
|
Token
|
0001
|
OUT Token
|
Token
|
1001
|
IN Token
|
Token
|
0101
|
SOF Token
|
Token
|
1101
|
SETUP Token
|
Data
|
0011
|
DATA0
|
Data
|
1011
|
DATA1
|
Data
|
0111
|
DATA2
|
Data
|
1111
|
MDATA
|
Handshake
|
0010
|
ACK Handshake
|
Handshake
|
1010
|
NAK Handshake
|
Handshake
|
1110
|
STALL Handshake
|
Handshake
|
0110
|
NYET (No Response Yet)
|
Special
|
1100
|
PREamble
|
Special
|
1100
|
ERR
|
Special
|
1000
|
Split
|
Special
|
0100
|
Ping
|
Ada 4 bit PID
data, supaya yakin diterima dengan benar, 4 bit di komplementasikan dan
diulang, menjadikan 8 bit data PID. Hasil dari pengaturan tersebut adalah
sebagai berikut.
PID0
|
PID1
|
PID2
|
PID3
|
nPID0
|
nPID1
|
nPID2
|
nPID3
|
- ADDR (address)
Bagian alamat dari
peralatan dimana paket digunakan. Dengan lebar 7 bit, 127 peralatan dapat
disambungkan. Alamat 0 tidak sah, peralatan yang belum terdaftar harus merespon
paket yang dikirim ke alamat 0.
- ENDP (End point)
Titik akhir dari
field yang terdiri dari 4 bit, menjadikan 16 kemungkinan titik akhir. Low speed
devices, hanya dapat mempunyai 2 tambahan end point pada puncak dari pipe
default. (maksimal 4 endpoints)
- CRC
Cyclic Redundancy Check dijalankan pada
data di dalam paket yang dikirim. Semua penanda (token) paket mempunyai sebuah
5 bit CRC ketika paket data mempunyai sebuah 16 bit CRC.
- EOP (End of packet)
Akhir dari paket
yang disinyalkan dengan satu angka akhir 0 (Single Ended Zero/SEO) untuk
kira-kira 2 kali bit diikuti oleh sebuah J 1 kali.
Data yang dikirim
dalam bus USB adalah salah satu dari 4 bentuk, yaitu control, interrupt, bulk, atau isochronous.

Interrupt

Interface
dengan Mikrokontroller
USB to Microcontroller UART Interface Circuit
Implementation USB into
microcontroller: IgorPlug-USB (AVR)

Level
tegangan/ karakteristik
elektrik

Pada koneksi
USB dengan kecepatan 12 MHz digunakan kabel twisted-pair yang terlindung
dengan impedansi 90W kurang lebih 15% dan delay maksimumnya 26ns.Sedang
impedansi pada drivernya harus antara 28W hingga 44W. Jika di ukur, arus yang
masuk dan keluar piranti USB V1.1 tidak boleh melebihi 10,71 VOH mA.
Tegangan logika yang di masukan ke D+ dan D- tidak boleh melebihi 0.3 VOH untuk
logika rendah dan juga harus turun sebesar 0.7 VOH untuk logika
tinggi.
Karena ada piranti
USB yang berkomunikasi pada kecepatan rendah 1.5 MHz, maka kombinasi kabel dan
piranti USB harus mengandung kapasitas tunggal dengan nilai 200pF hingga 450pF
di pin D+ dan D-. Perambatan delay pada kabel kecepatan rendah harus kurang
dari 18 ns. Data sinyal yang naik turun diukur dari 10% hingga 90% dari
sinyal,dengan toleransi 10%. Waktu untuk ini dari 4ns hingga 20ns, tergantung
kecepatan USB yang digunakan.
Daya
USB 1.x dan 2.0
spesifikasi menyediakan 5 V pasokan pada kawat tunggal dari perangkat USB yang
terhubung dapat menarik kekuasaan. Spesifikasi menyediakan tidak lebih dari
5,25 V dan tidak kurang dari 4,75 V (5 V ± 5%) antara jalur bus kekuatan
positif dan negatif. Untuk USB 2.0 tegangan yang diberikan oleh powered hub
port-rendah adalah 4,4 V sampai 5,25 V.
Sebuah beban unit didefinisikan sebagai 100 mA dalam USB 2.0, dan dibangkitkan untuk 150 mA dalam USB 3.0. Maksimal 5 unit muatan (500 mA) dapat diambil dari sebuah pelabuhan di USB 2.0, yang telah diangkat ke 6 (900 mA) di USB 3.0. Ada dua jenis perangkat: rendah daya dan daya tinggi. Low-power perangkat menarik beban paling lama 1 unit, dengan tegangan operasi minimum 4.4 V di USB 2.0, dan 4 V di USB 3.0. Daya tinggi perangkat menarik jumlah maksimum beban unit yang didukung oleh standar. Semua default perangkat sebagai daya rendah tetapi perangkat lunak dapat meminta daya tinggi selama daya tersedia pada bus menyediakan.
Beberapa perangkat seperti kecepatan tinggi drive disk eksternal mungkin membutuhkan lebih dari 500 mA saat ini dan oleh karena itu tidak dapat diaktifkan dari satu port USB 2.0. perangkat semacam ini biasanya datang dengan kabel berbentuk Y yang memiliki dua konektor USB yang akan dimasukkan ke dalam komputer. Dengan kabel perangkat yang dapat menarik daya dari dua port USB secara bersamaan.
Hub bus-powered diinisialisasi pada 1 beban unit dan transisi ke unit beban maksimal setelah konfigurasi hub diperoleh. Setiap perangkat yang terhubung ke hub akan menarik 1 unit beban terlepas dari menarik saat perangkat yang terhubung ke port lain dari hub (yaitu satu perangkat terhubung pada sebuah hub empat-port hanya akan menarik beban 1 unit terlepas dari kenyataan bahwa semua beban unit yang yang dipasok ke hub).
Sebuah hub bertenaga diri akan memasok beban maksimum yang unit yang didukung ke perangkat tersambung ke jaringan tersebut. Sebuah hub bertenaga baterai dapat menyediakan unit muatan maksimum ke pelabuhan. Selain itu, V BUS akan menyediakan 1 unit beban hulu untuk komunikasi jika bagian dari Hub powered bawah.
Dalam baterai Pengisian Spesifikasi, mode powering baru ditambahkan ke spesifikasi USB. Sebuah host atau hub Pengisian Hilir Port dapat menyediakan maksimum sebesar 1,5 A ketika berkomunikasi di bandwidth rendah atau full-bandwidth, maksimum 900 mA saat berkomunikasi di tinggi-bandwidth, dan sebanyak sekarang sebagai konektor aman akan menangani jika tidak ada komunikasi berlangsung; USB 2.0 standar-A konektor dinilai pada 1500 mA secara default. Sebuah Dedicated Port Pengisian dapat menyediakan maksimum 1,8 A saat ini sebesar 5,25 V. Perangkat portabel dapat menarik sampai 1,8 A dari Pengisian Dedicated Port. Yang didedikasikan Mengisi Port celana pendek D + dan D-pin dengan hambatan paling banyak 200 Ω. The menonaktifkan pendek transfer data, namun memungkinkan perangkat untuk mendeteksi Dedicated Port Pengisian dan memungkinkan sangat sederhana, pengisi arus tinggi akan diproduksi. Arus meningkat (lebih cepat, 9 pengisian W) akan terjadi setelah kedua host / hub dan perangkat mendukung spesifikasi pengisian baru.
Sebuah beban unit didefinisikan sebagai 100 mA dalam USB 2.0, dan dibangkitkan untuk 150 mA dalam USB 3.0. Maksimal 5 unit muatan (500 mA) dapat diambil dari sebuah pelabuhan di USB 2.0, yang telah diangkat ke 6 (900 mA) di USB 3.0. Ada dua jenis perangkat: rendah daya dan daya tinggi. Low-power perangkat menarik beban paling lama 1 unit, dengan tegangan operasi minimum 4.4 V di USB 2.0, dan 4 V di USB 3.0. Daya tinggi perangkat menarik jumlah maksimum beban unit yang didukung oleh standar. Semua default perangkat sebagai daya rendah tetapi perangkat lunak dapat meminta daya tinggi selama daya tersedia pada bus menyediakan.
Beberapa perangkat seperti kecepatan tinggi drive disk eksternal mungkin membutuhkan lebih dari 500 mA saat ini dan oleh karena itu tidak dapat diaktifkan dari satu port USB 2.0. perangkat semacam ini biasanya datang dengan kabel berbentuk Y yang memiliki dua konektor USB yang akan dimasukkan ke dalam komputer. Dengan kabel perangkat yang dapat menarik daya dari dua port USB secara bersamaan.
Hub bus-powered diinisialisasi pada 1 beban unit dan transisi ke unit beban maksimal setelah konfigurasi hub diperoleh. Setiap perangkat yang terhubung ke hub akan menarik 1 unit beban terlepas dari menarik saat perangkat yang terhubung ke port lain dari hub (yaitu satu perangkat terhubung pada sebuah hub empat-port hanya akan menarik beban 1 unit terlepas dari kenyataan bahwa semua beban unit yang yang dipasok ke hub).
Sebuah hub bertenaga diri akan memasok beban maksimum yang unit yang didukung ke perangkat tersambung ke jaringan tersebut. Sebuah hub bertenaga baterai dapat menyediakan unit muatan maksimum ke pelabuhan. Selain itu, V BUS akan menyediakan 1 unit beban hulu untuk komunikasi jika bagian dari Hub powered bawah.
Dalam baterai Pengisian Spesifikasi, mode powering baru ditambahkan ke spesifikasi USB. Sebuah host atau hub Pengisian Hilir Port dapat menyediakan maksimum sebesar 1,5 A ketika berkomunikasi di bandwidth rendah atau full-bandwidth, maksimum 900 mA saat berkomunikasi di tinggi-bandwidth, dan sebanyak sekarang sebagai konektor aman akan menangani jika tidak ada komunikasi berlangsung; USB 2.0 standar-A konektor dinilai pada 1500 mA secara default. Sebuah Dedicated Port Pengisian dapat menyediakan maksimum 1,8 A saat ini sebesar 5,25 V. Perangkat portabel dapat menarik sampai 1,8 A dari Pengisian Dedicated Port. Yang didedikasikan Mengisi Port celana pendek D + dan D-pin dengan hambatan paling banyak 200 Ω. The menonaktifkan pendek transfer data, namun memungkinkan perangkat untuk mendeteksi Dedicated Port Pengisian dan memungkinkan sangat sederhana, pengisi arus tinggi akan diproduksi. Arus meningkat (lebih cepat, 9 pengisian W) akan terjadi setelah kedua host / hub dan perangkat mendukung spesifikasi pengisian baru.
Powered USB
Powered USB menggunakan USB standar sinyal dengan penambahan kabel listrik tambahan. Ini menggunakan empat pin tambahan untuk memasok hingga 6 A pada baik 5 V, 12 V, atau 24 V (tergantung keying) dengan alat tambahan. Kabel dan kontak pada bagian USB telah ditingkatkan untuk mendukung arus yang lebih tinggi pada baris V 5, juga. Hal ini umumnya digunakan dalam ritel sistem dan memberikan kekuatan yang cukup untuk mengoperasikan stasioner barcode scanner, printer, bantalan pin, tanda tangan perangkat menangkap, dll ini modifikasi dari interface USB adalah proprietary dan dikembangkan oleh IBM , NCR , dan FCI / Berg . Hal ini pada dasarnya dua konektor ditumpuk sedemikian rupa sehingga konektor bawah menerima plug USB standar dan konektor atas mengambil konektor power.
Powered USB menggunakan USB standar sinyal dengan penambahan kabel listrik tambahan. Ini menggunakan empat pin tambahan untuk memasok hingga 6 A pada baik 5 V, 12 V, atau 24 V (tergantung keying) dengan alat tambahan. Kabel dan kontak pada bagian USB telah ditingkatkan untuk mendukung arus yang lebih tinggi pada baris V 5, juga. Hal ini umumnya digunakan dalam ritel sistem dan memberikan kekuatan yang cukup untuk mengoperasikan stasioner barcode scanner, printer, bantalan pin, tanda tangan perangkat menangkap, dll ini modifikasi dari interface USB adalah proprietary dan dikembangkan oleh IBM , NCR , dan FCI / Berg . Hal ini pada dasarnya dua konektor ditumpuk sedemikian rupa sehingga konektor bawah menerima plug USB standar dan konektor atas mengambil konektor power.
Contoh program dlm bahasa C/C++ untuk aplikasi USB
USB Controller Source
Code
main.c
#include "xparameters.h"
#include "xbasic_types.h"
#include "xio.h"
#define ADDR_CM 0x01800000 // XIO_Out
#define ADDR_FIFO_RD 0x01800004 //
XIO_In
#define ADDR_FIFO_WR 0x01800008 // X_IO_Out
#define ADDR_SIG_INTERRUPT 0x01800010
#define ADDR_READ_INTERRUPT 0x01800014
#define ADDR_EMPTY_FLAG 0x01800018
#define DESC_LENGTH 0x42
#define BASE_ADDR 0x01800000
#define TEMP1 0x01800004
#define TEMP2 0x01800000
#define TEMP3 0x01800008
Xuint8 short_descriptor[6]= {
180,
4,
2,
16,
1,
0
};
Xuint8 descriptor[66] = {
// Descriptor for USB Remote Control -
values written in integer format
// Philip Li
//
Device Descriptor (ALL in INTEGER
FORMAT)
18,
//descriptor length
01,
//descriptor type
00,02,
//specification version BCD
00,
//device class
00,
//device subclass
00,
//protocol
64,
//max packet size for EP0
64, 64,
//VID Vendor ID
64, 64,
//PID Product ID
64, 64,
//Device ID
00,
//Manucfacturer String Index
00,
//Product String Index
01,
//Number of configurations
// DeviceQualDscr
10,
//descriptor length
06,
//descriptor type
00,02,
//BCD
00,
//device class
00,
//device subclass
1800, //device sub-sub-class
64,
//max packet size
01,
//number of configuration
00,
//reserved
//HighSpeedConfigDscr
9,
//Dscr length
02, //Dscr type
46,00,
//total data length ( 46 bytes)
1,
//number of interfaces
1, //configuration number
0,
//configuration string
160,
//attibutes self powered, no remote wakeup 10100000
50,
//power requirement (50mA)
//Interface Descriptor
9,
//Dscr length
04,
//Dscr type
00,
//#index of interface
00,
//alternate setting
02,
//num of endpoints
03,
//interface class (HID)
00,
//interface subclass
01,
//interface sub-subclass (ProtocolCcode,0-None,1-Keyboard,2-
Mouse)
00,
//interface dscr string index
//Class Descriptor (HID interface)
9, //Dscr length
33,
//Dscr type - HID 0x21
00,01,
//HID spec release number
00,
//hardware target country
01,
//number of HID class dscr to follow
34,
//Descriptor type 0x22 ???
//total length of report descriptor
// Endpoint Descriptor EP2
07,
// Dscr length
05,
// Dscr type
02,
// Endpoint number and direction
03,
// Endpoint type 0000 0011 - OUT
interrupt transfer (Read
p.113 USBComplete)
00,
// Max packet size LSB 512bytes
02,
// Max packet size MSB (0x0200)
01,
// polling interval maximum latency p.114 USBComplete
// Endpoint Descriptor EP6
07,
// Dscr length
05,
// Dscr type
134,
// Endpoint number and direction
03,
// Endpoint type 1000 0110 -IN
interrupt transfer (Read
p.113 USBComplete)
00,
// Max packet size LSB 512bytes
02,
// Max packet size MSB (0x0200)
01
// polling interval maximum latency p.114 USBComplete
};
// USB address is from 0000 0001 1000 0000
to 0000 0001 1000 0111
int main()
{
//
variables for reading DSCR file
19 //variables
int
ready=0;
int
i;
Xuint32 incoming_byte;
Xuint32 incoming_byte1;
Xuint32 incoming_byte2;
Xuint32 incoming_byte3;
Xuint32 incoming_byte4;
Xuint32 incoming_byte5;
Xuint32 incoming_byte6;
Xuint8 incoming_byte8;
Xuint8 incoming_byte7;
Xuint8 outgoing_byte;
//
write register 0x1
outgoing_byte = 0x5;
write_register(0x01, outgoing_byte);
print("write 0xf2 to register0x07\r\n");
outgoing_byte = 0xf2; //
11110010
write_register(0x06, outgoing_byte);
print("finish writing\r\n");
for(i=0; i<1000; i++){}
incoming_byte7 = read_register(0x07);
print("\r\n");
print("read from the register and the byte is \r\n");
putnum(incoming_byte6);
print("write the descriptor now\r\n");
write_descriptor2();
}
Xuint8 read_register ( Xuint8 regaddress ){
int
ready = 0;
Xuint32 incoming;
low_level_command_write(0xC0 + regaddress);
while( ready == 0){
XIo_In32(ADDR_CM);
incoming =
XIo_In32(ADDR_SIG_INTERRUPT);
print("\r\n");
print("addr_sig_interrupt is \r\n");
putnum(incoming);
if (incoming != 0x0)ready =1;
};
incoming =
XIo_In32(ADDR_READ_INTERRUPT);
print("incoming\r\n");
putnum(incoming);
return incoming;
}
20
void write_register (Xuint8 regaddress,
Xuint8 data){
low_level_command_write(0x80 + regaddress); // command address byte
low_level_command_write(0xF & (data>>4)); // command data byte
one
low_level_command_write(0xF & data); // command data byte two
}
void low_level_command_write(Xuint8 data){
Xuint32 outgoing_byte;
outgoing_byte = (0xFF & data);
putnum(outgoing_byte);
print("\r\n");
// XIo_In32(ADDR_CM);
XIo_Out32(ADDR_CM, outgoing_byte);
}
void write_descriptor2(){
Xuint8 lengthOfRegister = 0x06; // Descriptor length = 6
int
i;
low_level_command_write(0x80 + 0x30); // command address byte 0x30 is
the Desc RAM
low_level_command_write(lengthOfRegister);
low_level_command_write(0);
for
( i = 0; i <6 ; i ++){
low_level_command_write(short_descriptor[i]);
}
}
void write_descriptor(){
Xuint8 lengthOfRegister = 0x42; // Descriptor length = 66
int
i;
low_level_command_write(0x80 + 0x30); // command address byte 0x30 is
the Desc RAM
low_level_command_write(lengthOfRegister);
low_level_command_write(0);
for
( i = 0; i <66 ; i ++){
low_level_command_write(descriptor[i]);
}
}
pb_usb_ v2_1_0.mpd
###################################################################
##
## Microprocessor Peripheral Definition
##
###################################################################
BEGIN opb_usb, IPTYPE = PERIPHERAL,
EDIF=TRUE
BUS_INTERFACE BUS = SOPB, BUS_STD = OPB,
BUS_TYPE = SLAVE
## Generics for VHDL
PARAMETER c_baseaddr = 0xFFFFFFFF, DT = std_logic_vector,
MIN_SIZE
= 0xFF
PARAMETER c_highaddr = 0x00000000, DT = std_logic_vector
PARAMETER c_opb_awidth = 32,
DT = integer
PARAMETER c_opb_dwidth = 32,
DT = integer
## Ports
PORT opb_abus = OPB_ABus, DIR = IN, VEC = [0:(c_opb_awidth-1)],
BUS = SOPB
PORT opb_be = OPB_BE, DIR = IN, VEC = [0:((c_opb_dwidth/8)-
1)], BUS = SOPB
PORT opb_clk = "", DIR = IN, BUS =
SOPB
PORT opb_dbus = OPB_DBus, DIR = IN, VEC = [0:(c_opb_dwidth-1)],
BUS = SOPB
PORT opb_rnw = OPB_RNW, DIR = IN,
BUS = SOPB
PORT opb_rst = OPB_Rst, DIR = IN,
BUS = SOPB
PORT opb_select = OPB_select,
DIR = IN,
BUS = SOPB
PORT opb_seqaddr = OPB_seqAddr, DIR = IN,
BUS = SOPB
PORT sln_dbus = Sl_DBus, DIR = OUT, VEC =
[0:(c_opb_dwidth-1)],
BUS = SOPB
PORT sln_errack = Sl_errAck,
DIR = OUT,
BUS = SOPB
PORT sln_retry = Sl_retry, DIR = OUT,
BUS = SOPB
PORT sln_toutsup = Sl_toutSup, DIR = OUT,
BUS = SOPB
PORT sln_xferack = Sl_xferAck, DIR = OUT,
BUS = SOPB
# User Ports
PORT PB_D
= "", DIR = INOUT, VEC = [0:15], 3STATE=FALSE,
IOB_STATE=BUF
PORT PB_A
= "", DIR = OUT, VEC =
[0:2], 3STATE=FALSE,
IOB_STATE=BUF
PORT PB_OE
= "", DIR = OUT
PORT PB_SLRD = "", DIR = OUT
PORT PB_SLWR = "", DIR = OUT
31PORT PB_PKTEND =
"", DIR = OUT
PORT USB_IFCLK = "", DIR = OUT
PORT USB_CS = "", DIR = OUT
PORT USB_FLAGA = "", DIR = IN
PORT USB_FLAGB = "", DIR = IN
PORT USB_FLAGC = "", DIR = IN
PORT USB_READY = "", DIR = IN
PORT USB_INT = "", DIR = IN
PORT BUTTON_S1 = "", DIR = IN
PORT BUTTON_S2 = "", DIR = IN
PORT BUTTON_S4 = "", DIR = IN
END
Referensi :
www.cs.columbia.edu/~sedwards/classes/2005/4840/.../USBMedia.pdf
TIMING DIAGRAM



Sumber :
http://id.wikipedia.org/wiki/Universal_Serial_Bus.htm
http://www.pulsewan.com/data101/usb_basics.htm
www.cs.columbia.edu/~sedwards/classes/2005/4840/.../USBMedia.pdf
http://www.kaskus.us/showthread.php?p=395852963
http://www.toko-elektronika.com/tutorial/pcinterfacing.htm
Tidak ada komentar:
Posting Komentar