USB nasıl çalışır? Enumeration süreci, endpoint'ler ve transfer tipleri nelerdir?
Cevap
USB host merkezli bir protokoldür: tüm iletişimi host başlatır, device sadece host sorduğunda cevap verir. Bir device bağlandığında host onu tanımak için enumeration yapar, sonra uygun class sürücüsünü yükler.
Enumeration adımları
- Device bağlanır; D+ (full speed) veya D- (low speed) hattındaki pull-up direncinden host bağlantıyı ve hızı algılar.
- Host bus'ı resetler, adres 0 üzerinden
GET_DESCRIPTOR (Device)ister. - Host
SET_ADDRESSile device'a benzersiz bir adres verir. - Device, configuration, interface, endpoint ve string descriptor'ları okunur.
SET_CONFIGURATIONile device kullanıma hazır hale gelir; host VID/PID veya class koduna göre sürücü seçer.
Endpoint'ler
- Endpoint, device tarafında bir veri tamponudur; yönü (IN = device'tan host'a, OUT = host'tan device'a) ve numarası vardır.
- Endpoint 0 her device'ta zorunludur ve kontrol (setup) istekleri için kullanılır.
Transfer tipleri
| Tip | Özellik | Örnek |
|---|---|---|
| Control | Setup/yapılandırma, garantili teslim | Enumeration, vendor komutları |
| Bulk | Büyük veri, hata düzeltmeli, bant genişliği garantisi yok | USB bellek (MSC), CDC veri |
| Interrupt | Küçük veri, garantili maksimum gecikme (host belirli aralıklarla sorar) | Klavye, fare (HID) |
| Isochronous | Garantili bant genişliği, hata durumunda tekrar gönderim yok | Ses, video |
Hızlar
Low Speed 1.5 Mbps, Full Speed 12 Mbps, High Speed 480 Mbps, SuperSpeed 5 Gbps ve üzeri. Çoğu MCU'da dahili PHY ile Full Speed bulunur; High Speed için genellikle harici ULPI PHY gerekir.
Gömülü pratik
- Full Speed USB, hassas bir 48 MHz saat ister: kristal + PLL ya da clock recovery system (CRS) ile ayarlanan HSI48.
- Hazır class'lar sürücü yazmayı gereksiz kılar: CDC-ACM (sanal seri port), HID, MSC, DFU.
- Yaygın stack'ler: TinyUSB, STM32 USB Device Library, Zephyr USB stack.
- Ticari ürün için kendi VID/PID'niz gerekir (USB-IF'ten satın alınır veya üretici alt-PID programları kullanılır).
Not: "Interrupt transfer" ismi yanıltıcıdır; device host'u kesmez, host belirlenen aralıkla device'ı yoklar (polling).
İlgili Haberleşme Protokolleri soruları
- UART, SPI ve I2C arasındaki farklar nelerdir?
- CAN bus nasıl çalışır? Arbitration, hata yönetimi ve CAN FD farkını açıklayın.
- SPI'da CPOL ve CPHA nedir? Dört SPI modu arasındaki fark nasıl açıklanır?
- I2C protokolü nasıl çalışır? Adresleme, ACK/NACK ve clock stretching nedir?
- UART'ta baud rate, frame yapısı ve parity nedir? RS-485 UART'tan nasıl farklıdır?
- CRC nedir, checksum'dan farkı nedir? CRC-16 hesaplayan bir C fonksiyonu yazın.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.