STM32F103C8 Keil deneme surumunde calisacak CDC ornek

Başlatan z, 14 Haziran 2021, 11:58:02

z

Kullandigim programin adi Usblyzer imis.

Indirdim ve hatalarimi gordum.

HID rutinlerini yazarken descriptorlerimin boyu 64 bytedan kucuk iken orjinal program 64 bytedan daha buyuk datalari yollamak icin yazilmisti.

Ben de en fazla 64 byte descriptorler var niye boyle yapmislar deyip tirpanlamis ve 64 byte yollayacak hale getirmistim.

Simdi bu duzenleme basima dert oldu. Zira CDC config descriptor 64 bytedan daha uzun.

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

Tagli

Evet, 64'ün üzerine çıkınca birden fazla paket olması gerekiyor.

F407'nin OTG_FS donanımı bunu otomatik halledebiliyor, tek seferde 7 (galiba) pakete kadar buffer'a yerleştirmek mümkün, sırası geldikçe kendisi otomatik gönderiyor.

Ancak benim projede 4 kB'lık transaction'lar yapmam gerekiyordu. Haliyle yazılım ile buffer eklemem gerekti. Donanım buffer'ında 7*64'ten fazla yerim vardı aslında. Ama Reference Manual'de o "maksimum 7 paket" kısmını küçük bir parantez içine yazıp iyice sakladıkları için uzunca bir süre buffer'da yerim olmasına rağmen neden belli bir boyuttan fazla transaction yapamadığımı arayıp durdum.

Hatırladığım kadarıyla STM32F103 FS_Device donanımında sadece 1 paket donanım buffer'ına yazılabiliyor. Bulk ve Isochronous transferler için ise double buffer desteği var.

Bir de kısa mesaj durumuna dikkat etmek lazım. Bilgisayarın talep ettiğinden daha az miktarda veri gönderilebilir. Ancak eksik gönderilen verinin toplam boyutu 64'ün katı ise, ardından bir de zero-length-package (ZLP) göndermek gerekiyor. Yoksa bilgisayar timeout'a düşene kadar sürekli sorgu atmaya devam edebilir.
Gökçe Tağlıoğlu

z

Calisan bir CDC ornegini komple klasor olarak ziplayip proje olarak verecek yok mu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Karanlık çağlarda, bir kütüphane yada framework vs kullanmadığım dönemlerde, pic 18f2550 ile yapmak istediğim bir cihaz için https://www.beyondlogic.org/usbnutshell/usb1.shtml dan çok yararlanmış, sonrasında jan exelson un kitabını almıştım.

e-zeki

Alıntı yapılan: z - 15 Haziran 2021, 00:37:32Calisan bir CDC ornegini komple klasor olarak ziplayip proje olarak verecek yok mu?
@z hocam buyrun https://wetransfer.com/downloads/b48a268345d4944a67ca1ede7f5e968920210617151944/27d0c634e1eb63dae22178bf88626d2420210617151956/001197
usbd_cdc_if.c dosyasında
__weak void USB_CDC_ReceiveCpltCallback(uint8_t *Buf, uint32_t Length)
{
  
}
weak fonksiyonu ekledim callback olarak kullanmak isterseniz

z

CubeMX ile 5 dakikada hallettim.

Ama icim hic rahat degil.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Erol YILMAZ

Alıntı yapılan: z - 18 Haziran 2021, 17:46:42CubeMX ile 5 dakikada hallettim.
Ama icim hic rahat degil.

Evet hocam bence de abdest alıp tövbe etmelisin acilen.

z

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

Okan AKÇA


RaMu

Ama @z sırat köprüsünü geçmeye çalışıyor ;)
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

PC, USB cihazimdan Device Qualifier Desriptor istiyor fakat buna ne cevabi verecegimi anlayamadim.

Cihazim USB 2.00 tanimli.

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

Tagli

Aklımda yanlış kalmadıysa, control endpoint'i STALL yapıp "O da neymiş? Ben desteklemiyorum öyle şeyleri." mesajı gönderebilirsin.

Alternatif olarak, eğer cihazında zaten high speed desteği yoksa, cihazını USB 1.1 olarak gösterebilirsin. O zaman zaten bilgisayar o descriptor'u hiç sormuyor.
Gökçe Tağlıoğlu

z

CDC desriptorlerini ST Cube MX deki ornegin aynisi yaptim. Bu sartlarda enumeration yapiliyor ve device managerda cihazim com port olarak gorunuyor. Fakat uzerinde unlem isareti var.

Aciklamasinda This device can not start (Code 10) uyarisi var.
Wireshark ve USBlizer ilegelen sorgulari ve usb cihazlari verdikleri cevaplara baktigimda CubeMX kodlarinin verdigi cevapla ayni cevaplarin verildigini goruyorum.

Hangi sorgular gelmis baktigimda ip ucu olacaksa setup paket icerikleri asagida

86 06 00 01 00 00 40 00  Device Desriptoru istemis
00 05 06 00 00 00 00 00  6 nolu ardesi atamis
86 06 00 01 00 00 12 00  Device Desriptorumu istemis
86 06 00 02 00 00 FF 00  Config descriptoru istemis
86 06 03 03 09 04 FF 00  String descriptoru istemis
86 06 00 03 00 00 FF 00  String descriptoru istemis
86 06 02 03 09 04 FF 00  String descriptoru istemis
86 06 00 01 00 00 12 00  Device Desriptoru istemis
86 06 00 02 00 00 09 00  Config descriptoru istemis
86 06 00 02 00 00 43 00  Config descriptoru istemis (CDC ile ilgili ne var ne yok hepsini istemis)
86 06 00 02 00 00 09 01  Config descriptoru istemis ama wlength degerinin 0x0109 olmasi kafa karistirici
Baska da istek gelmiyor.

0x109 eger data boyu olarak yorumlayacaksak bende 265 byte veri yok. Yok bunu 9 byte veri boyu ve 0x01 parametresi olarak yorumlayacaksak bu 0x01 ne anlama geliyor bilmiyorum.

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

z

Kodlarimda talep edilen descriptor uzunluklarini 16 bit okumam gerekirken 8 byte okumusum.

Bu hatayi giderdigimde windows usb cihazimi COM olarak gordu.

265 byte da, toplamadim ama config desriptorden itibaren ne var ne yok (string desriptorler dahil toplam uzunluk) gibi gorunuyor.

265 byte yolladim sorun duzeldi cunku. Soru sormama neden olan durumda 0x109 u 0x09 olarak ele alip sadece config desriptoru yollamamdan kaynaklaniyormus. Sans iste 9 rakami config desriptorun boyu.

Toplam boy 0x108 falan olsaydi hatayi yakalamam daha kolay olacakmis.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

PC tarafindan yapilan standart istekler cevapladiktan sonra USB cihaz PC tarafindan taniniyor ve kuruluyor.

Simdi PC Class'a yonelik isteklerde bulunmaya basladi.

Gelen talep asagidaki gibi

bmRequest Type: 0xA1
bmRequest 0x21
wValueL 0x00
wValueH 0x00
wIndexL 0x00
wIndexH 0x00
wLength 0x07

Bu talebin ne anlama geldigini bilmek istiyorum.

Talep edilen Standart istekler tablo halinde duyurulmus.
Ancak Class'a yonelik istekler icin tablo bulamadim.

Su anda ugrastigim Class Communication Class olduguna gore https://cscott.net/usb_dev/data/devclass/usbcdc11.pdf dokumaninda olmasi lazim.

Acaba burdaki sorgu 16.sayfadaki GET_LINE_CODING mi oluyor?


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