USB Interface Alternate Setting Meselesi

Başlatan Tagli, 24 Kasım 2021, 17:46:58

Tagli

Bilindiği üzere USB cihazlarda (device için konuşuyorum, host değil) bulunan Interface Descriptor'ların bir de alternate setting özelliği var. Bununla ilgili kafama bazı sorular takıldı ancak internette aradığım tarzda bilgileri bulamadım maalesef.

Öncelikle bunun kullanım alanını sorayım. Benim bildiğim bir tanesi şu: Interrupt ve özellikle isochronous endpoint'ler için host'un bunlara zaman (ya da bandwidth diyelim) ayırabilmesi gerekiyor. Eğer hat yoğunsa, belki bu endpoint'lerin daha düşük max packet size (mpsize) ile oluşturulması gerekebilir. Böyle bir durumda interface, farklı mpsize'e sahip alternatifleri içerebilir. Örneğin hat yoğunsa webcam düşük kalite görüntü yollayabilir.

Asıl aklıma takılan soru ise şu: Host istediği zaman bir interface'e "şimdi şu alt. setting'e geç" diyebilir. Ama benim anladığım kadarıyla eğer cihazda birden fazla interface varsa, saçma bir örnek olacak ama mesela webcam'li bir harici HDD'niz varsa, o zaman bir interface yeniden yapılandırılırken diğerinin çalışmasının etkilenmemesi lazım sanırım. Peki bunu işlemcide nasıl gerçekleyebiliriz?

Çok fazla işlemci incelemedim. STM32'lerde eski tip Full Speed Device ve yeni tip OTG_FS donanımlarını biliyorum. 8 ve 16 bit PIC'lere de baktım. Genel olarak donanımlar IN ve OUT endpoint'leri için ortak bir havuzdan buffer ayırıyorlar. Burada sorun şu ki interface'in alt. setting geçişleri sırasında buffer boyutları da değişecek. Bu değişikliği, sistemde var olabilecek diğer interface'lerin buffer'ları etkilenmeden nasıl yapabiliriz?

Akla gelen ilk çözüm, bir interface için ihtiyaç duyulabilecek azami buffer alanını baştan ayırmak. Ama alt. setting'lerde mpsize dışında, endpoint yapılarının tamamen değişmesi gibi durumlar olabilir mi acaba? Yani teknik olarak bir engel yok ama bu tür bir uygulama ihtiyacı var mı? İlk sorumu da bu yüzden sordum aslında. Çünkü eğer endpoint yapıları da büyük değişiklikler geçirecekse, diğer interface'leri etkilemeden alt. setting'ler arası geçiş yapmak zorlaşacak sanırım.

Bu arada donanımların çalışma anında buffer ayarlarını değiştirip değiştiremediklerinden de pek emin değilim. OTG_FS'de denk geldiğimi hatırlamıyorum ama STM32 Full speed device ve PIC USB donanımlarında buffer allocation table başka bir yerde gösterilebiliyor sanırım. Ama bunu USB donanımı çalışırken yapabiliyor muyuz? Siz hiç böyle bir şey denediniz mi?
Gökçe Tağlıoğlu