1K5 ile full speed tanimi yapilmamissa fakat descriptorde USB 2.0 tanimliysa

Başlatan bunalmis, 29 Ocak 2011, 02:28:43

z

STM32F103 ile kontrol transferini 64 byte üzerinden gerçekleştiren varmı?

Rx ve TX buf uzunluklarını 64 Byte yaptığımda sorun çıkıyor. Her ne kadar asıl data alışverişi 64 bytelık Endpoint 1 üzerinden gerçekleşecek olsa da end point 0 da neden sorun yaşadığımı merak ediyorum.

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

ErsinErce

hocam stm32f103 de 512 byte lık transfer buffer limiti var.
eğer descriptor ep ların aktarımında bu limiti aşıyorsa bu yüzden sıkıntı çıkabilir.

mümkünse descriptor ünüzü görme şansımız var mı?

elimde bulunan 64 byte transfer yapan eski örnek programlar;
http://www.4shared.com/rar/Xo1U1HnQ/stm32f103USB.html?

z

Descriptorleri ilk fırsatta vereyim. Yalnız yanlış anlaşılmayayım. 64 byte transferi EP0 üzerinden yapmak istiyorum. Özellikle de PC'den 64 Byte alma.

Şu sıralar yazılımımda hatalar yakaladım sorunum bitmese de bir kaç adım daha atabildim.


mesaj birleştirme:: 16 Mart 2013, 19:35:17

Alıntı yapılan: t2 - 11 Mart 2013, 08:39:41
bMaxPacketSize0'ı   8 yerine niçin 64  yapmak istiyorsun?  önceki mesajlarda söylediğime inanmadın mı?

1msde 64 bayt göndermek için mi?  öyleyse bunla işin yok. başka  yeri ayarlaman gerek. bence senin descriptorda komple hata olabilir. windows çelişkiye düşüp yanlışyorumlamış olabilir

pic örneklerinde şöyle oluyordu belki de tüm HIDler için geçerlidir
endpoint0  sadece control transfer yapar aygıtın kendini tanıtması için filan kullanılıyor.

bMaxPacketSize0 = 8 yaparsak, aygıt kendini kolayca tanıtıyor sorun çıkmıyor. bunun dışında 1ms içinde 64 bayt gönderebilme kabiliyeti değişmiyor o ayrı birşeydir.
endpoint1  interval 1ms   reportcount 64 olacak krallar gibi çalışacak..

descriptoru  gereksiz uzatmayacaz. içindeki baytları sayacaz  program içinde bunun uzunluğunu yazdığımız başka bir yer vardır oraya aynen  descriptorlength neyse onu yazıcaz ya da derleyici bunu kendisi hesaplayacak o yazacak.

Belki de gerçekten direnç ile ilgilidir aynı zamanda hem D+ hem de D- ucuna direnç bağlanmış olabilir mi? (varsa)dahili ya da harici direnç ?
(Resim gizlendi görmek için tıklayın.)
http://s24.postimg.cc/kmbfn316t/pull_up.jpg


Sorunsuz full speed HID aygıt detayları, descriptor burada:
http://speedy.sh/BxQPx/original-pickit3descriptor.zip


Demek ki NEYMİŞ? bMaxPacketSize0 = 8 OLACAKMIŞ.


Usblyser ile sorunlu aygıtınızın descriptorunu yukarıdaki gibi rapor alıp gönderebilirseniz belki sorunu anlayabiliriz

EP0 ın 8 byte olması gerekliliği haricinde haklısın. Zira EP0 üzerinden de 1ms lik çerçeve içinde control transferi yaparak 64 byte yollayabiliyordum.
Stellaris de aynen dediğim gibi çalıştırdım. Hatta şu anki sorunlu yazılımımda da enumeration işlemlerinde EP0 dan 64 yapıyorum byte alıp verebiliyorum. (Ama enumeration başarılı olarak bitmiyor) Sorunum yazılımdaki hatadan olsa gerek problemin yakalanmasına az kaldı.

PC nin enumeration aşamasında EP0 dan 8 byte yolladığına bakma sen. İpler sana geçince hem EP0 dan Hem de EP1 den 64 byte alıp verebiliyorsun.
Böyle bir imkanım varken neden EP0 da 8 byte ile yetineyim ki?

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

t2

8, olması elbette şart değil 16, 32 veya 64 olabilirmiş. ben de buna güvenerek 64 olarak ayarladım normal çalışıyordu. fakat başka pcye taktım aygıt tanınmadı . soru işareti çıkıyor. sadece 64ü 8 yapmak ile düzeldi.

ep0 üzerinden 8 er baytlık paketler halinde descriptorun gönderildiğini zannediyorum. descriptor uzunluğu 64 ise 8 interval gerekli oluyor diye zannetmekteyim. ep0 hid aygıtın kendi işleri için kullanılır bununla ayrıca data gönderip almaya çalışmak yanlış olur kanaatindeyim. fakat hepsi zandan ibarettir. USB complete kitabından da okumadım.

z

PC enumeration aşamasında EP0 tarafından istekleri 8 bytelık standart paketler olarak istiyor. Cevap yazarken göndereceğimiz descriptorlerun cogunlugu 8 bytedan fazla. Bu nedenle 8 li paketler halinde göndermek gerekiyor.

Fakat 64 byte lık buffer tanımlanırsa tek çırpıda ne gidecekse gidiyor. Bu kısma ait kodlar 64 byte buffer kullanıldığında daha basit oluyor.

İnterrupt transferinde enumertion işlemi bittikten sonra PC tarafındaki yazılımla ister EP0 dan ister EP1 den 64 byte data iste yada yaz.

Bu 1 ms lik peryod içinde 64 byte anlamına geleceği için avantajlı. En az bir yıldır bu şekilde kullanıyorum ve hiç bir sorunu yok. Fakat STM32 ye geçince kodları ayağa kaldırmak biraz sancılı olacak.

Şu aşamada PC isteği üzerine en son HID descriptoru yolluyorum ve bu aşama geçilmiyor. Halbuki aynı desriptoru sorunsuz olarak stellaris de kullanıyordum.

Neyse sebebini bulunca sizi de merakta bırakmam.

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

t2


z

Bir örnek var. Tüm parametreleri ayarlanabiliyor, sınıfı vs değiştirilebiliyor. Haliyle de çok karışık. Gene de onu referans alıyorum.

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

z

STALL olarak cevap vermem gereken bir sorguya hiç cevap vermediğim için USB cihazım sorunlu
ve Low Speed olarak algılanıyormuş.

Düzeltince artık 64 Byte Bufferlarım tanınır oldu.

Alıntı yapılan: ErsinErce - 16 Mart 2013, 18:45:06
...mümkünse descriptor ünüzü görme şansımız var mı?...

Descriptorlerim aşağıdaki gibi ve sorunu yok.

USB_MAX_PACKET0     EQU       0x40      ; 64 BYTE	

;***************************************************************************
; 	Device Descriptor 
;***************************************************************************

DeviceDesc

	DCB       0x12                ; Size of this descriptor in bytes
	DCB       0x01                ; DEVICE descriptor type
	DCB       0x00,0x02           ; USB Spec Release Number in BCD format
	DCB       0x00                ; Class Code
	DCB       0x00                ; Subclass code
	DCB       0x00                ; Protocol code
	DCB       USB_MAX_PACKET0     ; Max packet size for EP0, see usb_config.h
	DCB       0x83,0x04           ; Vendor ID
	DCB       0x20,0x57           ; Product ID: Custom HID demo
;	DCB       0xD8,0x04           ; Vendor ID
;	DCB       0x3F,0x00           ; Product ID: Custom HID demo
	DCB       0x00,0x02           ; Device release number in BCD format
	DCB       0x01                ; Manufacturer string index
	DCB       0x02                ; Product string index
	DCB       0x03                ; Device serial number string index
	DCB       0x01                ; Number of possible configurations

;***************************************************************************
;	Configuration Descriptor 
;***************************************************************************

ConfigDesc

	DCB       0x09 	   ; sizeof(USB_CFG_DSC),    // Size of this descriptor in bytes
	DCB       0x02         ; CONFIGURATION descriptor type
	DCB       0x29,0x00    ; Total length of data for this cfg (Config+Int+HidClass+EP0+EP1)
	DCB       1            ; Number of interfaces in this cfg
	DCB       1            ; Index value of this configuration
	DCB       0            ; Configuration string index
	DCB       0xE0     	   ; Attributes, 0x80 | 0x40 | 0x20
	DCB       0xFA         ; Max power consumption (2X mA) 500mA
							
;***************************************************************************
;	Interface Descriptor 
;***************************************************************************

IntDesc	DCB       0x09	   ; sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
	DCB       0x04         ; INTERFACE descriptor type
	DCB       0            ; Interface Number			
	DCB       0            ; Alternate Setting Number
	DCB       0x02         ; Number of endpoints in this intf
	DCB       0x03         ; Class code HID
	DCB       0     	   ; Subclass code
	DCB       0     	   ; Protocol code
	DCB       0            ; Interface string index

;***************************************************************************
;    	HID Class-Specific Descriptor
;***************************************************************************

	DCB       0x09	   ; sizeof(USB_HID_DSC)+3,    // Size of this descriptor in bytes
	DCB       0x21         ; HID descriptor type
	DCB       0x00,0x02    ; HID Spec Release Number in BCD format (2.00)
	DCB       0x00         ; Country Code (0x00 for Not supported)
	DCB       0x01         ; Number of class descriptors
	DCB       0x22         ; Report descriptor type
	DCB       HIDSIZE,0x00 ; sizeof(hid_rpt01),          
;***************************************************************************
;    	Endpoint Descriptor (Input icin)
;***************************************************************************

	DCB       0x07 	   ; sizeof(USB_EP_DSC)
	DCB       0x05         ; Endpoint Descriptor
	DCB       0x81         ; EndpointAddress (Adr=1 input)
	DCB       0x03         ; Attributes (Interrupt transfer)
	DCB       0x40,0x00    ; size
	DCB       0x01         ; Interval

;***************************************************************************
;    	Endpoint Descriptor 
;***************************************************************************

	DCB       0x07	   ; sizeof(USB_EP_DSC)
	DCB       0x05         ; Endpoint Descriptor
	DCB       0x01         ; EndpointAddress (Adr=1 output)
	DCB       0x03         ; Attributes (Interrupt transfer)
	DCB       0x40,0x00    ; size
	DCB       0x01         ; Interval


;***************************************************************************
;	Language code string descriptor
;***************************************************************************

StringDesZero
	
	DCB       ManufacStr - StringDesZero    ; Length
	DCB       0x03	                    ; Type=String
	DCB       0x09,0x04                     ; Code English

;***************************************************************************
;	ManufacStr
;***************************************************************************

ManufacStr
		
          DCB       ProductStr - ManufacStr       ; Length
          DCB       0x03                          ; Type=String
          DCB       'C',0
          DCB       'n',0
          DCB       'c',0
          DCB       ' ',0
          DCB       'D',0
          DCB       'e',0
          DCB       's',0
          DCB       'i',0
          DCB       'g',0
          DCB       'n',0
          DCB       'e',0
          DCB       'r',0

;***************************************************************************
;	ProductStr
;***************************************************************************

ProductStr
		
          DCB       SerialNumStr - ProductStr     ; Length
          DCB       0x03                          ; Type=String
          DCB       'S',0
          DCB       'm',0
          DCB       'd',0
          DCB       ' ',0
          DCB       'P',0
          DCB       'i',0
          DCB       'c',0
          DCB       'k',0
          DCB       '&',0
          DCB       'P',0
          DCB       'l',0
          DCB       'a',0
          DCB       'c',0
          DCB       'e',0

;***************************************************************************
;	SerialNumStr
;***************************************************************************

SerialNumStr

	DCB       ReportDesc - SerialNumStr     ; Length
               DCB       0x03   	                            ; Type=String
	DCB       'S',0
               DCB       'N',0
               DCB       ':',0
               DCB       '0',0
               DCB       '2',0
               DCB       '0',0
               DCB       '1',0
               DCB       '3',0


;***************************************************************************
;	Class specific descriptor - HID boyu 25 byte
;	ReportDesc
;***************************************************************************

HIDSIZE   EQU       25   
ReportDesc
          DCB       0x06, 0xA0, 0xFF ; USAGE_PAGE (Vendor Defined page 0xA1)
          DCB       0x09, 0x01          ; USAGE (Vendor Usage 0x01)
          DCB       0xA1, 0x01          ; COLLECTION (Application)
                                                  ; Global items
          DCB       0x15, 0x00          ;   LOGICAL_MINIMUM(-128)
          DCB       0x26, 0xFF,0x00  ;   LOGICAL_MAXIMUM(+127)
          DCB       0x75, 0x08          ;   REPORT_SIZE (8 Bits)
          DCB       0x95, 0x40          ;   REPORT_COUNT (8  8 Bits, 8 Bytes)
                                                  ; INPUT
          DCB       0x09, 0x01          ;   USAGE (Vendor Usage 0x03)
          DCB       0x81, 0x02          ;   INPUT (Data,Variable,Abs)
                                                  ; OUTPUT
          DCB       0x09, 0x01          ;   USAGE (Vendor Usage 0x04)
          DCB       0x91, 0x02          ;   OUTPUT(Data, Variable,Abs
          DCB       0xC0                   ; END_COLLECTION
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Hocam şimdi sıradaki sorunu bildiriyorum.  Bunu halledersen çok önemli bir şey yapmış olursun

Belki yıllardır bizi oyaladılar HID aygıt tek interface  olursa 1ms'de en fazla 64 bayt gönderebilir dendi
Halbuki bu aygıtların EP0 ı zaten var ve kontrol transfer  yapabiliyor EP1 ise 1ms'de en fazla 64 bayt gönderme işiyle iştigal ediyordu.

Tanıtma işi biten EP0 data göndermeye devam edebilir(mi) ayrıca EP1 de göndermeye devam edecek. Bu durumda Composite Device (birden fazla interface) olmadan 1ms içinde 128 bayt iletebilecek miyiz? 128 olmasın 100 olsun, o da yeterli. Yani 64 bayt sınırını  aşabilecek miyiz? tabi ki multi interface HID aygıtı yaparsanız aliyyülaaladır. bu dolambaçlı işe gerek yoktur.

z

Bu soru benim de kafamda, cevabını tahmin ediyorum ama debug kodlar yazıp sonucu doğrulamadım.

Tanıtma işlemi ardından EP0 dan 64 Byte alıp verebiliyoruz. EP1 den de.

Fakat 1ms lik zaman diliminde  her iki paketi de gönderebileceğimizi sanmıyorum.

Çünkü örneğin STM32F103 de paket gelmişmi yada gitmişmi diye sorgu yapabildiğimiz bir register var.

Eğer paket geldi yada gittiyse bu registerden hangi EP registere data gelmiş yada gitmiş öğreniyoruz.

Bu register bize 0, 1, 2, 3 ... gibi EP registerin numarasını söylüyor.

Bu da demektir ki aynı anda iki EP ye ait paket gidip gelemez.

İlk fırsatta deneme kodu yazıp ulaştığım sonucu buraya yazarım.

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

Tanışma faslında EP0 alma rutinlerinin normalde 8 byte uzunlukta olması yeterli. Çünkü gelen paketler hep 8 byte uzunlukta. Fakat giden paketlerin boyu değişken.

8 byte buffer seçildiğinde gönderilen paketi parça parça yollamak gerekiyor. Ayrıca tanışma faslından sonra 8 byte alma ile sınırlı kalınıyor.

Bufferları 64 byte yapınca hem yazılım sadeleşiyor hem de hız artıyor.

PC tarafındaki yazılımla EP1 üzerinden interrupt transfer metodu ile kartımla 64 byte lık data değiş tokuşu yapıyorum.
EP0 ile de kartla ilgili bilgileri gözetliyorum. Mesela Voltajlar, koordinatlar.

Bu PC yazılımımı daha anlaşılır ve sade kılıyor. Yoksa tüm haberleşmeyi EP1 den de yapabilirdim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

Eğer yanlış anlamadıysam;
Birden fazla interface yapmak mümkün, descriptorlerle oynayıp, diğer EP kontrol kodlarını da yazınca sorunsuz çalışıyor. Önceden NXP de 1 HID, 2 CDC ve 1 MSC yapmayı başarmıştım.

t2


ErsinErce

Configuration Descriptor içinde Number of interfaces i 2
Interface Descriptor numarası olarak ilk HID için 0 sonraki HID için 1 yi kullanmak yeterli olması lazım hocam
EP2 HID2 için atanıyor tabi

aşağıdaki düzenlemeye bakabilirseniz yaptığım değişikliğe göre  biraz düzenleme yapabilirseniz çalışacağını düşünüyorum

HID rutinlerinde PC den istenen configurator numarasına göre EP seçimi olması gerekiyor tabi
bu tarz bir düzenlemeden sonra 7 HID cihaz bir anda bağlanabilir

bir de C de mi yazıyorsunuz yoksa asm de mi hocam?

USB_MAX_PACKET0     EQU       0x40      ; 64 BYTE	

;***************************************************************************
; 	Device Descriptor 
;***************************************************************************

DeviceDesc

    DCB       0x12                ; Size of this descriptor in bytes
    DCB       0x01                ; DEVICE descriptor type
    DCB       0x00,0x02           ; USB Spec Release Number in BCD format
    DCB       0x00                ; Class Code
    DCB       0x00                ; Subclass code
    DCB       0x00                ; Protocol code
    DCB       USB_MAX_PACKET0     ; Max packet size for EP0, see usb_config.h
    DCB       0x83,0x04           ; Vendor ID
    DCB       0x20,0x57           ; Product ID: Custom HID demo
;	DCB       0xD8,0x04           ; Vendor ID
;	DCB       0x3F,0x00           ; Product ID: Custom HID demo
    DCB       0x00,0x02           ; Device release number in BCD format
    DCB       0x01                ; Manufacturer string index
    DCB       0x02                ; Product string index
    DCB       0x03                ; Device serial number string index
    DCB       0x01                ; Number of possible configurations

;***************************************************************************
;	Configuration Descriptor 
;***************************************************************************

ConfigDesc

    DCB       0x09 	   ; sizeof(USB_CFG_DSC),    // Size of this descriptor in bytes
    DCB       0x02         ; CONFIGURATION descriptor type
    DCB       0x29,0x00    ; Total length of data for this cfg (Config+Int+HidClass+EP0+EP1)
    DCB       2            ; Number of interfaces in this cfg
    DCB       1            ; Index value of this configuration
    DCB       0            ; Configuration string index
    DCB       0xE0     	   ; Attributes, 0x80 | 0x40 | 0x20
    DCB       0xFA         ; Max power consumption (2X mA) 500mA
                            
;***************************************************************************
;	Interface Descriptor 1
;***************************************************************************

IntDesc1	DCB       0x09	   ; sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
    DCB       0x04         ; INTERFACE descriptor type
    DCB       0            ; Interface Number			
    DCB       0            ; Alternate Setting Number
    DCB       0x02         ; Number of endpoints in this intf
    DCB       0x03         ; Class code HID
    DCB       0     	   ; Subclass code
    DCB       0     	   ; Protocol code
    DCB       0            ; Interface string index

;***************************************************************************
;    	HID Class-Specific Descriptor
;***************************************************************************

    DCB       0x09	   ; sizeof(USB_HID_DSC)+3,    // Size of this descriptor in bytes
    DCB       0x21         ; HID descriptor type
    DCB       0x00,0x02    ; HID Spec Release Number in BCD format (2.00)
    DCB       0x00         ; Country Code (0x00 for Not supported)
    DCB       0x01         ; Number of class descriptors
    DCB       0x22         ; Report descriptor type
    DCB       HIDSIZE1,0x00 ; sizeof(hid_rpt01),        
  
;***************************************************************************
;    	Endpoint Descriptor (Input icin)
;***************************************************************************

    DCB       0x07 	   ; sizeof(USB_EP_DSC)
    DCB       0x05         ; Endpoint Descriptor
    DCB       0x81         ; EndpointAddress (Adr=1 input)
    DCB       0x03         ; Attributes (Interrupt transfer)
    DCB       0x40,0x00    ; size
    DCB       0x01         ; Interval

;***************************************************************************
;    	Endpoint Descriptor 
;***************************************************************************

    DCB       0x07	   ; sizeof(USB_EP_DSC)
    DCB       0x05         ; Endpoint Descriptor
    DCB       0x01         ; EndpointAddress (Adr=1 output)
    DCB       0x03         ; Attributes (Interrupt transfer)
    DCB       0x40,0x00    ; size
    DCB       0x01         ; Interval

;***************************************************************************
;	Class specific descriptor - HID boyu 25 byte
;	ReportDesc1
;***************************************************************************

HIDSIZE1   EQU       25   
ReportDesc1
          DCB       0x06, 0xA0, 0xFF ; USAGE_PAGE (Vendor Defined page 0xA1)
          DCB       0x09, 0x01          ; USAGE (Vendor Usage 0x01)
          DCB       0xA1, 0x01          ; COLLECTION (Application)
                                                  ; Global items
          DCB       0x15, 0x00          ;   LOGICAL_MINIMUM(-128)
          DCB       0x26, 0xFF,0x00  ;   LOGICAL_MAXIMUM(+127)
          DCB       0x75, 0x08          ;   REPORT_SIZE (8 Bits)
          DCB       0x95, 0x40          ;   REPORT_COUNT (8  8 Bits, 8 Bytes)
                                                  ; INPUT
          DCB       0x09, 0x01          ;   USAGE (Vendor Usage 0x03)
          DCB       0x81, 0x02          ;   INPUT (Data,Variable,Abs)
                                                  ; OUTPUT
          DCB       0x09, 0x01          ;   USAGE (Vendor Usage 0x04)
          DCB       0x91, 0x02          ;   OUTPUT(Data, Variable,Abs
          DCB       0xC0                   ; END_COLLECTION

;***************************************************************************
;	Interface Descriptor 2
;***************************************************************************

IntDesc2	DCB       0x09	   ; sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
    DCB       0x04         ; INTERFACE descriptor type
    DCB       1            ; Interface Number			
    DCB       0            ; Alternate Setting Number
    DCB       0x02         ; Number of endpoints in this intf
    DCB       0x03         ; Class code HID
    DCB       0     	   ; Subclass code
    DCB       0     	   ; Protocol code
    DCB       0            ; Interface string index

;***************************************************************************
;    	HID Class-Specific Descriptor
;***************************************************************************

    DCB       0x09	   ; sizeof(USB_HID_DSC)+3,    // Size of this descriptor in bytes
    DCB       0x21         ; HID descriptor type
    DCB       0x00,0x02    ; HID Spec Release Number in BCD format (2.00)
    DCB       0x00         ; Country Code (0x00 for Not supported)
    DCB       0x01         ; Number of class descriptors
    DCB       0x22         ; Report descriptor type
    DCB       HIDSIZE2,0x00 ; sizeof(hid_rpt01),          
;***************************************************************************
;    	Endpoint Descriptor (Input icin)
;***************************************************************************

    DCB       0x07 	   ; sizeof(USB_EP_DSC)
    DCB       0x05         ; Endpoint Descriptor
    DCB       0x82         ; EndpointAddress (Adr=1 input)
    DCB       0x03         ; Attributes (Interrupt transfer)
    DCB       0x40,0x00    ; size
    DCB       0x01         ; Interval

;***************************************************************************
;    	Endpoint Descriptor 
;***************************************************************************

    DCB       0x07	   ; sizeof(USB_EP_DSC)
    DCB       0x05         ; Endpoint Descriptor
    DCB       0x02         ; EndpointAddress (Adr=1 output)
    DCB       0x03         ; Attributes (Interrupt transfer)
    DCB       0x40,0x00    ; size
    DCB       0x01         ; Interval

;***************************************************************************
;	Class specific descriptor - HID boyu 25 byte
;	ReportDesc2
;***************************************************************************

HIDSIZE2   EQU       25   
ReportDesc2
          DCB       0x06, 0xA0, 0xFF ; USAGE_PAGE (Vendor Defined page 0xA1)
          DCB       0x09, 0x01          ; USAGE (Vendor Usage 0x01)
          DCB       0xA1, 0x01          ; COLLECTION (Application)
                                                  ; Global items
          DCB       0x15, 0x00          ;   LOGICAL_MINIMUM(-128)
          DCB       0x26, 0xFF,0x00  ;   LOGICAL_MAXIMUM(+127)
          DCB       0x75, 0x08          ;   REPORT_SIZE (8 Bits)
          DCB       0x95, 0x40          ;   REPORT_COUNT (8  8 Bits, 8 Bytes)
                                                  ; INPUT
          DCB       0x09, 0x01          ;   USAGE (Vendor Usage 0x03)
          DCB       0x81, 0x02          ;   INPUT (Data,Variable,Abs)
                                                  ; OUTPUT
          DCB       0x09, 0x01          ;   USAGE (Vendor Usage 0x04)
          DCB       0x91, 0x02          ;   OUTPUT(Data, Variable,Abs
          DCB       0xC0                   ; END_COLLECTION

;***************************************************************************
;	Language code string descriptor
;***************************************************************************

StringDesZero
    
    DCB       ManufacStr - StringDesZero    ; Length
    DCB       0x03	                    ; Type=String
    DCB       0x09,0x04                     ; Code English

;***************************************************************************
;	ManufacStr
;***************************************************************************

ManufacStr
        
          DCB       ProductStr - ManufacStr       ; Length
          DCB       0x03                          ; Type=String
          DCB       'C',0
          DCB       'n',0
          DCB       'c',0
          DCB       ' ',0
          DCB       'D',0
          DCB       'e',0
          DCB       's',0
          DCB       'i',0
          DCB       'g',0
          DCB       'n',0
          DCB       'e',0
          DCB       'r',0

;***************************************************************************
;	ProductStr
;***************************************************************************

ProductStr
        
          DCB       SerialNumStr - ProductStr     ; Length
          DCB       0x03                          ; Type=String
          DCB       'S',0
          DCB       'm',0
          DCB       'd',0
          DCB       ' ',0
          DCB       'P',0
          DCB       'i',0
          DCB       'c',0
          DCB       'k',0
          DCB       '&',0
          DCB       'P',0
          DCB       'l',0
          DCB       'a',0
          DCB       'c',0
          DCB       'e',0

;***************************************************************************
;	SerialNumStr
;***************************************************************************

SerialNumStr

    DCB       ReportDesc - SerialNumStr     ; Length
               DCB       0x03   	                            ; Type=String
    DCB       'S',0
               DCB       'N',0
               DCB       ':',0
               DCB       '0',0
               DCB       '2',0
               DCB       '0',0
               DCB       '1',0
               DCB       '3',0

z

Hatırlarsanız sorunum;

1K5 ile pull-up yapılmış usb cihaz, işletim sistemi tarafından üzerinde ünlemli olarak tanınıyor ve usblyzer de lowspeed cihaz olduğununun iddia ediyordu.

Ayrıca usblyzer, device descriptorde 64 byte olan paket boyunu kırmızı uyarı ile low speed cihazda bu değer 8 byte olmalı mesajını veriyordu.

Kodlardaki hatalarımı düzeltince artık usb cihazım PC ile sorunsuz konuşur hale geldi. Keil'de kodlarım koşarken işletim sistemi usb cihazı descriptorlerde belirtildiği gibi tanıyor.

Eğer brekpoint koyarak kodları durdurursam kısa bir süre sonra usblyzer bu cihazın lowspeed olduğunu ve 64 bytelık paket boy tanımının 8 byte olması gerektiği mesajını veriyor.

Demekki bu tip programlara da çok güvenmemek lazım. Belli bir süre sonunda cevap alınamayan usb cihaz biraz evvel full speed iken bunu low speed diye lanse etmek bana bug gibi geldi.

Halbuki verilmesi gereken mesaj. Cihazınınız iletişimi sonlandırdı türünde bir şey olmalı. İşletim sistemi bunu ünlemle geçiştirirken usblyzerın böyle davranması çok kafa karıştırıcı oldu.

@Ersinerce

Tam olarak ne dediğini anlayamadım. Verdiğim descriptorler olduğu haliyle sorunsuz görünüyor.
Fakat dediğin değişiklikleri yapayım. Sen ne sorun gördün?

Bir ara güzel bir başlık açmıştım. Desriptor tasarımı gibi bir şeydi. Sağdan soldan kopyala yapıştır değil de
akıllı uslu sıfırdan usb descriptorlerinin tasarımını ele almıştık. https://www.picproje.org/index.php/topic,31537.msg220074.html#msg220074

Şu anda sadece HID descriptoru tam anlayamıyorum. Fakat  descriptorlerimde sorun gördüysen üzerinde konuşalım isterim.

Alıntı Yapbir de C de mi yazıyorsunuz yoksa asm de mi hocam?
Tabiki asm.  :)

C yi, ele geçirdiğim hazır kodlarda yapılan işi anlamak ve debug etmek adına kullanıyorum.

Aşağıdaki linkte de USB üzerine güzel şeyler yazmış güzel tecrübeler edinmişiz.

https://www.picproje.org/index.php/topic,39792.0.html

Derli toplu olsun diye link vereyim istedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

yok sorun değil hocam composite HID konusu açılınca nasıl yapılabileceği hakkında yollardan birini söylemiştim.
diğer yolda tek EP kullanarak konfigürasyon numarasına bakmaktı diye hatırlıyorum ama emin olamıyorum HID konusuna tekrar bakmam gerekiyor