Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: z - 14 Temmuz 2006, 21:58:58

Başlık: Kim korkar USB den
Gönderen: z - 14 Temmuz 2006, 21:58:58
Yillardir seri porttan kurtulup USB ara birimini kullanmayi cok istememe
ragmen bir turlu konunun uzerine  egilemedim. Herseyden once interface
bana cok karmasik geldi.

Forumda ne zaman USB kelimesi gecen bir soru gecse iste simdi bir
seyler ogrenecegim umuduyla yazilanlari ve cevaplari okurum.

Fakat malesef  FT232 kullanin seklindeki klasik cevabi gormekten
usandim..

Yeter artik diyip bu gun usb interface uzerinde calisabilecegim prototip
kart hazirladim. Yok oyle PIC falan değil. Daha farkli. Sectigim cipin adi
National USBN9604. USB Node Controller diye geciyor.

Cipin 8 bitlik data bus'i sayesinde herhangi bir islemci busina peripheral
cihaz gibi  yapistiriyorsunuz. Ister multiplex modunda isterseniz non
multiplex modunda paralel veri transferi gerceklestirebiliyorsunuz.

DMA destekli data transferi yapmaniza yarayan pinleri de var.

Yok ben bus uzerinden calismak istemiyorum derseniz  Gnd dahil 5 pin
uzerinden Microwire haberlesmesi yapabiliyorsunuz.

USB 1.0 ve 1.1'i  destekliyor.

Bu ciple hazirladigim kart PC paralel porta takiliyor. Paralel port
pinlerinden  Microwire haberlesmesi icin gerekli  SI, SO, SCLK, RST
sinyallerini uretiyorum.


PC tarafinda Borland 3.0 derleyici ile yazdigim kodu aninda calistirip
sonuclari gorme sansim var. Komutlari trace etmek hata bulmak cok
kolay olacak.

Bu sayede PCnin paralel portundaki USB interface ile PC'nin kendi USB
interface portunu konusturabilecegim.

En onemli avantajimiz ise isletim sistemi, cipimizden ne tur isteklerde bulunmus bunlari ekranimizdan izleyecegiz.

Calismalari buradan yayinlayacagim.

Oncelikle sema ve Eagle cizimi verecegim. Birde bir kac fotograf.

Ancak usb konusunu bildigimi sanmayin. Burada sizlerle birlikte ogrenecegim. Sizlerden de katilim bekliyorum.

Bu cipi kullanabilen bir kisinin her turlu USB cipini kullanabilecegini
dusunuyorum. Zira felsefeyi kaptiktan sonra farkli ciplerle calismanin sorun olmayacagini dusunuyorum.


USB sorun olmaktan ciksin artik.
Başlık: Kim korkar USB den
Gönderen: OG - 14 Temmuz 2006, 22:13:16
USB/IDE dönüştürücü chip veya hazır devreler bir işe yararmı?. Bende böyle bir minik devre var, HDD, CD sürücü falan bağlıyorum.
Başlık: Kim korkar USB den
Gönderen: z - 14 Temmuz 2006, 22:35:01
Hocam bahsettiginiz cipler FT232 orneginde oldugu gibi bize usb ogretmiyor. Sadece hazir bazi cozumler sunuyor.

Halbuki ele aldigim cip USB cipinin kendisi.

Bu cipi kullananmayi beceren  butun USB ciplerini kullanabilir.

Herseyden once onerdigim gelistirme ortami PC'nin kendisi, yok flash programlaydi, yok cipi programlayiciya tak cikartti gibi angaryalarin hic birisi olmayacak.

Compile et calistir compile et calistir seklinde son derece suratli pragram yazacagiz.

Unutmadan. Gelistirme asamasinda isletim sistemi DOS yada W98 olacak.

Nedeni Paralel porta dogrudan erisecegiz. Ama isteyenler  port erisim engelini diledikleri yontemle asarak XP'de de calisabilirler.
Başlık: Kim korkar USB den
Gönderen: z - 14 Temmuz 2006, 22:43:30
Unutmadan,  islemcimizin (PC) cip ile haberlesmesinde,  baski devre basit olsun dusuncesiyle  Microwire kullanacagiz.

Bu calismada http://www.picguide.org/usb-full-speed-project-pic16-series/ sitesindeki calismadan yola cikiyorum.

Buradaki PIC'i kaldirip atip yerine PC paralel port koyarak cok esnek bir gelistirme ortami sagladim.

Cipimizin dokumani asagidaki linkten indirilebilir.

http://cache.national.com/ds/US/USBN9604.pdf
Başlık: Kim korkar USB den
Gönderen: ise - 14 Temmuz 2006, 22:54:33
jan axelson un usb complete kitabında çok detaylı bir şekilde anlatılmış teorik pratik örneklerle   ethernet internet kitabıda çok güzel
ed2k://|file|Jan%20Axelson%20-%20USB%20Complete%20(2nd%20Edition)_decrypted.PDF|3767078|646CCAC4C833C41F9CFC7EED21A10B62|/
Başlık: Kim korkar USB den
Gönderen: z - 14 Temmuz 2006, 23:41:12
USB problemimizin ustesinden gelecek kahramanlarimiz asagida goruluyor.

(http://www.cncdesigner.com/picproje/9604.JPG)

(http://www.cncdesigner.com/picproje/usbn9604.jpg)

Eagle brd dosyasini indirebilirsiniz (http://www.cncdesigner.com/picproje/9604.brd)

!!! 6 nolu pin pcb ciziminde bosta kalmistir. !!! Bunu 5V'a baglayin.

Her yonuyle USB Universal Serial Bus

Yazan: J.Axelson'un Turkce'ye cevrilmis kitabi bende mevcut. Aldigimda soyle bir karistirdim ve hic sevmemistim.

Simdi konuya damardan girdigim icin  kitap hakkindaki onyargimi bir kenara birakacagim.

Kitabin uzerindeki isteme adresi: Galeri Kultur
Selanik Cad. No: 1/B Kizilay - ANKARA
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 01:45:33
Malzeme kutumda Smd 1K5, 24R ve 1M bulamayinca pcb uzerinde ince bir
cerrahi operasyonla padler uzerinde delikler delip klasik bacakli direnclerden
takarak devreyi tamamladim. Mevcut degerlerde bulamadigimdan 24R yerine 22R, 1M yerine de 1.2M bagladim.

Gene yokluktan 47p lari 27p ile degistirdim.

(http://www.cncdesigner.com/picproje/usbn9604-1.JPG)

25 Pin konnektorden gnd sinyali alabilmek icin pcb de uygun bir yere delik
delinip kablo ile gndler birlestirildi.

Artik kodlamaya gecebiliriz.
Başlık: Kim korkar USB den
Gönderen: OG - 15 Temmuz 2006, 01:58:19
Hocam PCB yi nasıl çıkardın? CNC ile mi?
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 02:07:48
Evet hocam cncde kazima yontemiyle yaptim.

Bu arada voltaj verip scopla xtal uclarina baktigimda hic bir salinim goremedim.  18 numarada tahminimce 3v3 olmasi gerekirken  0 v gordum.

Arizali bir CD Rom kartindan soktugum Smd tipi kristali supheli xtal  ile degistirince osc calisti.

18 nolu pinin durumu ne olmali onu  arastiracagim.

---------------------

Benim gibi bu cipi hic tanimayanlarin ilgilenecegi dusuncesiyle ilk montaj ardindan cikan sorunlara da deginiyorum.

18 nolu uc, cip icindeki 3v3 regulatorun cikisi ve burada voltaj olmasini bekliyordum. Katalogu inceledigimde, reset islemi ardindan cip bu voltaji kesiyormus.

Devremizde 16 nolu reset pini, power on asamasinda 100n C ile Gnd ye cekildiginden cip bu voltaji kesiyor.

OSC miz calisiyor, ve simdi kodlamaya haziriz.
Başlık: Kim korkar USB den
Gönderen: OG - 15 Temmuz 2006, 02:47:11
Sayfa 30

VGE
Voltage Regulator Enable. Setting this bit enables the internal 3.3V voltage regulator. This bit is hardware reset only to a 0,
disabling the internal 3.3V regulator by default. When the internal 3.3V regulator is disabled, the device is effectively disconnected
from USB. Upon power-up, the firmware may perform any needed initialization (such as power-on self test) and then
set the VGE bit. Until the VGE bit is set, the upstream hub port does not detect the device presence.
If the VGE bit is reset an external 3.3V power supply may be used on the V3.3 pin.



Sayfa 7

Transceiver 3.3V Voltage Supply. This pin can be used as the internal 3.3V voltage regulator
output. The regulator is intended to power only the internal transceiver and one external pull-up.
An external 1 μF de-coupling capacitor is required on this pin. The voltage regulator output is disabled
upon reset. When the internal voltage regulator is left disabled, this pin must be used as a
3.3V supply input for the internal transceiver. This is the case during 3.3V operation.


Sayfa 10 da

2.2 VOLTAGE REGULATOR (VREG)
The voltage regulator provides 3.3V for the integrated transceiver from 5.0V device power or USB bus power. This output
can be used to supply power to the 1.5 KΩ pull-up resistor. This output must be decoupled with a 1 μF tantalum capacitor
to ground. It can be disabled under software control to allow using the device in a 3.3V system.

2.1 TRANSCEIVER
The device contains a high-speed transceiver which consists of three main functional blocks:
— Differential receiver
— Single-ended receiver with on-chip voltage reference
— Transmitter with on-chip current source.
This transceiver meets the performance requirements described in Chapter 7 of the USB Specification, Version 1.1.
To minimize signal skew, the differential output swings of the transmitter are well balanced. Slew-rate control is used on the
driver to minimize radiated noise and crosstalk. The drivers support TRI-STATE operation to allow bidirectional, half-duplex
operation of the transceiver.
The differential receiver operates over the complete common mode range, and has a delay guaranteed to be larger than
that of the single-ended receivers. This avoids potential glitches in the Serial Interface Engine (SIE) after single-ended zeros.
Single-ended receivers are present on each of the two data lines. These are required, in addition to the differential receiver, to
detect an absolute voltage with a switching threshold between 0.8V and 2.0V (TTL inputs). To increase Vcc rejection, without
glitching, a voltage reference sets the single-ended switching reference. An external 1.5 ± 5% KΩ resistor is required on D+ to
indicate that this is a high-speed node. This resistor should be tied to a voltage source between 3.0V and 3.6V, and referenced
to the local ground, such as the output provided on pin V3.3.
2.2 VOLTAGE REGULATOR (VREG)
The voltage regulator provides 3.3V for the integrated transceiver from 5.0V device power or USB bus power. This output
can be used to supply power to the 1.5 KΩ pull-up resistor. This output must be decoupled with a 1 μF tantalum capacitor
to ground. It can be disabled under software control to allow using the device in a 3.3V system.




Sayfa 8
USB D+ Upstream Port. This pin requires an external 1.5k pull-up to 3.3V to signal full speed
operation.

Alıntı yapılan: "bsivgin"USB de dörtçeşit transfer yöntemi tanımlanmıştır..Control Transfer, Interrupt Transfer, Isochronous Transfer, and Bulk Transfer

USB low speed, full speed ve high speed hızlarından biri ile çalışır..LowSpeed - 1.5Mbit/s, FullSpeed - 12Mbit/s, HighSpeed - 480Mbit/s

USB bağlanan cihazın full speed mi yoksa low speed mi olduğunu bağlanan pull-up direncinden anlar. Eğer DATA+ 1.5K ile pull-up yapılmışsa cihaz full speed, DATA- 1.5K ile pull-up yapılmışsa host tarafından low speed olarak algılanır.

http://picproje.org/index.php/topic,8509&postdays=0&postorder=asc&start=0
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 03:00:06
Evet 3.3v cikisinin  0 olmasi normalmis. Bu arada katalogda, DMA ozelligi kullanilmayacaksa, DACK pinin Vcc ye baglanmasi gerektigi soyleniyor.

Bu uyariyi cok gec farkettigim icin pcb de bu pin bosta kaldi. Neyseki ince bir teli 6 numaraya lehimleyip cip uzerinden asirip 24 nolu pine kolayca lehimleyebiliyoruz.

Asagida PCye monte edilmis USB kartimizda cipin ustundeki ince teli gorebilirsiniz.

(http://www.cncdesigner.com/picproje/tel.jpg)

Her nekadar dokumanlari daha detayli okumaya baslamamis olsak da DMA modu paralel interface modunda gecerli oldugundan belki de Microwire modunda 6 nolun pinin bosta kalmasi  problem olusturmayacakti. (?)

Cipin M1 ve M0 pinlerini, hard olarak lehimle M1=1 M0=1 yaptigimiz icin kartimiz sadece ve sadece Microwire modunda calisacak.

Kart verniklendi ve simdi kodlamaya gecebiliriz.  :D

Bu arada hatirlatma: USB kartimiz enerjisini normalde USB kablosu uzerinden alacak. Bu asamada daha isin cok basinda oldugumuz icin usb kabloyu takmayıp karti besleme pinlerinden harici olarak besleyeceğiz.

Bunun icin flopye 5v Gnd Gnd +12V goturen kucuk konnektoru kartimizdaki 4lu pin headera takiyoruz. Ters takma durumunda arizaya neden olmamak icin sari kabloyu kesip attim.
Başlık: Kim korkar USB den
Gönderen: PhD - 15 Temmuz 2006, 12:42:35
Selam @bunalmis hocam,

Projende başarılar diliyorum ama aklıma bir şey takıldı. Klasik bir soru artık ama bu çip piyasada peynir ekmek gibi bulunabiliyor mu ve ucuz mu? Emeğiniz boşa gitmesin hocam. :oops:

Başarılar dilerim kolay gelsin...
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 13:15:41
Bu projede asil amacimiz usb'yi ogrenmek. Cip  bize sadece calisma ortami saglayacak. Dolayisiyla olayi anlayinca istedigimiz cipi kullanabilecegiz.

Hemen hemen orta sinif  denetleyicilerin hepsi  asenkron haberlesme donanimi icerir.

Baud rate'in bir register uzerinden istenen degere set edildigini, int ile calisacaksan seri iletisim int'i aktif etmen gerektigini, 8 bit 1 stop calisacaksan bununla ilgili tanimi yapman gerektigini, gonderilecek verinin txbuf gibi bir rege yazildigini, gelen verinin rxbuf gibi bir registerdan alindigini  bilirsin.

Iste bu calismayla usb'nin derinliklerine inecegiz. Ben kendi adima soyleyeyim usb ciplerinde  hangi regler vardir ne ise yararlar  hic bilmiyorum.
Başlık: Kim korkar USB den
Gönderen: Analyzer - 15 Temmuz 2006, 13:27:25
Selam,

Ne tesadüf ki ben de USB protokolünü anlamak için çalışmaya başlamıştım :) Üstad USBN'den başlamışsın, ben tam anlamıyla öğrenmek adına IgorPlug'ı inceliyorum.

http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm

Bu arada o kötü Türkçe çeviriye sahip J.Axelson'un Her yönüyle USB hepimizde var sanırım :D

Analyzer
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 13:36:55
Evet o linki sanirim daha once gene sen vermistin ve o projeye hayran kalmistim.

O projede usb nin taa dibine iniliyor. Fakat o projeden once herhangi bir usb cipini ogrenmek daha faydali. Cipi ogrendikten sonra cipin hizli bir islemcide yazilimla emule edilmesi cok daha agir bir konu.
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 15:21:15
Evet artik USB cipinin icindeki registerlere erisebiliyor ve iceriklerini degistirebiliyoruz.

Ilk baslarda 0v olarak gorulen  3.3V pini de yazilimla aktif hale getirildi.

Programda degisiklik yapildikca eskisi imha olacagindan sadece en son programi indirebilirsiniz.

Indirmek icin tiklayin. [/b] (http://www.cncdesigner.com/picproje/9604.C)
Başlık: Kim korkar USB den
Gönderen: PhD - 15 Temmuz 2006, 16:18:01
@bunalmis hocam bu bilgisayardaki C dilimi (DOS ortamında olan mı)? Paralel porta komut göndermek için mi yazıldı? Bildiğim kadarı mikroişlemci kullanılmıyor.

Bir yeri daha anlamadım PC den gönderdiğimiz komutları USB nin çıkışında nasıl görüyoruz acaba bir devre falan mı var? Çok özür dilerim ama sanırım bir yerleri kaçırdım. :oops: Mümkünse projenin amacını tekrar basit bir şekilde tekrar anlatabilir misiniz? İki defa okudum ama kafamda soru işaretleri var... :oops:
Başlık: Kim korkar USB den
Gönderen: z - 15 Temmuz 2006, 16:49:39
Programi W98 uzerinde Borland 3.0 ile C dilinde yaziyorum. Dosda da olabilir.

Koca PC yi PIC islemci gibi dusunun. Cipin ucuna yani paralel porta da usb interface yaptik.

(http://www.cncdesigner.com/picproje/usb_proje.JPG)

Neden boyle?

PC de program yazmak  PIC gibi bir islemciye program yazip denemekten cok daha kolay.

Ayni PC uzerinde USB driver da yazabiliriz. PC, ayni zamanda  kendi kendinin usb cihazi olacak.

Projeyi tamamladığımızda C dilinde elimizde örnek bir USB programı olacak. Zaten usb yapısını da keşfettiğimiz için yazılımı dilediğimiz işlemciye ufak tefek değişikliklerle uyarlıyabileceğiz.

Bu nedenle PC varken özel bir işlemciye bağlı kalmak istemedik.

(Interface rutinlerini değiştiriverip paralel data transferi, DMA destekli taransfer, int kullanmak hiç sorun değil, o kısımlar zaten USB ile alakalı değil.)

Bu arada programimizin revizyon numarasi 2 oldu.
Başlık: Kim korkar USB den
Gönderen: z - 16 Temmuz 2006, 03:47:52
Ilgilenenlere:

http://www.nectix.com/includes/scripts/download.php?file=16f84usb.0.9.0.asm

Sitesinde USBN9604 ile 16F84den olusan donanim icin yazilmis asm kodlari var.

Kartin USB cikisini kablo ile  ikinci bir bilgisayarin usb girisine bagladim. Yani kartimizin uzerindeki cip artik usb uzerinden A PC si ile, B PC si de cip ile paralel port uzerinden konusacak duruma geldi. Program, daha cok eksik olmasina ragmen calistirildiginda B PC'si USB Devide Not Recognized seklinde mesaj vermeye basladi.

One of the USB devices attached to the computer has mulfunctioned, and windows not recognize it. For assistance in solving this problem, click this message...

Ve clickleyince Unknown device der.

Bu cip icin XP tarafina bir driver da yazmamiz gerekecek. Aramizda bu konuyla ilgilenebilecek arkadaslar varsa yardimlari cok makbule gececek. Fikir de dahil olmak üzere her türlü katkıya açığız.

Bu arada, en son verdigimiz C kodlarda Mikrowire rutinlerinde cok ciddi bir hata yapmisim.

Fakat ilgincdir program dogru calisiyor. Hatayi duzeltim programin son hali  henuz siteye yuklenmedi.
Başlık: Kim korkar USB den
Gönderen: Analyzer - 16 Temmuz 2006, 11:42:34
Selam,

Üstad USBN9604 eval. board var. Onun sayfasında komple paket olarak (Jungo USB) sürücüleri de var. Belki görmemişsinizdir :

http://www.national.com/appinfo/usb/0,1808,461,00.html

(DDK ile uğraşmak gerçekten çok can sıkıcı. Hazır birşeyler bulunabilirse daha hızlı ilerler proje)

Analyzer
Başlık: Kim korkar USB den
Gönderen: z - 16 Temmuz 2006, 12:49:01
Hocam sözkonusu linkteki yazılımları indirdim  ancak programlar C ile yazılmış, Win ortamında da C dili kullanmıyorum ve zaten derleyicilerim de yok.

Açıkcası verilen yazılımları ne yapacağımı da anlayamadım.

Birimiz de  bu kısma el atarsa projeyi bitirdik sayılır.
(Açıkcası proje durursa driver yüzünden duracak.)

Bu arada bu çip ile ilgili gözlemlerim çok çok olumlu. Fanatiği olduğunuz  işlemcinizi değiştirmeden çipinize usb yeteneği kazandırmak için birebir ve kullanımı gerçekten çok rahat.
Başlık: Kim korkar USB den
Gönderen: CoşkuN - 16 Temmuz 2006, 14:48:33
Yukarıdaki linkteki sayfada verilen programları indirdim.Anladığım kadarıyla çip ile haberleşmek için bir arabirim oluşturulmuş.Programda çipin kaydedicileri de okunabiliyor.Kodları da visual c++ 6 ile yazılmış galiba.Yalnız program açıldığında "win drive bulunamadı" hatası veriyor.Ayrıyetten bir sürücü daha yüklenmesi lazım galiba.
Başlık: Kim korkar USB den
Gönderen: Analyzer - 16 Temmuz 2006, 20:28:30
Alıntı yapılan: "CoşkuN"Yukarıdaki linkteki sayfada verilen programları indirdim.Anladığım kadarıyla çip ile haberleşmek için bir arabirim oluşturulmuş.Programda çipin kaydedicileri de okunabiliyor.Kodları da visual c++ 6 ile yazılmış galiba.Yalnız program açıldığında "win drive bulunamadı" hatası veriyor.Ayrıyetten bir sürücü daha yüklenmesi lazım galiba.

Selam,

Tabi hardware takılı olmadığı için driver yüklü değil sisteminizde. Hardware takılıp sürücüsü tanıtılıp ondan sonra programın çalıştırılması gerekiyor. Program msvc++ 6.0 kaynak koduna sahip. Install klasöründe hazır sürücüleri var. Tam aranılan paket aslında.

Analyzer
Başlık: Kim korkar USB den
Gönderen: z - 16 Temmuz 2006, 20:55:37
Anladigim kadariyla USBN9604 cipinde Device Descripter tanimlamalarini yaparken, kartimizin PC tarafindan istedigimiz  herhangi bir USB urunmus gibi taninmasini saglayabiliriz.

Yani;

PC tarafi cipi değil cipe yuklenmis verileri taniyor değil mi?
Başlık: Kim korkar USB den
Gönderen: z - 16 Temmuz 2006, 21:10:42
Bu soruyu neden sordum?

Daha once verdigim linklere bakacak olursaniz bu ciple yapilmis iki ayri projeye ait PIC yazilimlari var. Birisinde 16F84 kullanilmis, bir digerinde 16F628. Iki yazilimda tamamen farkli ve PC tarafinda farkli driverlar kullanmislar.

Simdi Nationall firmasinin evolulation kitine ait  win driverimiz da var.

Peki bu driver butun projelerle sorunsuz calisacakmi?

Bu kisimi hic anlayamadim.

Nationalin cipini kullanan adam isterse web cam yapar isterse mouse yapar isterse klavye. Peki ozaman windows tarafindaki driver nasil olacak?

Yoksa National 9604 icin bir driver hepsinde de kullanilabilir mi?
Başlık: Kim korkar USB den
Gönderen: z - 16 Temmuz 2006, 21:33:01
Evet kizlar piste bekliyoruz sizi.....
Başlık: Kim korkar USB den
Gönderen: Analyzer - 16 Temmuz 2006, 22:34:59
Alıntı yapılan: "bunalmis"
.....PC tarafi cipi değil cipe yuklenmis verileri taniyor değil mi?

.....Simdi Nationall firmasinin evolulation kitine ait win driverimiz da var.

Peki bu driver butun projelerle sorunsuz calisacakmi?

.....Nationalin cipini kullanan adam isterse web cam yapar isterse mouse yapar isterse klavye. Peki ozaman windows tarafindaki driver nasil olacak?

.....Yoksa National 9604 icin bir driver hepsinde de kullanilabilir mi?

Selam,

Öncelikle şunu netleştirelim. Paket içerisindeki sürücü, eval. board'un sürücüsü. Ancak sizin projenizle neredeyse birebir örtüşüyor. Driver problemine takılmamanız için ekledim. Zaten paketin readme'sinde de kaynak kodlara bakarak kendi sürücünüzü oluşturun mealinde anlatım var.Yani yazmaçları değiştirip geliştirme açısından bu sürücü yeterli ama bir web cam için elbette uygun değil. Windows DDK ile tekrar sürücü yazılması gerekiyor.(Zamanınız varsa kaynak kodlara bakarak-benzeterek sürücü yazılabilir)
İsterseniz bu sürücüyü bir kurun, sonucu görüp buraya yazalım. Daha net bir şekilde konuşma imkanımız olur böylece.

Analyzer
Başlık: Kim korkar USB den
Gönderen: CoşkuN - 16 Temmuz 2006, 23:32:16
Alıntı yapılan: "bunalmis"Anladigim kadariyla USBN9604 cipinde Device Descripter tanimlamalarini yaparken, kartimizin PC tarafindan istedigimiz  herhangi bir USB urunmus gibi taninmasini saglayabiliriz.

Yani;

PC tarafi cipi değil cipe yuklenmis verileri taniyor değil mi?

Hocam Jan Amca'nın kitabından ve çeşitli USB kaynaklarından okuduklarımdan anladığıma göre cihazlar PC'ye ilk bağlandıklarında PC cihaza "dur bakalım sen kimsin kendini tanıt " diye komut yolluyor.Cihaz da PC'ye kimlik kartını gösteriyor.Bunlara "descriptor" yapıları deniliyor.Bunların içinde cihazla ilgili bilgiler gönderiliyor ve windowsta buna göre işini görüyor.Benim anladığım kısım şimdilik bu kadar.
Başlık: Kim korkar USB den
Gönderen: z - 18 Temmuz 2006, 23:30:42
Daha once linkini verdigim www.nectix.com sitesindeki Pic16F84-USBN9604 projesine ait asm kodlari uzun ugraslardan sonra C'ye cevirdim.

Indirmek icin tiklayin. [/b] (http://www.cncdesigner.com/picproje/9604.C)

Hatasiz cevirdigimi sanmiyorum. Program calistirildiginda windows sorunlu bir usb cihaz buldum diyor. Bundan sonrasi nasil olacak bilemiyorum.

Aramizda bu cipe ilgi duyan, ugrasan yokmu ? Yalnizmiyim?

National'in gelistirma kartinin yazilimlari  ve surucusune ait her sey verilmis.
Fakat takibi bana cok ama cok zor geldi.
Başlık: Kim korkar USB den
Gönderen: mp3dragon - 19 Temmuz 2006, 00:12:15
@bunalmis,

kusura bakma şu an kısıtlı internet bağlantım olduğu için verdiğin çipin datasheet ve dökümanlarını inceleyemedim. Ancak senin anlatımından anladığım kadarıyla 8 bit veri yoluna paralel olarak bağlanıyor ve PC ye tanıtmak için sürücü yazmak gerekiyor. Peki bu çipin ft245 ten farkı ne? sadece PC ile istediğimiz mcu' nun iletişimini mi sağlıyor? yoksa çipi istersek host olarak tanıtıp USB donanımları mcu ile kullanabiliyormuyuz? eğer sadece PC iletişimi içinse ve iş PC tarafında sürücü yazmak noktasında kalıyorsa ft245 ile de kendi sürücümüzü yazıp USB nin dibini bulabiliriz kanaatindeyim. Aradaki farkı kısaca anlatırsan sevinirim çünkü USB işini bir şekilde kafa göz yara yara da olsa öğrenmeliyiz.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 00:36:36
Sorularina cevap verecek duruma gelmedim.

Emin olmamakla birlikte bu cipi 3 yada 4 adet FT245 gibi dusunebiliriz.

Fakat kodlara bakarsan cip icinde bayagi bir seyle ugrasiliyor. USB'nin dibine inmek derken  bunlardan bahsediyorum. Bunlari usbyi detayli anlatan bir dokumandan ogrenmek lazim. Bir suru eventler (int benzeri durum) olusuyor ve bu eventlara tek tek cevap vermek gerekiyor.

Bu cipi tanimadan,  FT245 ile kiyaslamaya kalkarsak yanılabiliriz. İceride yazılım anlamında cok hamallik var. Bu hamalligin bir getirisi olmali herhalde.

Bu cipi islemciye takip usb cihazlara patronluk gorevi verebilirmiyiz ben de merak ediyorum.

USBN960X'in işlemci tarafından bakarsak bazı analizler yapma şansımız var. (Host ile aramızda neler olup bittiğini kısmen gözleme şansımız var)

Amacı, Pc'den bana datam gelsin yada datalarım PC'ye gitsinde nasıl oluyorsa olsun beni ilgilendirmez diyorsanız bu yazacaklarımın önemi yok, ancak iki kart yapacak ve bunları biribiriyle USB üzerinden konuşturacaksanız daha derinlere dalmak gerekiyor.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 01:06:18
http://www.lvr.com/usb.htm

http://www.usb.org/developers

http://www.edn.com/article/CA181883.html

http://www.usb-by-example.com/

http://www.usb.org/developers/usbfaq/

Alıntı Yap
Hello everyone. I really need help
It's the first USB device I develop.

I have a PIC16f877 interfaced with a USBN9604 usb controller through SPI interface..

Enumeration sequence fails at the same step on 2 different PCs.

enumeration sequence :
reset
suspend
reset
host sends : getdescriptor
device : descriptor sends first 8 bytes
nak0
nak0
host sends: setaddress
device : performs set the address
host asks for : getdescriptor (18 bytes)
device replies with 8 + 8 + 2 bytes
nak0
nak0
reset
suspend

enumeration stops here.. and device is reported as unrecognized by WinXP
Host HUB type USB 2.0.
Device is self powered.

Has anyone been through this ?
Does anyone have a working enumeration code that works on winXP?
I am using PIC CCS compiler.

thank you so much for your help!

Alıntı Yap
Quote:
host asks for : getdescriptor (18 bytes)
device replies with 8 + 8 + 2 bytes
nak0
nak0
reset
suspend
You might have your MaxPacketSize set to 8 of 16 Bytes for the endpoint and are sending 18 Bytes on the first IN.

Marc Reinig
System Solutions

Bu isler USB 1.1 Spec dosyasini okumadan olmuyor.

Adamlar kod yazmis reglere bir seyler girip cikiyor neden?  Cevabi Spec 1.1 de
Başlık: Kim korkar USB den
Gönderen: PhD - 19 Temmuz 2006, 08:50:05
Alıntı yapılan: "bunalmis"... USB'nin dibine inmek derken  bunlardan bahsediyorum. Bunlari usbyi detayli anlatan bir dokumandan ogrenmek lazim. ....

Selam, @bunalmis hocam belki elinde vardır ama ben belki yoktur diye göndermek istedim Jan Axelson denen birinin 571 sayfalık USB Complete isimli dökümanı.

Kolay gelsin.

Jan_Axelson_USB_Complete_2nd_Edition.zip
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 11:41:58
Hocam sağol, merak eden arkadaşlar yüklesinler. Bende basılmış kitabı var fakat çok faydasını görmüyorum.

USB 1.1 Dokümantasyonunu öğrenmeden bu işin üstesinden gelinemeyeceğini anladım. Bu önemli bir gelişme.

Dokumanın tamamını okumak çok zor. Dikkat çeken kısımları ara ara yazacağım. konular belli bir sırayı takip etmeyecek, eğer hala azmimiz devam ederse bunları düzenli şekilde sıralayıp doküman haline de getiririz.

USB iletişiminde Host (Karargah vs de deniyor ama bundan boyle patron diyeceğim) ve cihazlar vardır. USB cihazları birbirine bağlayarak kendi aralarında konuşturamayız. Muhakkak patron yeteneğinde bir cihaz gerekmektedir.

USB hattı 4 kablodan oluşur.  Bunlar

+V (Besleme)
D+
D-
Gnd

USB üzerinden konuşan bir çip beslemesini +V ve Gnd den yada tamamıyla ayrı güç kaynağından alabilir.

RS232 iletişiminde interface çipleri gerekirken USB çiplerine interface ünitesi de çipe entegre edilmiştir. (İstisna çipler olabilir)

D+ ve D-  sinyalleri diferansiyel tipte sinyallerdir ve doğrudan çip içindeki usb Transceiver ünitesine girer.  

Transceiver ünitesi transmitter ve receiver ünitesinden oluşur.

D+ ve D- Transmitter ünitesinin çıkışlarına bağlıdır.  Aynı uçlar Receiver ünitesine de girmektedir.  D+ ve D- biribirinin invertidir. Transmitter ünitesi, çıkışları aktif edecek kontrol sinyali verilmedikçe USB hattına sinyal basamaz.

D+ ve D- sinyalleri üzerine ileride tekrar konuşacağız.

D+ ve D- sinyalleri Transceiver ünitesinden geçtikten Physical Layer  Interface ünitesine gelir.

Burası USB iletişim protokollerinin yürütüldüğü, ünitedir ve biz bu kısımla hiç ilgilenmeyeceğiz. (Bu derinlikteki basınca dayanamayabiliriz. Zaten amacımız usb çip tasarımı değil, gene de merak ediyorsunuz aşağıdaki alıntıyı izleyin

Alıntı YapNe tesadüf ki ben de USB protokolünü anlamak için çalışmaya başlamıştım  Üstad USBN'den başlamışsın, ben tam anlamıyla öğrenmek adına IgorPlug'ı inceliyorum.

http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm

Analyzer
)

Fiziksel interface katmanı sonuç olarak hattan gelen veri paketlerini alır, PID, DATA, Address gibi veriler ayiklanir , CRC islemleri yapilir, verilerde hata olup olmadığı anlasilir ve en nihayetinde karşıdan gelen verileri USB registerlerimize yükler. Duruma uygun event uretir. Bu katmana USB Engine de denir.

Ancak buradan elde edilen veriler okunup hemencecik kullanılacak veriler değildir. (Yani gelen verilerle ledi yak söndür vs tipi istediğimiz türde isleri  hemen yapamayiz.)

Devam edecek.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 12:10:49
Host cihaza Patron demiştik, bilgisayara bağlanan USB nesneye de (usb klavye, mause vs) Cihaz diyelim.

Patron ile Cihaz arasında veri aktarımı sağlamak için tek yada çift yönlü Pipe (boru) döşenir. Bu bir sanal tabirdir. Arada kablo var boru bumu derseniz hayır.

Boruların uçlarına End Point denir.

Veriler bir End Pointten girer diğer End Point'den çıkar.

Bir USB çipine birden fazla boru hattı döşenebilir. (Bu çipin yapısıyla (yeteneği ile alakalı) USBN960X bu konuda iyi)

Boru hattından 4 tip veri transferi yapılabilir.

Control Transfer
Bulk Data Transfer
Interrupt Data Transfer
Isochronous Data Transfer


Kontrol Transferi tanisma asamasinda yapilir. USB cihazın ilk bağlantı aşamasında (power on yada kabloyu sokup takma asamasi) Patron degisik sorgulamalar yaparak cihazın ve USB cipini kullanan yazilimin ozellikleri (structure iceriklerini) ogrenilir.

Bulk Data Transferinde zamanlamanın kritik olmadığı  büyük hacimli veriler gönderilir. Yazıcıdan basılması istenen dokümana ait veriler. Yada Scanner cihazından patrona aktarılacak veriler gibi.

Bu tip iletişimde  USB band genişliği o an USB hattı kullanan diğer cihazların aktivitelerine de bağlıdır.

Interrupt Data transferinde, sürekli gönderilecek veri yoktur. Arada bir oluşan tipte verilerin gönderilmesinde kullanılır. (Klavye, Pointing Cihazları (Light Pen yada Tablet gibi))

Isochronous Data transferi, verilerin belirli bir zaman diliminde  kesinlikle iletilmesi gereken uygulamalarda kullanılır. (Zamanlama  kritik olduğu ses, görüntü aktarımı vs gibi)

Devam edecek
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 12:53:06
Patron donanımı neler yapar?

USB Cihazın hatta takıldığını ya da hattan söküldüğünü tespit eder.

USB cihazla arasındaki kontrol akışını yönetir.

USB cihazla arasındaki veri akışını yönetir.

USB cihazların Durum ve aktivitelerine ilişkin istatistik bilgileri toplar.

USB cihaz için besleme voltajı (enerjisini) sağlar.

Patron yazılımı neler yapar?

Cihazları konfigüre eder ve sayar.

Isochronous data transferi yapar.

Asynchronous data transferi yapar.

Güç yönetimi yapar.

Cihaz ve Bus yönetimi yapar.

Devam edecek
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 13:27:16
END POINT

Veri aktarımı için kurulmuş boru hattının iki ucuna End Point diyorduk.

End Point, veriler için son durak noktalarıdır.

Bir çip içindeki End pointler rakamlarla ifade edilir ve her End Point'e ayrı ayrı (biricik) rakamlar atanır. Bu sayede hedefler (son duraklar) tam olarak belirlenmiş olur.

Bu numaralama USB çipine ait yazılımın tasarımı aşamasında  yapılır.

USB Cihaza atanan adres ve End Point Numarasıyla birlikte son noktalar diğerlerinden kesin olarak ayrılmış olur.

(Aynı anda birden fazla Cihaz Patron portlarına bağlı olabilir her cihaz kendi içinde biricik End Pont numaralarına sahiptir, dolayısı ile Cihazların da ayrı birer adres numarası olmak zorundadır)

End Point'ler arasındaki veri iletişimi tek yönlüdür. (Patrondan Cihaza yada, Cihazdan Patrona doğru) (0 nolu EndPoint'de istisna var)

Her cihaz 0 numaralı End Point (EP0) e sahip olmalıdır. Çünkü yazıllımlar cihazı konfigüre edecek veriyi EP0'a yollarlar. EP0'a sadece ilk bağlantı aşamasında (hatta bağlanma, cihazı çalıştırma, reset etme gibi) kullanılır.

Sıfırdan farklı numaralı End  Point'e de ihtiyaç duyulur

Ancak bu End Pointler, Configuration Process (cihaz şekillendirilmeden, yani initialize işlemleri) yapılmadan kullanılamaz.

PIPES (Borular)

Patron üzerindeki yazılım,  cihazlarla borular üzerinden konuşur. Borudan iki tip haberleşme yapılabilir.

Birisi, USB de speclerde tanımlı standart Structer yapısındaki Mesage (mesaj) gönderimi.

Diğeri de Structer yapısında olmayan tipte Stream (veri dizisi) gönderimi.

0 Numaralı End Pointler (EP0) Default Control Pipe içindir. Yani cihaz enerjilendiğinde EP0 noktalarından haberleşerek cihazları konfigüre ederler. (Bunu hep hatırda tutuyoruz) Diğer borular USB cihaz konfigüre edildikten sonra kullanılabilir.

Devam Edecek
Başlık: Kim korkar USB den
Gönderen: CoşkuN - 19 Temmuz 2006, 13:54:02
Alıntı yapılan: "bunalmis"

Amacı, Pc'den bana datam gelsin yada datalarım PC'ye gitsinde nasıl oluyorsa olsun beni ilgilendirmez diyorsanız bu yazacaklarımın önemi yok, ancak iki kart yapacak ve bunları biribiriyle USB üzerinden konuşturacaksanız daha derinlere dalmak gerekiyor.

Demişsiniz hocam ama Jan amca kitabında "interface limits " bölümünde şöyle birşey diyor:
"Peer-to-Peer Communications Every USB communication is between a host computer and a peripheral. The host is a PC or other computer with host-controller hardware. The peripheral contains device-controller hardware.Hosts can't talk to each other directly, and peripherals can't talk to each other directly. Other interfaces, such as IEEE-1394, allow direct peripheral-
to-peripheral communications."

Yani anladığım kadarıyla USB de host mutlaka PC olmalı.Yanılıyor muyum?
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 14:05:20
Yazar doğru diyor, sorun kullanılan çiplerden kaynaklanıyor. Bizim kullandığımız çipler Cihaz yapmak için, fakat Host özelliğinde kart yapmak için de  çipler var. Forumdaki adını şu anda hatırlayamadığım bir arkadaş ARM-7 nin bu özelliğe sahip olduğundan bahsetmişti.

Yani FT245 çipini iki karta takıp kartları birbiriyle konuşturamayız ama ARM-7 ile konuştururuz. Yada en kötü ihtimal PC motherboarddan USB çipi söker kendi kartımıza takarız. :D
Başlık: Kim korkar USB den
Gönderen: CoşkuN - 19 Temmuz 2006, 14:07:28
O zaman şöyle diyebiliriz:Patron bir PC ya da PC gibi davranabilen bir cihaz olmalıdır.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 14:18:00
Şöyle desek daha doğru olur. Patron kartta, PClerdeki gibi Host özelliğinde bir USB çipi olmalı.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 16:23:26
İlk başlarda fazla derinlere girmek istemediğimizi söylemiştik. Ancak ilerleyen dönemlerde PID, ACK, NACK STALL gibi terimlerle karşılaşmaya başlıyoruz.

USB hattındaki verilerin nasıl sıralandığı neler içerdiğini bilmek faydalı. Bu durumda USB 1.1  Spec. dokümanının 8. Bölümüne göz atmanızda fayda var.

Dokümana bakıldığında paket içeriğinin ne olduğu PID değerinden anlaşılmaktadır.

4 Tip PID vardır.

Token
Data
Handshake
Special (Şimdilik ilgilenmiyoruz)

Token tipi PID grubunda OUT, IN, SOF, SETUP
Data tipi PID grubunda Data0, Data1 ....
Handshake tipi PID grubunda  ACK, NAK, STALL

Paketi  tanımlayan PID ye kısaca değindikten sonra ACK, NAK, STALL terimlerine bakalım. (asm yazılımda çok sık geçiyordu)

ACK:  Alınan veri hatasız olarak ulaştıysa ACK cevabı veririz.

NAK: Hatalı veri alındıysa yada veriyi gönderemediysek NAK cevabı veririz.

STALL: End Point çakılır kalırsa istek anlaşılamadıysa STALL cevabı verilir.

Patrona vereceğimiz bu üç cevaba göre Patron verileri bize ulasştırmaya çalışır.

Dokumanda 8.6.4 Corrupted ACK Handshake kısmına bakın.

Açıklamalara resimleri koymak çok iyi olurdu ancak uzun iş. Bunun yerine  USB 1.1 dokumanında bölüm no veriyorum.

Şimdi sayfaları atlayarak  177. sayfaya geçiyoruz.

USB cihaz Patrona takıldığında neler oluyor?

JAN amcanın Türkçeye çevrilmiş kitabında 51-65 sayfaları şimdi çok çok anlaşılır oldu.

Bu kısım önemli çünkü USB çipimizde de adım adım bazı işlemler yapacağız.

Cihazın bağlanması:

HUB porttaki sinyalleri takip eder. Normalde Hub daki  çipin Tranceiver ünitesinde D+ ve D- hatları 15 K lık pull down dirençleri ile  lowa çekilidir.

USB kartımızın D+ yada D- hattı ise 1K5 direnç ile 3v3 hattına bağlıdır.
Bu direncin D+ ya mı yoksa D- yemi bağlı olduğu cihazın hızını HUB'a da tarif etmeye yarar. (Tam hızlı cihazlarda D+ ya bağlı)

İşte Hub bu direncin varlığını D+ ve D- deki voltaj farkından anlar. Bu direnc varsa hatta kart takili demektir.

Hub bu olayı anladıktan sonra BUS'ı beslemeye devam eder ve Patrona durumu izah eder.

Patron da HUB'a, şu bulduğun cihazı bir resetle bakalım der.

HUB, kartımıza gelen USB hattında D+ ve D- kablolarını en az 10 ms boyunca lowda tutar. (Normalde bu hatlar biribirinin zıttıdır ve reset durumu özel bir durumdur.)


Patron cihaza GET_PORT_STATUS komutu yollar. Verilecek cevapta bir bit reset durumunu gösterir. Eğer cihazımız artık resette değilse Patron bunu gelen verideki bite bakarak anlar.

Artık End Point 0 da varsayılan boru hattı üzerinden haberleşme başlayabilir. Bu esnada cihaz usb port beslemesinden 100mA den daha az akım çeker.

HUB reset işlemi sonrasında Gene hattaki voltaja bakarak cihazımızın  hızını tespit eder ve Patronun  ilk GET_PORTSTATUS_ isteğine cevap olarak bildirir.

Patron Cihazla arasında kurulduğu varsayılan boru hattının maximum paket büyüklüğünü öğrenmek için kartımıza GET_DESCRIPTOR ısteği yollar. Bu istek kartımızdaki çipin End Point 0'ına gider.

Not:Yazılanları okuduğunuzda bölük börçük ilerlediğimizi farkedeceksiniz, ancak asm den C ye çevirdiğimiz programı biraz inceleyin. Burda söylenenlere benzer açıklamalar en azından terimler orda da geçiyor ve çok yakında taşlar oturmuş olacak.

C programı incelemek için tıklayın (http://www.cncdesigner.com/picproje/9604.C)

Devam edecek
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 18:24:46
Daha önce usb cihazımıza (kamera mouse vs) Cihaz diyeceğimizi söylemiştik fakat kart desek daha iyi olacakmış. Bundan böyle kart diyeceğiz.

Patron kartımıza Get_Desriptor isteğinde bulunur demiştik. (Desriptor içeriği USB 1.1 Spec. sayfa 197 de.)

Descriptor incelenirse max paket boyu bilgisinin 8. sırasında da saklı olduğu görülecektir. Windows işletim sisteminde Patron 64 byte istemesine rağmen aradığı bilgi ilk 8 byte içinde var olduğundan paket boyunu okuyup hemen mevcut işlemi tamamlamadan terkeder.

Patron kontrol transferini yarıda keserse kartımız bunu anlar (event larımıza değineceğiz), bir sonraki adımda, daha onceki istegin geregi (verilerin tamami gonderme islemi) tamamlanmadigi halde  Patronun yeni isteğine cevap vermek zorundadır. Dolayısı ile yukarıdaki terkediş sürecinden sonra Patronun kartımıza reset atması gerekmez.

Programi inclediginizde yazilimin, klasik program yazim mantigindan biraz farkli oldugunu daha cok state machine mantigina benzedigini goreceksiniz. Bu yontem bu tip uygulamalarda cok buyuk kolayliklar saglar ve daha kisa program yazimina imkan verir.

Şimdiki aşama kartımıza bir adres ataması yapılması aşamasıdır. Patron, kartımıza Set_Address isteğine bulunur. Kartımız veriyi okur ve tastik bilgisi gönderir ve adresi saklar. Cihaz sökülene kadar artık bu adres geçerlidir.

Adres yuklenmesinden sonra artik veriler bu adrese gelir. Atiyorum Patron 13 numarali adresin 0 numarali boru hattina veri gonderirir yada 13 numarali adresden x numarali botu hattindan veri almissa haa su bizim paralel portta USBN9604 calismasi yapan kisilerin kartindan bu veri gelmis der.  Patron pek cok usb cihazla tek basina konusmaktadir. PC icindeki USB cipi ile PC icindeki HUB arasiundaki  USB baglantisi tekdir ve butun veriler burdan akar (Manyak bir trafik) Eger USB interface'ini tasarlayanlar PCmizde tek USB port olacagini ve sadece tek usb cihaz baglanmasini ongorselerdi bu adres verme islemine ihtiyac kalmayacakti)

Neyse devam edersek;

Patron kartımızın yeteneklerini öğrenebilmek için  daha önce yarım bıraktığı işlem olan Get_Descriptor'u bir daha yollar.

Desriptorde 17.Byte da saklanan konfigürasyon sayısına bakar ve  birden fazlaysa hepsinin (alt konfigürasyonların tamamının) ilk 9 bytlarını  ister. Böylece bütün alt konfigürasyon bilgileri bulunur.

Daha sonra FF bytea kadar toplam uzunluk istenir...  Tabiki Patron 256 adet veri istiyor diye Romumuzdan 256 veri okuyup gondermeyecegiz.

Kontrol desriptorlerden baslayarak altlara dogru butun veriler paket paket gonderilir. Bu verilerin sayisi 256 dan kucukse (bizde kucuk en son veriden sonra uzunluk paket boyunu tamamlasin tamamlamasin yollanir.
Patron eksik paketin tam dolu olmadigini gorunce haa adamdaki veriler bitmis der. (Eger sansimiza en son veri ile paketi tam doldurduysa paket gonderilir ardindan 1 bos paket yollanir) Dolayisi ile Patron bizden 256 veri gelmesini beklemez.

Artık Patron, kartımıza en uygun sürücüyü yükleme aşamasına gelmiştir. Bunun için karttan istemiş olduğu konfigürasyon bilgilerinden satıcı, üretici kimlik bilgisi, sürüm numarası, cihaz sınıfı  verilerini,  sistemde bulunan INF dosyalarındaki verilerle mukayese eder. Uygun surucuyu bulduysa sorun yoktur bulamadiysa bizden surucunun bulundugu yeri gostermemizi ister. Zaten bunu windows kullanicisi olarak derinlerden gelisen bu olaylarin farkinda olmadan  zaman zaman yapiyoruz.

Devam edecek.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 21:07:06
Su anda kartimiza ait surucu Patron tarafinda yuklenmis durumdadir.

Surucu sayesinde Patron, kartimizdaki konfigurasyonlardan uygun birisinin secilmesini ister. Biz uygulamamizda tek konfigurasyonla calisacagimiz icin burdaki detaylarla ilgilenmeyelim.

Simdi bozuk plak gibi ayni seyleri tekrar tekrar soyleyecegiz ama;

Device Decriptor bilgisine tekrar geri donelim.

17 Byte'dan olusan verilerin  formati bellidir. Bu veriler bir tabloda tutulur.

Kartimizdaki islemci bu tabloyu okuyarak USC cipimizin uygun registerlerine yazar ve istendiginde Patrona yollar.

Patron Get_Descriptor dediginde kontrol transferine basvurur.

Simdi daha onceki C programinda ilgili bolumu bulalim. Neler yapilmis anlamaya calisalim.

Oncelikle 0 nolu End Point registerlerinden TX ile ilgili reglerin neler oldugunu soyleyelim.

TXD0 Transmit Data Registeri
TXC0 Transmit Command Registeri
TXS0 Transmit Status Registeri

Aslinda bu reg isimlendirmesi, asenkron iletisimde kullandigimiz reg isimlendirmesiyle aynidir.

Cipimizde yukaridaki registerlerin herbirinden 4 tane var.
Mesela TXD0, TXD1, TXD2, TXD3 gibi.

(Cipimizde 6 + 1 ayri endpoint olabiliyor)

Asagidaki kodlamada TXC0 ve TXD0 kullanilmis. TXD0 8 bit verinin yazildigi 8 bytlik derinlikte FIFO dur.  Gonderilmek istenen veriler buraya yazilir.

TXC0.3  (0 dahil 3. bit)  FLUSH bitidir. Bu bit set edilirse FIFO index sayicilari basa (en tepeye) alinir. Buffer icerigi cope gitmis olur. Bu islem iletisim esnasinda yapilirsa sozu edilen temizlik islemleri transfer bitiminde  yapilir.

TXC0.2 Toggle bitidir. 0 ise PID icin Data0 degeri, 1 ise Data1 degeri kullanilir.



unsigned char tx_setup() // The transmission routine for desriptor
{
char boy,Finish;

    Finish=0x00;
    wr(TXC0,0x08); // Reset FIFO Pointer
    boy=usb_length-usb_pac_count;
    if (boy)
{
if (boy<9) usb_byte_offset=boy; else usb_byte_offset=8;
do
   {
     if (usb_mode_flags==0x01)
{
  usb_tx_reg=DevDescripter[usb_pac_count-1];
}
     else if (usb_mode_flags==0x11)
{
  usb_tx_reg=ConDescripter[usb_pac_count-1];
}
     else if (usb_mode_flags==0x11) // sanirim burda hata yapmislar
{
  usb_tx_reg=Signature[usb_pac_count-1];
}
     else { usb_mode_flags=0x00; return(0); }
     wr(TXD0,usb_tx_reg); // TXD0 FIFO
     usb_pac_count++;
     usb_byte_offset--;
   } while (!usb_byte_offset);
Finish=0x01;
}

    if (!Finish) usb_mode_flags=0x00;
    if (usb_flow_flags&1) wr(TXC0,0x05); else wr(TXC0,0x01);
    usb_flow_flags^=1;
    return(0);
}




Not: Kodlama tarafimdan yapilmistir ve hata icerebilir.

Yukaridaki kodda usb_mode_flags 1 degeri iceriyorsa  Device Decriptor tablosundan 8 byte yollanmaktadir.

usb_mode_flags, programi yazan kisinin program yaziminda kendi olusturdugu bir degiskendir. O halde bu degiskene  kim 1 degeri veriyor da Device Descriptor gonderilsin istiyor ona goz atalim.

Devam edecek.
Başlık: Kim korkar USB den
Gönderen: z - 19 Temmuz 2006, 21:23:10
Gercektende olaylar daha once anlattigimiz gibi (kitaplardan okuyup yazdigim gibi gelismektedir)

usb_mode_flags degiskenine 1 degerinin atildigi yer

req_device_setup fonksiyonudur.


char req_device_setup()
{
    if (Signature[bmRequestType]&0x80)
{

//  Device to host

 if ((Signature[bmRequestType]&0x60)==0x00) // Standart
    {
      if (Signature[bmRequest]==0x06)
 {
   usb_flow_flags|=0x81;
   if (Signature[wValue_h]==0x01)
      {
usb_mode_flags=0x01;
usb_length=DevDescripter[0x00];
desc_cntl();
return(0);
      }
   else if (Signature[wValue_h]==0x02)
      {
usb_mode_flags=0x11;
usb_length=ConDescripter[0x02];
desc_cntl();
return(0);
      }
 }
    }
 stall(EPC0);
 return(0);
}
    else
{

//  Host to device

 if ((Signature[bmRequestType]&0x60)==0x40) // Vendor
    {
      if (Signature[bmRequest])
 {
   if (Signature[bmRequest]==0x81)
      {
led=1;
      }
   else if (Signature[bmRequest]==0x80)
      {
led=0;
      }
   else { stall(EPC0); return(0);}
   wr(TXC0,0x0D);
   wr(RXC0,0x01);
   return(0);
 }
      else
 {
   usb_flow_flags|=0x01;
   usb_mode_flags=0xFF;
   Signature[wLength_l]=8;
   usb_length=8;
   desc_cntl();
   return(0);
 }
    }

 if ((Signature[bmRequestType]&0x60)==0x20) // Class
    {
      stall(EPC0);
      return(0);
    }

 if ((Signature[bmRequestType]&0x60)==0x00) // Standart
    {
      if (Signature[bmRequest]==0x09)  // Set Configuration
 {
   wr(RXC0,0x08); // Flush
   wr(TXC0,0x0D); // Flush and send
   wr(RXC0,0x01); // Re-enable receving
   return(0);
 }
      else if (Signature[bmRequest]==0x05)  // Set Address
 {
   wr(TXC0,0x08); // Flush
   wr(TXC0,0x01); // Send
   wr(EPC0,0x40);
   wr(FAR,Signature[wValue_l]|0x80);
   usb_mode_flags=0x00;
   usb_flow_flags|=0x04;
   wr(RXC0,0x01);
   return(0);
 }
      else if (Signature[bmRequest]==0x01)  // Clear Feature
 {
   if (Signature[wValue_l]==0x01)
      {
stall(EPC0); // device wakeup
return(0);
      }
   unstall(EPC0);
   wr(TXC0,0x0D);
   wr(RXC0,0x00);
   return(0);
 }
    }
 stall(EPC0);
}
    return(0);
}


Ara not:

Programda RXC0 register iceriginin sik sik kontrol edildigi gozleniyor.
RXC0 da 6 nolu bit setup bitidir ve bu bit set olmuş ise setup paket alindigini soylenmektedir.

USB 1.1 Spec 185.sayfa da Request kodlarini goruyoruz.

Sik sik karsilastigimiz karsilastirmalarda kullanilan karsilastirma degerlerinin kaynagi sanirim belli oldu.


Devam edecek.
Başlık: Kim korkar USB den
Gönderen: CoşkuN - 20 Temmuz 2006, 13:41:20
Hocam şu anki USB 2.0 , 1.1 ile  uyumlu olduğuna göre burada öğrendiklerimizi 2.0 için de geçerli olacak değil mi?
Başlık: Kim korkar USB den
Gönderen: z - 20 Temmuz 2006, 15:34:03
Hocam 2.0 da ne gibi farklılıklar var hiç bakmadım. Önce çok geç kaldığımız  1.1' i halledelim.
Başlık: Kim korkar USB den
Gönderen: Subzero - 20 Temmuz 2006, 16:47:05
2.0 için de geçerli, zaten bu versiyonlar arasında geçiş yaparken
yazdığın programı neredeyse hiç değiştirmiyorsun,
protokoller aynı. Yani siz herhangi biri için protokolleri yazın
enumerationı yapın gerisi kolay.
Bu arada coşkun, Jan amca değil teyze dicen  :D
Kendisi USB forumunda da yazar bazen, sorularınıza cevap verebilir
sakın bay demeyin  :D
Başlık: Kim korkar USB den
Gönderen: z - 20 Temmuz 2006, 23:07:21
http://member.newsguy.com/~rhuang/USBbase3.asm

Yukaridaki asm kodlarini derleyip LST dosyasini bana gonderebilirmisiniz?
Başlık: Kim korkar USB den
Gönderen: CoşkuN - 20 Temmuz 2006, 23:43:14
Alıntı yapılan: "Subzero"2.0 için de geçerli, zaten bu versiyonlar arasında geçiş yaparken
yazdığın programı neredeyse hiç değiştirmiyorsun,
protokoller aynı. Yani siz herhangi biri için protokolleri yazın
enumerationı yapın gerisi kolay.
Bu arada coşkun, Jan amca değil teyze dicen  :D
Kendisi USB forumunda da yazar bazen, sorularınıza cevap verebilir
sakın bay demeyin  :D
Bunu öğrendiğim iyi oldu.Jan ismi bayan ismi gibi gelmemişti bana hiç  :oops:

Alıntı yapılan: "bunalmis"http://member.newsguy.com/~rhuang/USBbase3.asm

Yukaridaki asm kodlarini derleyip LST dosyasini bana gonderebilirmisiniz?

Hocam derledim,dosyalar:
http://www.hemenpaylas.com/download/1223067/usb.rar.html
Başlık: Kim korkar USB den
Gönderen: z - 21 Temmuz 2006, 00:13:51
Coskun cok teşekkürler, elimdeki derleyiciler cok eski ve cogu syntaxi tanimiyordu. Yeni bir derleyici indirip kurmaktansa yardiminizi istedim.
Başlık: Kim korkar USB den
Gönderen: z - 21 Temmuz 2006, 02:15:57
Alıntı yapılan: "mp3dragon"kusura bakma şu an kısıtlı internet bağlantım olduğu için verdiğin çipin datasheet ve dökümanlarını inceleyemedim. Ancak senin anlatımından anladığım kadarıyla 8 bit veri yoluna paralel olarak bağlanıyor ve PC ye tanıtmak için sürücü yazmak gerekiyor. Peki bu çipin ft245 ten farkı ne? sadece PC ile istediğimiz mcu' nun iletişimini mi sağlıyor? yoksa çipi istersek host olarak tanıtıp USB donanımları mcu ile kullanabiliyormuyuz? eğer sadece PC iletişimi içinse ve iş PC tarafında sürücü yazmak noktasında kalıyorsa ft245 ile de kendi sürücümüzü yazıp USB nin dibini bulabiliriz kanaatindeyim. Aradaki farkı kısaca anlatırsan sevinirim çünkü USB işini bir şekilde kafa göz yara yara da olsa öğrenmeliyiz.


Bu soruya verilebilecek bir cevap daha olustu.

Diyelimki Islemcili bir kartimizin 4 tane 8 bitlik portu var.

Bu portlara bagli harici kartlar uzerinden veriler geliyor olsun. Bu kartlarin adlari A,B,C,D olsun.

Ilerleyen donemde A,B,C,D kartlarini kaldirip attigimizi ve kartlarin gorevini PC de !! 4 ayri !!  programa verdigimiz varsayalim.

Kartimiza USBN9604 gibi cok sayida End Point iceren bir cip baglarsak
Kart uzerindeki islemciye sadece ilave bir, USBN9604 cipini kullandiracak  yazilim eklentisiyle cip icinde A,B,C,D portlarini olusturabiliriz. (Geriye islemci yaziliminda, portlara erisim yapilan noktalarda, USB cipinin icindeki reglere kanca atmak kaliyor)

Verdigim ornegi  biraz dikkatle incelerseniz USBN9604 turu bir cipin ne kadar avantajli oldugunu goreceksiniz.
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 02:00:53
Nihayet  Win XP,  taskbar uzerinde Found new farware (USB Test)  mesajini vererek kartimizdan haberdar oldugunu soyledi ve  beni cok mutlu etti. Hemen ardindan da kartimizin driverini yuklemek uzere

Welcome to Found New Hardware Wizard penceresini ekrana getiriyor.

Isin kart  tarafini ve yazilimlarini bitirdik. (Hala Bug olabilir)

Bu asamada artik windowsa driver bulmamiz yada yazmamiz gerekecek.

Driver yazmak amaciyla makineme yukleyebilecegim program  icin yardimlarinizi bekliyorum. (C  r  a  c  k  l  i     b  i  r   s  e  y)

USBN9604.C version 2 icin biraz sabir.
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 12:24:05
JAN teyezinin kitabından artık yararlanmaya başladım, en azından USB 1.1 speclerini daha az tercüme etmek zorunda kalıyorum.

Zaten Teyzemiz de aslında spec pdf inde verilenleri birazcık süslemiş o kadar.

Bu kitabın hala kötü yazılmış bir kitap olduğu, USB yi kendi kendimize  bu kitabı okuyarak öğrenemeyeceğimiz görüşümde ısrar ediyorum.  

Kitapda verilen bilgilerin hepsi doğru, sorun, kitabın, bu işi bilmeyenlere nasıl yaklaşılacağının bilinmeden yazılmış olmasında.

Neyse bu kadar karalamadan sonra;

Windows için daha önce driver yazmış yada yazmaya uğraşmış kimse yok mu?

Bu işin ABC si nerededir?

Yada şu Jungo driver yazma programını meteliksiz nasıl bulacağız.
Başlık: Kim korkar USB den
Gönderen: e3 - 23 Temmuz 2006, 12:41:11
Hocam siz istedinizde biz size Jungo bulmadık mı? :D

Jungo Download Page (http://www.jungo.com/dnload.html#dnload_wd)

Jungo WinDriver v.8.01 Crc (http://rapidshare.de/files/26707629/WinDriver.v8.01.rar.html)

Rar Şifresi :. protection
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 15:23:27
Jungo ve c r a c k için teşekkürler.

Alıntı yapılan: "bunalmis"Daha önce usb cihazımıza (kamera mouse vs) Cihaz diyeceğimizi söylemiştik fakat kart desek daha iyi olacakmış. Bundan böyle kart diyeceğiz.

Patron kartımıza Get_Desriptor isteğinde bulunur demiştik. (Desriptor içeriği USB 1.1 Spec. sayfa 197 de.)

Descriptor incelenirse max paket boyu bilgisinin 8. sırasında da saklı olduğu görülecektir. Windows işletim sisteminde Patron 64 byte istemesine rağmen aradığı bilgi ilk 8 byte içinde var olduğundan paket boyunu okuyup hemen mevcut işlemi tamamlamadan terkeder.

Patron kontrol transferini yarıda keserse kartımız bunu anlar (event larımıza değineceğiz), bir sonraki adımda Patronun yeni isteğine cevap vermek zorundadır. Dolayısı ile yukarıdaki terkediş sürecinden sonra Patronun kartımıza reset atması gerekmez.

Şimdiki aşama kartımıza bir adres ataması yapılması aşamasıdır. Patron, kartımıza Set_Address isteğine bulunur. Kartımız veriyi okur ve tastik bilgisi gönderir ve adresi saklar. Cihaz sökülene kadar artık bu adres geçerlidir.

Patron kartımızın yeteneklerini öğrenebilmek için  daha önce yarım bıraktığı işlem olan Get_Descriptor'u bir daha yollar.

Desriptorde 17.Byte da saklanan konfigürasyon sayısına bakar ve  birden fazlaysa hepsinin (alt konfigürasyonların tamamının) ilk 9 bytlarını  ister. Böylece bütün alt konfigürasyon bilgileri bulunur.

Daha sonra FF bytea kadar toplam uzunluk istenir... (Bu bizi bu aşamada fazla ilgilendirmiyor çünkü kartı tek konfigürasyonlu yapacağız)

Artık Patron, kartımıza en uygun sürücüyü yükleme aşamasına gelmiştir. Bunun için karttan istemiş olduğu konfigürasyon bilgilerinden satıcı, üretici kimlik bilgisi, sürüm numarası, cihaz sınıfı  verilerini,  sistemde bulunan INF dosyalarındaki verilerle mukayese eder......


Yukarıda Descriptor uzunluğu 17 byte olarak söylenmişti. Aslında  Desriptorun uzunluğu da dahil olmak üzere 18 byte dır.

Şimdi kartımız USB kablosu ile windows işletim sistemi yüklü bir makineye bağlandığında ve kart yazılımı koşturulduğunda kart ile kart yazılımı arasındaki dialoğa bakalım.

Bu dialog bitiminde zaten PC de yeni bir cihaz buldum demekte ve driver yükleme  menüsünü ekrana getirmektedir.

Alıntı yapılan: "USBN9604"


Esc ile programdan cikabilirsiniz

Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)

Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:80
bmRequest    :06
wValueL      :00
wValueH      :01
wIndexL      :00
wIndexH      :00
wLengthL     :40
wLengthH     :00

Requestin kodu:6

Patron Device Descriptoru istiyor, Istenen Descriptorun indexi:0

Descriptorumuzun uzunlugu 18 byte dir
Patron'un talep ettigi veri uzunlugu 64 byte dir

Gonderilecek byte sayisi=18

Simdi Datalari yolluyoruz

[1]=12  [2]=01  [3]=10  [4]=01  [5]=FF  [6]=FF  [7]=FF  [8]=08  

Simdi Datalari yolluyoruz

[9]=47  [10]=05  [11]=31  [12]=21  [13]=21  [14]=00  [15]=01  [16]=02  
Gelen bir sey var Gidenlere ACK gelmis
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)
Patron yazilimsal olarak resetlenmemizi istedi  (Bizde kendimizi resetledik)

Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:00
bmRequest    :05
wValueL      :04
wValueH      :00
wIndexL      :00
wIndexH      :00
wLengthL     :00
wLengthH     :00

Requestin kodu:5


Patron tarafindan atanan adres 04 olup adres kartimiza yuklendi


Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:80
bmRequest    :06
wValueL      :00
wValueH      :01
wIndexL      :00
wIndexH      :00
wLengthL     :12
wLengthH     :00

Requestin kodu:6

Patron Device Descriptoru istiyor, Istenen Descriptorun indexi:0

Descriptorumuzun uzunlugu 18 byte dir
Gonderilecek byte sayisi=18

Simdi Datalari yolluyoruz

[1]=12  [2]=01  [3]=10  [4]=01  [5]=FF  [6]=FF  [7]=FF  [8]=08  

Simdi Datalari yolluyoruz

[9]=47  [10]=05  [11]=31  [12]=21  [13]=21  [14]=00  [15]=01  [16]=02  
Simdi Datalari yolluyoruz

[17]=03  [18]=01  
Gelen bir sey var Gidenlere ACK gelmis

Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:80
bmRequest    :06
wValueL      :00
wValueH      :02
wIndexL      :00
wIndexH      :00
wLengthL     :09
wLengthH     :00

Requestin kodu:6

Patron Configuration Descriptoru istiyor, Istenen Descriptorun indexi:0

Descriptorumuzun uzunlugu 9 byte dir

Simdi Datalari yolluyoruz

[1]=09  [2]=02  [3]=20  [4]=00  [5]=01  [6]=01  [7]=00  [8]=80  

Simdi Datalari yolluyoruz

[9]=32  
Gelen bir sey var Gidenlere ACK gelmis

Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:80
bmRequest    :06
wValueL      :00
wValueH      :03
wIndexL      :00
wIndexH      :00
wLengthL     :FF
wLengthH     :00

Requestin kodu:6

Patron String Descriptoru istiyor, Istenen Descriptorun indexi:0


Gonderilecek Verilerin uzunlugu:4
Simdi Datalari yolluyoruz

[1]=04  [2]=03  [3]=09  [4]=04  

Gelen bir sey var Gidenlere ACK gelmis

Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:80
bmRequest    :06
wValueL      :03
wValueH      :03
wIndexL      :09
wIndexH      :04
wLengthL     :FF
wLengthH     :00

Requestin kodu:6

Patron String Descriptoru istiyor, Istenen Descriptorun indexi:3


Gonderilecek Verilerin uzunlugu:10
Simdi Datalari yolluyoruz

[1]=0A  [2]=03  [3]=54  [4]=00  [5]=30  [6]=00  [7]=30  [8]=00  

Simdi Datalari yolluyoruz

[9]=30  [10]=00  
Gelen bir sey var Gidenlere ACK gelmis

Gelen bir sey var Gidenlere ACK gelmis + Setup paket de gelmis
Gelen veri sayisi=8

Setup Packet Icerigi asagidadir

bmRequestType:80
bmRequest    :06
wValueL      :00
wValueH      :02
wIndexL      :00
wIndexH      :00
wLengthL     :FF
wLengthH     :00

Requestin kodu:6

Patron Configuration Descriptoru istiyor, Istenen Descriptorun indexi:0

Descriptorumuzun uzunlugu 9 byte dir
255 adet ister
Gonderilecek byte sayisi=255

Simdi Datalari yolluyoruz

[1]=09  [2]=02  [3]=20  [4]=00  [5]=01  [6]=01  [7]=00  [8]=80  

Simdi Datalari yolluyoruz

[9]=32  [10]=09  [11]=04  [12]=00  [13]=00  [14]=02  [15]=FF  [16]=FF  
Simdi Datalari yolluyoruz

[17]=FF  [18]=00  [19]=07  [20]=05  [21]=81  [22]=02  [23]=40  [24]=00  
Simdi Datalari yolluyoruz

[25]=00  [26]=07  [27]=05  [28]=01  [29]=02  [30]=40  [31]=00  [32]=00  
Simdi Datalari yolluyoruz

[33]=04  [34]=03  [35]=09  [36]=04  [37]=0E  [38]=03  [39]=4D  [40]=00  
Simdi Datalari yolluyoruz

[41]=79  [42]=00  [43]=20  [44]=00  [45]=55  [46]=00  [47]=53  [48]=00  
Simdi Datalari yolluyoruz

[49]=42  [50]=00  [51]=12  [52]=03  [53]=55  [54]=00  [55]=53  [56]=00  
Simdi Datalari yolluyoruz

[57]=42  [58]=00  [59]=20  [60]=00  [61]=54  [62]=00  [63]=65  [64]=00  
Simdi Datalari yolluyoruz

[65]=73  [66]=00  [67]=74  [68]=00  [69]=0A  [70]=03  [71]=54  [72]=00  
Simdi Datalari yolluyoruz

[73]=30  [74]=00  [75]=30  [76]=00  [77]=30  [78]=00  [79]=50  [80]=61  
Simdi Datalari yolluyoruz

[81]=74  [82]=72  [83]=6F  [84]=6E  [85]=20  [86]=79  [87]=61  [88]=7A  
Simdi Datalari yolluyoruz

[89]=69  [90]=6C  [91]=69  [92]=6D  [93]=73  [94]=61  [95]=6C  [96]=20  
Simdi Datalari yolluyoruz

[97]=6F  [98]=6C  [99]=61  [100]=72  [101]=61  [102]=6B  [103]=20  [104]=72  
Simdi Datalari yolluyoruz

[105]=65  [106]=73  [107]=65  [108]=74  [109]=6C  [110]=65  [111]=6E  [112]=6D  
Simdi Datalari yolluyoruz

[113]=65  [114]=6D  [115]=69  [116]=7A  [117]=69  [118]=20  [119]=69  [120]=73  
Simdi Datalari yolluyoruz

[121]=74  [122]=65  [123]=64  [124]=69  [125]=20  [126]=20  [127]=00  [128]=28  
Simdi Datalari yolluyoruz

[129]=42  [130]=69  [131]=7A  [132]=64  [133]=65  [134]=20  [135]=6B  [136]=65  
Simdi Datalari yolluyoruz

[137]=6E  [138]=64  [139]=69  [140]=6D  [141]=69  [142]=7A  [143]=69  [144]=20  
Simdi Datalari yolluyoruz

[145]=72  [146]=65  [147]=73  [148]=65  [149]=74  [150]=6C  [151]=65  [152]=64  
Simdi Datalari yolluyoruz

[153]=69  [154]=6B  [155]=29  [156]=0A  [157]=00  [158]=0A  [159]=50  [160]=61  
Simdi Datalari yolluyoruz

[161]=74  [162]=72  [163]=6F  [164]=6E  [165]=20  [166]=74  [167]=61  [168]=72  
Simdi Datalari yolluyoruz

[169]=61  [170]=66  [171]=69  [172]=6E  [173]=61  [174]=6E  [175]=20  [176]=61  
Simdi Datalari yolluyoruz

[177]=74  [178]=61  [179]=6E  [180]=61  [181]=6E  [182]=20  [183]=61  [184]=64  
Simdi Datalari yolluyoruz

[185]=72  [186]=65  [187]=73  [188]=20  [189]=25  [190]=30  [191]=32  [192]=58  
Simdi Datalari yolluyoruz

[193]=20  [194]=6F  [195]=6C  [196]=75  [197]=70  [198]=20  [199]=61  [200]=64  
Simdi Datalari yolluyoruz

[201]=72  [202]=65  [203]=73  [204]=20  [205]=6B  [206]=61  [207]=72  [208]=74  
Simdi Datalari yolluyoruz

[209]=69  [210]=6D  [211]=69  [212]=7A  [213]=61  [214]=20  [215]=79  [216]=75  
Simdi Datalari yolluyoruz

[217]=6B  [218]=6C  [219]=65  [220]=6E  [221]=64  [222]=69  [223]=0A  [224]=00  
Simdi Datalari yolluyoruz

[225]=0A  [226]=44  [227]=65  [228]=73  [229]=63  [230]=72  [231]=69  [232]=70  
Simdi Datalari yolluyoruz

[233]=74  [234]=6F  [235]=72  [236]=75  [237]=6D  [238]=75  [239]=7A  [240]=75  
Simdi Datalari yolluyoruz

[241]=6E  [242]=20  [243]=75  [244]=7A  [245]=75  [246]=6E  [247]=6C  [248]=75  
Simdi Datalari yolluyoruz

[249]=67  [250]=75  [251]=20  [252]=25  [253]=64  [254]=20  [255]=62  

Gelen bir sey var Gidenlere ACK gelmis


Yazılımda küçük bir bug var henüz bulamadım.
----------------

Sozkonusu bug suymus, Patron configuration descriptorden itibaren  FF adet veri istediginde tamam deyip yukarida goruldugu gibi FF adet veri yolluyordum. Halbuki desriptorde  255 verımız yok daha az. Nerde bitti orda birakmak ve eksik paket icerigi ile null paket olarak gondermek gerekiyormus. (Bu önemli konuyu daha onceki bolumleri editleyip ilave ettim.)
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 15:44:41
Alıntı Yap
Boru hattından 4 tip veri transferi yapılabilir.
Control Transfer
Bulk Data Transfer
Interrupt Data Transfer
Isochronous Data Transfer

Hatırlarsanız böyle demiştik.

Bir üstte yazdığımız dialog Control Transferin taa kendisidir. USB protokolunu tam olarak bilmemizi ve uygulamamızı gerektirmesi nedeniyle en zor transfer budur.

USB speclerde ne deniyorsa harfi harfine yapılmak zorundadır.
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 16:26:39
Şimdi biraz ara verelim ve USB ile Asenkron seri iletişimi mukayese edelim.

Asenkron iletişimde, göndereceğimiz veriler TX hattından gider, Karşı taftan da gönderilen veriler RX hattından gelir. Dolayısı ile RX-TX cross'lu olmak zorundadır.

Eğer donanımsal handshake yapılacaksa RTS-CTS-RSR-DTR yazacağınız handshake protokolünde kullanılır. (Donanım hadshake ile ilgilenmez sadece on/off edilebilir sinyal pinlerini tedarik eder)

Verilerinizin karşı tarafa doğru gidip gitmediği yazacağınız protokol sonucu anlaşılır.

USB de D+ ve D- olmak üzere 2 veri hattı bulunur. Bunlar biribirinin inverti olan sinyali taşır. Veri ya bir uçtan diğer tarafa yada tersi yönde akar. İki USB cihaz birbirine 1'e 1 yani cross'suz olarak bağlanır.

Asenkron seri iletişimde veri gönderilmeyecekse hat tembel moddadır yani hat, stop bit seviyesinde sabit kalır.

USB de ise hattan paketler gidip gelmektedir.  Paketler sadece veriyi değil, handshake ve CRC bilgilerini de içeririr. Ayrıca paketin alıcı adresi ve  PID değeride paketin içindedir. USB çipi aldığı paketi parçalar veriyi, handshake bilgisini, adresini, paket verisinin ne amaçla kullanılacağını alır ve ilgili USB reglerine yazar, yada veri gönderecekse, veriyi, PID değerini, hedef adresini, hesapladığı CRC değerini bir araya getirip paket oluşturur ve hatta basar.

Her usb cihazının bir adresi vardır. Bu adres, patron kart buluşması ardından patron tarafından karta bildirilir. Kartın adresi sabit değildir.

USB kabloyu söküp yeniden taktığınızda kartınız bir önceki adresden tamamen farklı bir adres alabilir. Patron tarafından gönderilen adres karta yüklendikten sonra patron artık verileri bu adrese yollar. (Adres yükleme aşamasından önce ilk başta adres sıfırdır)

Eğer patronun gönderdiği adresi kartınıza (usb çipinize) yüklemezseniz  daha sonraları  gelecek veriler çip registerlerinin tamamına yüklenmez.
(Event bitlerinin bazıları hariç)

Gerçekten de yazdığımız programda patronun gönderdiği adresi çipe yazmazsak patron kartımızı resetlemekte ardından bir daha adres yollamakta (gene yüklemedik) ve nihayetinde iletişim çakılmaktadır.

USB iletişiminde paket içeriklerine ait CRC hesaplamaları doğrudan çip tarafından yapılır. Dolayısı ile yazılımlarla işlemcileri yormak gerekmez.


ACK, NACK NYET ve STALL iletimi yazılımımız tarafından yapılmaktadır.
(Ancak bu konuda konuşamak için hala erken, zira donanımın bize sormadan paket gönderdigi durumlar olabilirmi ilerleyen donemlerde anlayacağız)

USB çipi içinde sürekli olarak event'lar oluşmaktadır.

Her eventdan istersek USB çipimize int ürettirebiliriz. Bu bir iki registerda tanımlamaya bakar ve PIC'lerdeki INT maskelemenin çok benzeridir.

Event lar için bir kaç örnek vermek gerekirse;

Frame tespit edildi
RX event oluştu
TX event oluştu

N numaralı FIFOya veri girdi
N numaralı FIFO daki veriler gönderildi bitti

FIFO'yu belirlediğin limitin üzerinde doldurdun
FIFO'ya belirlediğin limitin üzerinde veri geldi

WakeUp durumu oluştu
End of Packet tespit edildi
Reset yapmamız isteniyor.

NAK handshake durumu  tespit edildi gibi ...............
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 18:58:14
Evet daha once bahsettigim ufak bir bug da halloldu.  Boylece daha once verdigim dialogda Patron tarafindan gonderildigi gorulmeyen 1 numarali configurasyonu aktif et seklinde Set Configuration komutunu da almis olduk.

Jungo'yu yuledim.

Jungo'nun WinDriveMonitoru oldukca guzel. Kartimizin usb kablosunu windows makinaya takip programlarini calistirdigimizda, USB nin kart tarafinda değilde isletim sistemi tarafinda gelisen olaylarini izleme sansi veriyor. (Kart tarafinda yani cip icindeki olaylari zaten yazdigimiz programa koydugumuz printf tipi komutlarla fazlasiyla debug edebiliyoruz )

Asagida PC tarafindaki olaylari gorebilirsiniz.

Alıntı Yap
halt_transfers_and_wait: unique_id 0xa
halt_pipe_transfer: entered, endpoint 0x0
halt_pipe_transfer: entered, endpoint 0x81
halt_pipe_transfer: entered, endpoint 0x1
event_add: called with USB event, action 0x2, dwUniqueID 0xa
usb_unconfigure_device: entered, pdo = fa0f2630, cfg desc = 0xfdf6fb40
add_device: entered pdo 0xFA0F2630
add_device: called for physical device
get_card_type: bus type is USB
usb_configure_device: entered, pdo=fa0f2630
Usb_set_interface unique_id 11, interface_num 0, alternate_setting 0
OS_set_interface: entered, pdo=fa0f2630
max_urb_transfer_size: returning 0x40000
max_urb_transfer_size: returning 0x40000
max_urb_transfer_size: returning 0x40000
max_urb_transfer_size: returning 0x40000
Usb_set_interface: exit (status - 0x0)
Usb_device_attach: unique_id 11 interface 0 configuration 0
event_add: called with USB event, action 0x1, dwUniqueID 0xb
set_high_speed_flag: high_speed = FALSE, ntstatus 0x0

Su anda kartimiz windows tarafindan AN2131 EZUSB Mikrocontroller olarak taniniyor.

Cipimiz USBN9604 idi, Cyrpres EZUSB de nerden  cikti  diyorsunuz değilmi?

Cipimize yazdigimiz kodlarda  Vendor ID olarak Cypress EZ-USB verdik.

Dolayisi ile Windows tarafinda USB cipimizi istedigimiz herhangi bir cipmis gibi kandirabiliriz.

Su anda Jungo da driver yazmaya baslamadik. Ama bizim adimiza isletim sistemine bunu tanitti.

(Nasil becerdi anlamadim, daha driver yazacaktik)
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 19:21:46
Vendor ID 2 byte dan olusan bir veri olup bu veri kartimizda cipimizle ilgili yazilimda tutulmaktadir.

Simdi bu verileri gelisi guzel degistirdigimde programi her calistirisimda Jungo, kartimiza kah Fuji-Xerox usb kartı var kah Net Chip Technology kartı var der.

Merak edip ilk bir kac numarayi kimler almis diye baktim.

Vendor ID 0000 icin firma ismi vermiyor ve sadece Vendor ID:0000
Vendor ID 0001 icin Fry's Electronics
Vendor ID 0002 icin Ingram  
Vendor ID 0003 icin Club Mac  
Vendor ID 0004 icin Nebraska Furniture Mart
Başlık: Kim korkar USB den
Gönderen: z - 23 Temmuz 2006, 21:56:50
Evet artik PC den (windows uzerindeki uygulama yazilimi ile) kartaki islemciden veri isteyebiliyoruz. Geriye,  karta pc tarafindan istedigimiz veriyi gondermek kaliyor.

Boylece USB yi basit anlamda kullanmayi bitirmis olacagiz.

Ancak daha  int tipi haberlesme ve izonkron haberlesme var. Bunlari cok sonraya birakacagim. Nede olsa bunlar benim gibi daha  isin ABC sinde olanlar icin daha agir konular.

Jungo bizi  isletim sistemi tarafindaki detaylarla ugrastirmadan programlarimizi yazmamizi sagliyor. Su anda driver yazdimmi yazmadimmi farkinda değilim ama delphiyle yazilmis sample program ile kartimla haberlesebiliyorum.

Evet kim korkar USB'den.  Su ana kadarki konularda sorularinizi cevaplayacagimi saniyorum. (Sorular zor olmasin)
Başlık: Kim korkar USB den
Gönderen: z - 24 Temmuz 2006, 13:43:45
Bir zamanlar Çöztürk aynen şöyle demişti. USB interface'i bir kullanmaya başladınızmı bırakamayacaksınız.

Gerçekten çok haklıymış. Asenkron seri iletişim rutinlerindeki prokolleri yazmak için harcadığım emek boşaymış.

Kaç byte okumak istediğini, hangi adresden okunmasını istediğini işletim sistemine söylüyorsun, işletim sistemi hoop karşı tarafa isteğini iletiyor ve istediğin veriler hatasız olarak geliyor. Tabiki terside....
Başlık: Kim korkar USB den
Gönderen: z - 25 Temmuz 2006, 02:05:10
USBN9604 cipi ve islemci kullanarak akilli bir kart yapip herhangi bir USB cihazla (usb keyboard, mouse vs) konusabilirmiyiz?

Patron USB cihazla haberlesebilmek icin ilk once USB cihazin kunyesini ogrenmek ister. Bunun icin cihaza kontrol transferi metodu ile sorguda bulunur. (Setup paket yollar).

USB Engine (alt seviyelerdeki seri haberlesme unitesi) kendisine paket geldigini anlar anlamaz paketi acar ve PID degeri olarak SETUP degerini gorur. Hemen RXSN (en basta N=0) registerindeki SETUP flagini set ederek islemcimizin durumdan haberdar olmasini saglar.

Islemci Setup flagini set gorunce  paketle beraber gelmis verilerin descriptore ait structure icerigi oldugunu anlar ve verilere bakarak patronun ne istedigini ogrenir. (Bu dialogu daha once yazmistik....)

------------------

Ancak cihazlar icin uretilen USB ciplerini (mesela USBN9604) Patron olarak kullanmak istersek, PID degeri olarak SETUP degeri atayamaz. Dolayisi ile karsidaki cihaza kontrol transferi yapmak istedigimizi soyleyemeyiz.

En azindan bu ozelligin olmayisindan dolayi cihaz yapmaya yarayan  usb cipleri birbiriyle konusturamayiz.

Peki hic mi konusturamayiz? Bu konudan emin olmamakla birlikte kotumser değilim. USB interface uzerinden kendimize ait bir protokolla veri gonderme sansimiz olabilir. Tabiki iletisim yapsak da adina  USB denemez.

Eger bu mumkun olursa (*) ornegin usb keyboard ile konusmak istersek keyboard icindeki cipin yazilimini da degistirmemiz gerekecektir.

(*) Bu son soyledigim haberlesme konusundan cok emin değilim ancak 0 nolu endpointe data geldiginde gelen datanin setup bilgisi icerip icermemesi ile ilgilenmedende bize ozel bir haberlesme yapilabilir. (???)

Şayet bu mümkün olursa FT245 türü bir çipe göre çok önemli bir avantaj da elde edilebilir. Benzer durumu FT245 de yapamayız, çünkü bu çipin event yönetimi donanımsal olarak çipe kazındığından değiştirme şansımız olamaz.
Başlık: Kim korkar USB den
Gönderen: z - 25 Temmuz 2006, 11:34:40
Hangi USB çipini kullanmalıyım?

Elbette kolay  temin edilebilir bir çiple çalışmak avantajlıdır. Ancak;

Özel amaçlı üretilmiş USB çip (FT245, FT232 vs) olmadığı sürece bilgisayar tarafında driver yazmak gerekmektedir. Bu driverin yazımı başlıca problemlerdendir.

Şimdilik biz bu kısımla değilde USB çipin kendisi ile ilgili seçim problemlerine bakalım.

Örnek olarak USBN9604, işlemcisi olmayan dışarıdan işlemci desteği isteyen bir çiptir. Eğer mevcut işlemcili tasarımınıza USB yeteneği kazandırmak istiyorsanız bu çipten yararlanabilirsiniz.

Ancak bu çip sürekli ilgi alaka bekleyen bir çiptir. Event durumlarında işlemciniz işini bırakıp kısa bir süre de olsa eventı tespit edip gereğini yerine getirmelidir.

Bunun için çipin int bacağını kendi işlemcinizin external int bacağı ile bir birine bağlanıp sadece ihtiyaç duyulduğu durumlarda işlemcinizin USB çipiyle ilgilenmesini sağlanabilirsiniz.

Yok benim işlemcim bu işlere hiç girişmesin ben sadece veri alıp veri göndereyim derseniz o zaman içinde işlemci bulunan USB çiplerinden kullanabilirsiniz.

Bu durumda USB çipi içindeki işlemci USB protokolleri ile uğraşıp sadece İnterrupt, Bulk, yada Izonkron tipi yüklü veri transferlerinde ana işlemcinizle verileri al yada yeni verileri gönder tipinde muhabbete girmesi sağlanabilir.

Eğer yaptığınız işlemci kartı çok yoğun işlemler yapmıyorsa işlemcinizi kaldırıp doğrudan USB çipi içindeki işlemciyi asıl projenin işlemcisi olarakda kullanabilirsiniz. Bu malzemeden ve yerden kazanmanızı sağlar.

Eğer yoğun işler yapmanız gerekiyorsa aynı zamanda USB haberleşmesi de yapmak istiyorsanız  USB interface ünitesi de olan ARM tipi işlemcileri seçebilirsiniz.

Yok ben eventlera çok çok hızlı cevap vereceğim derseniz ASIC' lere yönelebilirsiniz. Bu durumda bütün işlemler zaman kaybetmeksizin donanımsal olarak işler anında yürür. Bu durumda FT245 ve FT232 çiplerine ASIC gözüyle bakabiliriz.

Yok ben işlemcimi değiştirmek istemiyorum, bir sürü kodlarım var bunları birbaşka işlemciye taşımak işime gelmiyor derseniz USBN9604, yada  akıllı çevre birimi gibi kullanmak üzere içinde işlemcisi olan USB çiplerinden gözünüze kestirdiğiniz herhangi birisini seçebilirsiniz.

USB ile çalışmada işin en zor taraflarından birisi PC tarafında driver yazımıdır. Dolayısı ile çip seçimine fazla kafa yormaya gerek yoktur. Neyseki Jungo gibi yazılımlar vereceğiniz bir kaç veri ile sizin adınıza driver oluşturmakta üstelik bir de  bu driveri kullanan örnek programı istediğiniz dilde yazıp vermektedir. Size sadece bu program üzerinde oynama işi kalmaktadır.
Başlık: Kim korkar USB den
Gönderen: z - 29 Temmuz 2006, 16:05:29
J.Axelson'un Her yonuyle USB kitabini aldigimi fakat hic sevmedigimi bir kac kez tekrarlamistim. Su anda ise basvuru kitabi olacak kadar cok seviyorum.

Kitap gercekten kotu yazilmis, USB konusunu hic bilmeyene guzel anlatim sunamamis.

Fakat yazar da zaten hemen hemen soyle demis.

USB yi bilmeyen bir kisi icin konu son derece karmasiktir ve kitabi izleyerek konuyu anlamasi cok zordur. Fakat okuyucu, konulari goz gezdirdikten, neyin nerede oldugunu bildikten sonra tekrar o kisimlara muracat etme yoluna gitmeli demis.

USB kafanizda sekillenmeye basladiginda bir sure sonra taslar yerli yerine oturuyor ve kitap gercekten guzelmis diyorsunuz. Bu birden, Kitap yazmak sanattir (https://www.picproje.org/index.php/topic,3811&start=0) mesajimi hatirlatti.

Bu kotu kitabi daha iyisi yazilincaya kadar herkese tavsiye ederim.
Başlık: Kim korkar USB den
Gönderen: ground - 29 Temmuz 2006, 16:27:43
http://z08.zupload.com/download.php?file=getfile&filepath=17466

http://rapidshare.de/files/5710655/USB_Complete_Third_Edition.rar.html

http://rapidshare.de/files/4167322/USB.Complete.Everything.You.Need.to.Develop.Custom.USB.Peripherals.3rd.edition.rar.html

http://rapidshare.de/files/7676829/USB_Design_by_Example_-_A_Practical_Guide_to_Building_IO_Devices__MAZ.rar.html


Türkçesinin pdf ide olacaktı.. Bulamadım..


Hocam usb çok önemli, özellikle yaptığınız ürünlerin pc ile haberleşmesi (arabirimi) açısından..

18f4550 ile uğraşmıştım bi ara , haberleştim pc (vbasic) ile  ama buffer olayında takılmıştım.. İleride fırsat olursa tekrar uğraşacağım.. Yazarım sonuçlarını..
Başlık: Kim korkar USB den
Gönderen: z - 29 Temmuz 2006, 17:14:19
Hocam dosyalari indirdim ancak acmaya kalktigimda password istiyor.
Başlık: Kim korkar USB den
Gönderen: ground - 29 Temmuz 2006, 17:53:27
Bunlar aynı hocam üstteki şifresiz.. Linkleri edaboarddan çıkarmıştım.  ( o başlık silinmeden evvel)
Alıntı yapılan: "ground"
http://rapidshare.de/files/5710655/USB_Complete_Third_Edition.rar.html

http://rapidshare.de/files/4167322/USB.Complete.Everything.You.Need.to.Develop.Custom.USB.Peripherals.3rd.edition.rar.html
Başlık: Kim korkar USB den
Gönderen: z - 02 Ağustos 2006, 10:39:06
VID numarası almak için USB Organizasyonu yetkilileri ile yazıştım.

İzlenmesi gereken yol için verdikleri cevap aşağıdadır.

Thank you for your reply. VID numbers are corporate
numbers and are sold to companies, not to individuals. There are three
options for obtaining a Vendor ID number.  

Option 1:  Join the USB-IF
If your company chooses to become a member of the USB-IF, the annual
fee for membership is US$4000. A few of the benefits of membership are:
only members are eligible to participate in free USB-IF sponsored
quarterly Compliance Workshops, participate in USB Device Working
Groups, a waived logo administration fee  when joining the new USB-IF
logo program and have their company and product information included
on the usb.org web site.  


Option 2:  Become a non-member USB-IF Logo Licensee
If your company executes the USB-IF Trademark License Agreement in
conjunction with the assignment of your company's vendor ID number,
the fee is US$2000 (your company must execute and return the USB-IF
Trademark License Agreement along with a vendor ID number application
to the address below). Please keep in mind that becoming a USB-IF Logo
Licensee alone  does not entitle your company to USB-IF membership
benefits.  


Option 3:  Purchase a Vendor ID Number without signing the USB-IF Logo
License Agreement. The fee is US$2000 for the Vendor ID Number alone.
If your company chooses to execute the USB-IF Trademark License
Agreement  at a later time, the USB-IF Logo License Fee of US$2000 will
apply.


Please advise us how you would like to proceed.

Best regards,
USB-IF Administration
Başlık: Kim korkar USB den
Gönderen: hjklchkdtgbnhdklts - 02 Ağustos 2006, 18:55:08
Daha kolay yöntem var.  100-200$  civarı.

Mechanique gibi bazı firmalar vendor ID satın almış. fakat device ID olarak size özel bir ID veriyorlar. hatta bunu başka kimseye vermeyeceklerini garanti etmişler.
(http://img90.imageshack.us/img90/4339/idpt4.jpg)

Fakat FTDI çip kullanırsanız sürücüsünü kendi amacınza före firma isminize göre değiştirebiliyorsunuz. izin vermişler. ama destek vermeyiz diyorlar.
Başlık: Kim korkar USB den
Gönderen: hjklchkdtgbnhdklts - 04 Eylül 2006, 15:08:00
Benzer hizmeti FTDI veriyor. Az evvel aldım.
Alıntı YapWe have allocated 8 PIDs to you from xxxx to xxxx (hex).
The PIDs must be used with VID 0403.
Başlık: slm
Gönderen: HEXF2 - 17 Eylül 2006, 18:46:22
@bunalmis hocam merhaba çalışman çok güzel tebrik ederim.Bende USBN9604 ile uğraşıyorum ve kafama takılan bazı sorular var.

Şu anda daha Chip'i çözmeye çalışıyorum yani daha kod yazmadım.Senin yazdığın kodları inceledim.Bazı eksikleri olması dışında güzel yazılmış.Ben bu yongayı SPI ile haberleştirmek istiyorum.Fakat şöyle birşey var;
Yazma ve okuma işlemlerinde (MW Modda) 8 bitlik veri ile 8clock gönderiliyor.SPI için bu çok güzel zaten bunu yapıyor.Fakat bu gönderim işinde bir bit gönderirken aynı anda bir bit alıp saklamışsın.İşte bu durum SPI2ı bozuyor.Yani buffer'da bir byte veri varsa 8 clock darbeside bu iletilir.Okuma yazmak istiyorsan (Master isen) 8 clock daha gönderip datayı buffer'a alırsın.Sanırım bir bit gönderip bir bit alma işlemini soft yapıcam..Yani bir bit gönderip bir bit almak şart mı??

Birde PC'ye künyeleri gönderirken HID huyumlu künyeleri kullanamaz mısın?Böylece şimdilik de olsa driver sorunu ortadan kalkmış olur..

Son olarak bu yongayı istanbulda nerde buluruz ne kadardır fiyatı falan..
Başlık: Kim korkar USB den
Gönderen: z - 17 Eylül 2006, 19:28:38
Microwire rutinlerini yazarken cipin dokumaninda verilen zamanlama diyagramindan yararlandim. O yuzden fazla kafa yormadim.

Kunye olarak istedigini yazip kullanabilirsin. Yeterki kunyesini vererek taklidini yapacagin donanimla  9604 donanimi  ve yazilimi uyumlu olsun.

Bu cip nasil bulunur bilmiyorum.

Programda ne eksik gordun?
Başlık: slm
Gönderen: HEXF2 - 18 Eylül 2006, 10:15:44
Hocam program biraz fazla dallanıyo her yere ama dediğim gibi gerçekten güzel birde her satıra açıklama yapsaydın daha süper olurdu..

Hem programının son halini koyar mısın acaba.Birde soruma tam cevap alamadım hocam.Yani yazma okuma yaparken her biti yolladıktan sonra bir bit okumak şart mı??

(Hocam yonganın nerde bulunduğunu bilmiyorsan sen nasıl alıp kullandın  :D  )
Başlık: Kim korkar USB den
Gönderen: z - 18 Eylül 2006, 10:46:23
Yaklaşık 8-10 yıl kadar önce bu çipi sample olarak istedim. Çipin ve USB'nin karmaşıklığını görünce malzeme kutusunda unutulmaya terketmiştim.

Aslını sorarsan programı ben kurgulamadım. PIC16F84 için yazılmış asm programı  C'e çevirdim. Sözkonusu asm kodlarının bulunduğu linki yazının ilk başlarında bir yerlerde vermiştim.

Programın fazlaca dallanması aslında ihtiyaçtan kaynaklanıyor.

Program state machine mantığıyla yazıldı. USB speclerine bakarsan neden ihtiyaç olduğunu anlayacaksın.  Olaylar (events) int üretiyor her nekadar biz int kullanmasak da yazılımsal olarak event flaglarını kontrol ediyor ve ilgili evente cevap veriyoruz.

National USBN9604.pdf de (June 2003 Revision 1.3) sayfa 19 da iletişimi nasıl yapacağın anlatılmış.

Adamlar 8 bitlik bir shift registerin iki baş ucunu (D0,Q7) elimize vermişler. Bir de clk ucuna sahibiz.

Bir biti rege veriyor clock ile öteliyoruz. Mecburen bir bit dışa çıkıyor ve onu okuyoruz. Ben gönderirken gelen bitlere bakmıyacam dersen bakma. Ancak okuma isteğinde bulunmak için gene shift registere komut yazman lazım. Yani komutu clk eşliğinde yollarken chip sana aynı clk ile verisini yollayacak dolayısı ile  her clkda bir bit senden gidicek bir bit çipten gelecek. Durum böyle olunca haberleşmeyi ikiye ayıramıyorsun.

Amacın SPI unitesini kullanarak işi donanıma yaptırarak hız kazanmak ise bence Microwire yerine çiple 8 bit  busdan konuş.
Başlık: slm
Gönderen: HEXF2 - 19 Eylül 2006, 09:51:55
Eyvallah hocam ben şimdi chip'i araştırıyorum artık bulamazsam aynı mantıkta 18F4550 ile filan yapmayı deniycem.Ama bu chip çok iyi bence herhangi bir PIC ile bağlantısı mümkün...

Birde hocam programda değşiklik yaptıysa incelemek için satırlara biraz daha açıklama yazarak son halini koyabilir misin acaba  :)
Başlık: Kim korkar USB den
Gönderen: z - 19 Eylül 2006, 10:42:06
Linki verilen zaten programın son hali.
Başlık: SLM
Gönderen: HEXF2 - 21 Eylül 2006, 09:32:07
Ok hocam sağol.Zaten programı istememin sebebi sadece register'lar ile ne yapılıyor ne olunca ne yapılıyor gibi şeylere bakmaktı ben başka bir mantıkta ve haberleşme protokolü paralel yazıyorum daha hızlı olsun diye sıkıştık mı senin rahatsız edicez artık tekrar sağol..
Başlık: Kim korkar USB den
Gönderen: Macera - 29 Eylül 2006, 10:09:34
Diyelimki her PCde kulanabilen cihazınız var(Optik fare yada 32Mb Flash disk)
Bu cihazları laptopumdaki hangi USB girişine takarsam takıyim otomatik tanıyor.
Ama gel gelelim sürücü yüklenmesi gerekli olan cihazlar hangi USB girişinde kurulduysa sonradan o girişe takılması gerekiyor.
Eğer kurulumun yapıldığı girişten başka yere takarsam benden tekrar kurulum istiyor.
Buna K128 programlayıcı yada RS232 çeviricilerde dahil.
Geçici çözümüm cihazı tanıyana kadar tek tek fişleri denemek.
Buna PC tarafından bir çözüm varmıdır.
İlaki her fişde kurulumları tekrarlamamı gerekecek.
Başlık: slm
Gönderen: HEXF2 - 30 Eylül 2006, 11:45:00
Dostum eğer biraz da olsa (benim gibi  :D )USB konusuyla uğraşıyorsan dediğimi anlayacaksın.USB cihazlarında Künye bilgilerinde Seri numarası tanımlandıysa USB'yi hangi porta takarsan tak birkez kurulum yapıldıktan sonra bir daha kurulum sihirbazını çıkarmıyor.(Benim digital kameram öyle)ama künyede seri numarası tanımlanmamış ise port değiştirdiğinde sürücü arar.......diye okudum biryerden :)
Başlık: Kim korkar USB den
Gönderen: ibo1973 - 16 Mayıs 2008, 10:53:16
çok güzel bir yazı olmış baştan sona okudum başta bunalmış hocama ve emeği geçen herkeze çok teşşekür ederim benim gibi ingilizcesi kıt olan biri için faydalı oucak bir yazı .

yanlız anlamadım neden piyasada çeşid çeşid yetenekleri iyi sayılabilen üzerinde usb  ünitesi bulunan baya geniş bir mikrokontrollerler varken neden harici bir usb çipini herhangi bir mikro kontrolere yerleştirmek isteyebiliceğimiz veya buna ne şartlar altında ihtiyaç duyabiliceğimiz hocam kesinlikle eleştirmek için yazmadım tamamen merak ettiğim için yanlış bir şey sorduysam özür dilerim

ben kendi sahşıma bu işin abc kısmını bile daha öğrenemedim öğrenmeye çalışıyorum aslında bi sürüde sorunum var neyse tekraradan yazı için teşşekür ederim.
Başlık: Kim korkar USB den
Gönderen: z - 13 Şubat 2009, 17:24:39
Cevabi cok basit. O tarihlerde Bunalmis'in malzeme kutusundaki tek USB cipi USBN9604 du.
Başlık: Kim korkar USB den
Gönderen: bayramonur - 17 Şubat 2009, 12:32:15
Ustadlar bir sorum olacak 18F4550 gibi microchipin usb mikrodentleyicisinde Paralel port emulasyonu yapmak mümkün müdür?
Mümkünse nasıl yapabiliriz?
Başlık: Ynt: Kim korkar USB den
Gönderen: z - 17 Mart 2013, 16:18:48
Yeni bir çip için USB Enumeration kodlarınızı yazarken sorun yaşadığınızda gelen giden paketleri gözlemek için USBLyzer gibi programlardan yararlanabilirsiniz.

Keil tarafından yazılmış örnek program, STM32F103 üzerinde koşarken PC ile yapılan max 64 bytelık paket trafiği aşağıda.
Bu paketleri yazılıma eklediğim debug kodlarla ürettim.

Kendi kodlarımı geliştirirken bu trafik sayesinde hatamı buldum.

6A60 0800 > 8006000100004000 7A60 Device Descriptor istendi
7A60 1200 < 120100020000004051C2011C000101020301 7A70  Device Descriptor yollandi

Renkli verilerin anlamı

İşlem öncesi EP0 register içeriği
İşlem sonrası EP0 register içeriği
Alınan yada gönderilen paketin boyu  L,H şeklinde ters yazılı
> PC den gelen Paket
< PC ye yolladığımız paket

KEIL CALISAN KODLAR

6A60 0800 > 8006000100004000 7A60 Device Descriptor istendi
7A60 1200 < 120100020000004051C2011C000101020301 7A70  Device Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 0005150000000000 7A60 Set Adress Komutu alindi
7A60 0000 < 7A70
6A60 0800 > 8006000100001200 7A60 Device Descriptor istendi
7A60 1200 < 120100020000004051C2011C000101020301 7A70 Device Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 8006000200000900 7A60 Config Descriptor istendi
7A60 0900 < 09022200010100803209 7A70 Config Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 800600030000FF00 7A60 String Descriptor istendi
7A60 0400 < 04030904 7A70 String Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 800603030904FF00 7A60 Serial Number String istendi
7A60 1A00 < 1A03300030003000310041003000300030003000300030003000 7A70 Serial Number String yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 800600020000FF00 7A60 Config Descriptor istendi
7A60 2200 < 09022200010100803209040000010300000409210001000122210007058103400020 7A70 Config
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 8006000600000A00 7A60 Device Qualifier istendi (Cevap vermiyoruz)
6A60 0800 > 800600030000FF00 7A60 String Descriptor istendi
7A60 0400 < 04030904 7A70 String Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 800602030904FF00 7A60 Product String istendi
7A60 2400 < 24034B00650069006C0020004D0043004200530054004D00330032002000480049004400 7A70 Product
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 800600030000FF00 7A60 String Descriptor istendi
7A60 0400 < 04030904 7A70 String Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 800602030904FF00 7A60 Product String istendi
7A60 2400 < 24034B00650069006C0020004D0043004200530054004D00330032002000480049004400 7A70 Product
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 8006000100001200 7A60 Device Descriptor istendi
7A60 1200 < 120100020000004051C2011C000101020301 7A70 Device Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 8006000200000900 7A60 Config Descriptor istendi
7A60 0900 < 0902220001010080F13209 7A70 Config Descriptor yollandi
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 8006000200002200 7A60 Config Descriptor istendi
7A60 2200 < 09022200010100803209040000010300000409210001000122210007058103400020 7A70 Config
7220 0000 < 7230
2230 0000 > 3230
6A60 0800 > 0009010000000000 7A60 Set Configuration
7A60 0000 < 7A70
0621 0100 < 010013 0631
6A60 0800 > 210A000000000000 7A60 Bu komut nedir? Cevap verilmemis
7A60 0000 < 7A70
6A60 0800 > 8106002200006100 7A60 Report Descriptor istendi
7A60 2100 < 0600FF0901A101150026FF00750895010901810295010901910295010901B102C000 7A70 Report Desc
7220 0000 < 7230
2230 0000 > 3230