Bos USB Descriptorlerinin icini yapilacak tasarima gore doldurmak

Başlatan bunalmis, 26 Ocak 2011, 17:06:16

z

O zaman senden uygun bir bolumde baslik acmani rica edelim. Boyle bir organizasyonda ben varim. Hatta zamanin musait se adamlarla yazismalari sen yurutebilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Dersler, iş ayrıca bazı ufak projelerle uğraşmaktan kendime pek vakit ayıramıyorum hocam,
gerekli desteği verebilirim ama işi yürütme konusunda zaman problemim çok oluyor, bu konuda affınıza sığınıcam =(

t2

2-3 sene önce de aynı konu gündeme geldi. yine söyledim bedava PID veriyorlar neden almıuyorsunuz. adam illaki benim çipimi kullanacaksın da demiyor. VID onun PID senin. Yani bu 8 adet pidi sana tahsis etmiş.  FTDI veriyor. hala veriyorsa bir bakın.

computerboy

http://www.keil.com/forum/search.asp?SA=&KW=&DY=&PL=&Q=hid+usb&KB=ON&PM=ON&FR=ON&PG=9&PX=1

Zamanında burada veya başka formda usb ile ilgili sorular sormuştum ama herhangi bir neticeye ulaşamamıştım keilin kendi formunda sorduğum zaman gayet hızlıca çözüme ulaştım.  kolay gelsin.

z

Report descriptor hakkinda birseyler soyleyecek olan varmi?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Evet T2 ne yapacagiz simdi, bu report descriptorde ne degisiklikler yapilabilir? Bu descriptorde ne ne ise yariyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

HID cihaza ait report descriptor, gelen verilerin baytların hatta bitlerin bir haritasıdır. hangi bitin hangi işe yarayacağını bilgisayar tarafında  ayıklamamızı sağlayan bir tanımlamadır. Mesela joystik yaptık üzerinde 6 buton ve 6 tane pot olsun. butonların on off bilgisini bazı bitlerden alabiliriz. Pot adc değerini ifade eden baytlar da vardır. ve kesin olarak bu bilgileri alabiliriz. Windows apilerinden bu bilgileri alabiliyormuşuz.

Vendordefined report kullanırsanız, cihaza gönderdiğiniz 64 bayt yerine ulaşır. ve cihazdan gelen 64 baytı da okursunuz.  Baytlar buton veya POT verisi gibi ayrılmamış.  Baytların neyi ifade ettiğini ise kendiniz belirleyebilirsiniz. Mesela ilk 3 bayt işlem kodu, sonraki 3 bayt işlemin datası sonraki baytlar da başka bir şeyi olabilir.

Bu projedeki report descriptor, size 1 interface için maksimum  transfer hızı sağlar. ayrıca bir yerlerini değiştirmenize gerek yok.  1ms içinde 64 bayt gönderebilir ve alabilirsiniz.


z

En son sayfaya taşındı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Ben sizin verdiğiniz bilgileri teyid edebilecek durumda değilim. O kadar bilm yok.  Calışan cihaz olarak örnek verdiğim pickit 2 tanımlamasında da hata varmış. görmüşsünüzdür. 2 tane config var gibi görünüyor. 2. si nerede? hem de hid versiyonu yanlış görünüyordu. Fakat bu hatalar ciddi olmasa  gerek. çünkü cihaz çalışıyor.

Ayrıyeten cihazın çalışabilmesi için başka değerleri de report count ile aynı yani 64 ayarlamamız gerekir

#define   __HID_INT_IN_EP_SIZE   64
#define   __HID_INT_OUT_EP_SIZE   64
gibi

Burak B

@bunalmis hocam;
Maksimum 64KB/s transfer hızı projeniz için yeterli olacakmı sizce ?
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

Eskiden FT232 ile çalışırken 115200 baud kullanıyordum.

Bu hız, saniyede yaklaşık 10K byte demek. Ustelik bunlar sadece sade veriler değil, al gülüm ver gülüm, olmadı bir daha gibi  soft protokolüme ait istek ve yanıtları da içerdiğinden saniyede aktarılan saf verilerin sayıyı bunun çok altında kalıyordu.

Haliyle tamamen USB ye geçtiğimde 32Kb/sec bile işimi fazlasıyla görecek.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Alıntı yapılan: t2 - 28 Ocak 2011, 11:24:27
..Calışan cihaz olarak örnek verdiğim pickit 2 tanımlamasında da hata varmış. görmüşsünüzdür. 2 tane config var gibi görünüyor. 2. si nerede? hem de hid versiyonu yanlış görünüyordu. Fakat bu hatalar ciddi olmasa  gerek. çünkü cihaz çalışıyor.

Ayrıyeten cihazın çalışabilmesi için başka değerleri de report count ile aynı yani 64 ayarlamamız gerekir

#define   __HID_INT_IN_EP_SIZE   64
#define   __HID_INT_OUT_EP_SIZE   64
gibi

Verdiğin PIC2 descriptörleri kendime göre uyarlayıp yukarıda açıklamaya çalışıyorum. Çok fazla değişikli yaptığımı hatırlamıyorum. Yanlış hatırlamıyorsam, çipim desteklediği için paket boyunu 8 den 64 de çıkarttım.

Configurasyon sayısını da 1 yapıp bunu bNumConfigurations ve bConfigurationValue yerlerine yazmıştım. Bu durumda descriptorlerde hatamız yok.

Sadece Report descriptor kafama yatmadı bunu modifiye etmeye çalışıyorum fakat çok karmaşık, farklı bir iki dokumanı izleyip anlamaya çalışıyorum.

Bu kısmı anlatacak biri çıksa da beni bu zahmetten kurtarsa diye de bekliyorum.

Şeytan bu desriptörü traşla diyor ama çekiniyorum. Sanki bununla hiç işim olmayacak gibi duruyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Peki  bunu değiştirmek istememenize sebep nedir? Sorun  mu çıkıyor? pic kit 2 yerine diğer örneği kullansak daha iyi olabilir. En azından hid versiyonunu 1.11 olarak düzgün yazmışlar. bu daha güvenilir.
https://www.picproje.org/index.php/topic,31499.msg220050/topicseen.html#msg220050

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

Alıntı yapılan: t2 - 28 Ocak 2011, 13:02:37
Peki  bunu değiştirmek istememenize sebep nedir? Sorun  mu çıkıyor? pic kit 2 yerine diğer örneği kullansak daha iyi olabilir. En azından hid versiyonunu 1.11 olarak düzgün yazmışlar. bu daha güvenilir.
https://www.picproje.org/index.php/topic,31499.msg220050/topicseen.html#msg220050

Degistirmek istememin sebebi yapmak istedigim cihaz belli. Buna ait desriptorlerin icinde PIC2 ve microchipe ait hic bir kirinti kalmasin.
Her ne kadar hala VID ve PID kalsa da bunlari en kisa zamanda degistirecegim.

Ikinci verdigin ornege derinlemesine bakmadim hemen bakayim.

/* Device Descriptor */
ROM USB_DEVICE_DESCRIPTOR device_dsc=
{
    0x12,    // Size of this descriptor in bytes
    USB_DESCRIPTOR_DEVICE,                // DEVICE descriptor type
    0x0200,                 // USB Spec Release Number in BCD format
    0x00,                   // Class Code
    0x00,                   // Subclass code
    0x00,                   // Protocol code
    USB_EP0_BUFF_SIZE,          // Max packet size for EP0, see usb_config.h
    0x04D8,                 // Vendor ID
    0x003F,                 // Product ID: Custom HID demo
    0x0002,                 // Device release number in BCD format
    0x01,                   // Manufacturer string index
    0x02,                   // Product string index
    0x00,                   // Device serial number string index
    0x01                    // Number of possible configurations
};

/* Configuration 1 Descriptor */
ROM BYTE configDescriptor1[]={
    /* Configuration Descriptor */
    0x09,//sizeof(USB_CFG_DSC),    // Size of this descriptor in bytes
    USB_DESCRIPTOR_CONFIGURATION,                // CONFIGURATION descriptor type
    0x29,0x00,            // Total length of data for this cfg
    1,                      // Number of interfaces in this cfg
    1,                      // Index value of this configuration
    0,                      // Configuration string index
    _DEFAULT | _SELF,               // Attributes, see usb_device.h
    50,                     // Max power consumption (2X mA)
                     
    /* Interface Descriptor */
    0x09,//sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
    USB_DESCRIPTOR_INTERFACE,               // INTERFACE descriptor type
    0,                      // Interface Number
    0,                      // Alternate Setting Number
    2,                      // Number of endpoints in this intf
    HID_INTF,               // Class code
    0,     // Subclass code
    0,     // Protocol code
    0,                      // Interface string index

    /* HID Class-Specific Descriptor */
    0x09,//sizeof(USB_HID_DSC)+3,    // Size of this descriptor in bytes
    DSC_HID,                // HID descriptor type
    0x11,0x01,                 // HID Spec Release Number in BCD format (1.11)
    0x00,                   // Country Code (0x00 for Not supported)
    HID_NUM_OF_DSC,         // Number of class descriptors, see usbcfg.h
    DSC_RPT,                // Report descriptor type
    HID_RPT01_SIZE,0x00,//sizeof(hid_rpt01),      // Size of the report descriptor
   
    /* Endpoint Descriptor */
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    HID_EP | _EP_IN,                   //EndpointAddress
    _INTERRUPT,                       //Attributes
    0x40,0x00,                  //size
    0x01,                        //Interval

    /* Endpoint Descriptor */
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    HID_EP | _EP_OUT,                   //EndpointAddress
    _INTERRUPT,                       //Attributes
    0x40,0x00,                  //size
    0x01                        //Interval
};

//Language code string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[1];}sd000={
sizeof(sd000),USB_DESCRIPTOR_STRING,{0x0409
}};



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

//Class specific descriptor - HID
ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={
{
    0x06, 0x00, 0xFF,       // Usage Page = 0xFF00 (Vendor Defined Page 1)
    0x09, 0x01,             // Usage (Vendor Usage 1)
    0xA1, 0x01,             // Collection (Application)
    0x19, 0x01,             //      Usage Minimum
    0x29, 0x40,             //      Usage Maximum    //64 input usages total (0x01 to 0x40)
    0x15, 0x01,             //      Logical Minimum (data bytes in the report may have minimum value = 0x00)
    0x25, 0x40,              //      Logical Maximum (data bytes in the report may have maximum value = 0x00FF = unsigned 255)
    0x75, 0x08,             //      Report Size: 8-bit field size
    0x95, 0x40,             //      Report Count: Make sixty-four 8-bit fields (the next time the parser hits an "Input", "Output", or "Feature" item)
    0x81, 0x00,             //      Input (Data, Array, Abs): Instantiates input packet fields based on the above report size, count, logical min/max, and usage.
    0x19, 0x01,             //      Usage Minimum
    0x29, 0x40,             //      Usage Maximum    //64 output usages total (0x01 to 0x40)
    0x91, 0x00,             //      Output (Data, Array, Abs): Instantiates output packet fields.  Uses same report size and count as "Input" fields, since nothing new/different was specified to the parser since the "Input" item.
    0xC0}                   // End Collection
};                 


Bana e^st de diyebilirsiniz.   www.cncdesigner.com