Kim korkar USB den

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

z

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

z

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

z

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

z

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

z

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 mesajimi hatirlatti.

Bu kotu kitabi daha iyisi yazilincaya kadar herkese tavsiye ederim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ground

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ı..
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

z

Hocam dosyalari indirdim ancak acmaya kalktigimda password istiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ground

⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

z

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

hjklchkdtgbnhdklts

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.


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.

hjklchkdtgbnhdklts

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.

HEXF2

@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..

z

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

HEXF2

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  )

z

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