Kim korkar USB den

Başlatan bunalmis, 14 Temmuz 2006, 21:58:58

CoşkuN

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?

z

Hocam 2.0 da ne gibi farklılıklar var hiç bakmadım. Önce çok geç kaldığımız  1.1' i halledelim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

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

z

http://member.newsguy.com/~rhuang/USBbase3.asm

Yukaridaki asm kodlarini derleyip LST dosyasini bana gonderebilirmisiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CoşkuN

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

z

Coskun cok teşekkürler, elimdeki derleyiciler cok eski ve cogu syntaxi tanimiyordu. Yeni bir derleyici indirip kurmaktansa yardiminizi istedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

e3

Hocam siz istedinizde biz size Jungo bulmadık mı? :D

Jungo Download Page

Jungo WinDriver v.8.01 Crc

Rar Şifresi :. protection
.eem.

z

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.)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Ş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 ...............
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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
Bana e^st de diyebilirsiniz.   www.cncdesigner.com