USByi karmaşık kılan şey, aslında ilk olarak flat bir protokol olmaması. Yani bağladığınız her cihaz HID, Bulk, Izonkron veya hybrid olmasına bağlı olarak haberleşmenin farklı yürümesine sebep oluyor.
Yani bir cihaz tasarlamak istiyorsanız, öncelikle tasarlayacağınız cihazın yukarıda saydığım 3 (4) sınıftan hangisine dahil olacağını seçmeniz gerekiyor. (Bu sınıfların neler olduğunu ve ayrıntılarını ileride açıklayacağım)
İş basitçe şöyle yürüyor : Cihazı bağladığınızda ilk önce usb karargahı (usb host) (ki her bilgisayarın ana kartında bir tane karargah vardır) öncelikle cihazdan kendisini tanıtmasını istiyor. Cihaz da Hosta ardı ardına bir takım descriptor (tanımlayıcı) tabloları gönderiyor.
Gönderilen ilk tablo olan Device Descriptorun yapısı hemen hemen tüm cihazlar için aynı. Zaten cihazın hangi sınıfa ait olduğun bilgisi de bu tablolarda iletiliyor. Sonraki tablolar cihaz sınıfına göre farklılık gösteriyor. Ve evet bu tabloların tümünü siz hazırlıyorsunuz.
Hatta cihazın normal çalışma sırasında ne kadar akım çekeceği bile bu tablolarla tanımlanıyor.
Elbette bir takım frameworklar yazılımcılar tarafından hazırlanmış ama hepsi belirli kısıtlamalar ve hatalar içeriyor. En iyisi biraz kastırıp kendi descriptorlarınızı kendiniz hazırlamak olur.
Aşağıda USB hakkında genel bilgiler bulabileceğiniz, Mikrochip tarafından hazırlanmış bir sunum dokümanı var. Genel hatları ile USB'nin ne oldupu baştan sona tarif ediliyor.
USB for Embeded Applications