2 puan yazan GN⁺ 2024-06-04 | 1 yorum | WhatsApp'ta paylaş

USB cihazı geliştirme rehberi

İçindekiler

  • Arka plan
  • USB nedir?
  • USB kabloları
    • USB-C hakkında dikkat edilmesi gerekenler
    • Diferansiyel çift üzerinden veri iletimi
  • PCB üzerinde USB
  • USB'nin farklı hızları
    • PCB üzerinde hızla ilgili kısa notlar
  • Protokol ve yazılım katmanları
    • USB cihaz sınıfları ve host'un bunları kullanma biçimi
  • Seri port cihazı yapımı
    • STM32 mikrodenetleyici ve Nucleo kartı
    • Gerçek USB portu yapılandırması
    • Yazılım yazımı
    • Flash'lama ve çalıştırma
  • Sonuç

Arka plan

  • USB cihazları, bilgisayarın işlevlerini genişletmek için kullanışlıdır.
  • Bu yazının amacı, bir USB cihazını baştan sona yapma sürecine rehberlik etmektir.

USB nedir?

  • USB, veri alışverişi ve güç sağlama için bir endüstri standardıdır.
  • USB seri bir veriyoludur; bitler tek tek iletilir.
  • USB, basit bir bağlantı standardının ötesinde bir iletişim protokolünü de içerir.

USB kabloları

  • USB 2.0 bağlantısında 4 ana kablo bulunur:
    • +5V kablosu: host'tan cihaza güç sağlar.
    • D- ve D+ kabloları: diferansiyel çift olarak 1 biti iletir.
    • GND kablosu: toprak görevi görür.

USB-C hakkında dikkat edilmesi gerekenler

  • USB-C iki yönde de takılabilir.
  • USB-C, hız ya da sürümü belirtmez.

Diferansiyel çift üzerinden veri iletimi

  • Diferansiyel çift, tek bir biti iletmek için iki kablo kullanır.
  • Diferansiyel çift, voltaj gürültüsünü azaltmada avantajlıdır.

PCB üzerinde USB

  • PCB'ye USB konnektörü eklerken diferansiyel çiftin uzunlukları eşit tutulmalıdır.
  • Diferansiyel çift izleri birbirine yakın olmalıdır.
  • Belirli bir empedans korunmalıdır.

USB'nin farklı hızları

  • USB 2.0, full-speed (12 Mbit/s) ve high-speed (480 Mbit/s) olarak çalışabilir.
  • Host ve cihaz, bağlantı sırasında hızı müzakere eder.

PCB üzerinde hızla ilgili kısa notlar

  • Full-speed'de empedans ve iz uzunluğu konusunda kurallar daha az sıkıdır.

Protokol ve yazılım katmanları

  • USB, ağ benzeri çalışır ve çeşitli endpoint'lere ve yapılandırmalara sahiptir.
  • Host, sürücüler aracılığıyla USB cihazını tanır ve kullanır.

USB cihaz sınıfları ve host'un bunları kullanma biçimi

  • İşletim sistemi, çeşitli USB cihaz sınıflarını tanır.
  • Örneğin kütle depolama cihazı veya seri cihaz gibi türler vardır.

Seri port cihazı yapımı

  • Basit bir USB seri port cihazı yapılıyor.
  • STM32 mikrodenetleyici ve Nucleo kartı kullanılıyor.

STM32 mikrodenetleyici ve Nucleo kartı

  • NUCLEO-F103RB kartı kullanılıyor.
  • Kart, programlayıcı ve mikrodenetleyiciden oluşur.

Gerçek USB portu yapılandırması

  • USB portu yapılandırılır ve harici 5V güç kullanacak şekilde jumper ayarlanır.
  • PA12 ve PA11 pinleri USB_DP ve USB_DM olarak ayarlanır.
  • PA12 pinine 1.5 kΩ direnç bağlanarak pull-up yapılır.

Yazılım yazımı

  • STM32CubeIDE içinde USB cihaz modu yapılandırılır.
  • Host'un tanıyabilmesi için seri port cihazı olarak ayarlanır.
  • CDC_Receive_FS rutini içinde LED'i yakan kod yazılır.

Flash'lama ve çalıştırma

  • Kod derlenir ve STM32CubeProgrammer kullanılarak karta flash'lanır.
  • Kart harici 5V güçle bağlanır ve seri port üzerinden LED kontrol edilir.

Sonuç

  • Başlangıçtan sona bir USB seri port cihazı yapıldı.
  • STM32CubeIDE'nin çok miktardaki boilerplate kodu ve arayüz tabanlı yapılandırması rahatsız edici olabilir.
  • Linux tabanlı SoC kullanmak daha temiz bir yaklaşım olabilir.

GN⁺ görüşleri

  • STM32CubeIDE'nin boilerplate kodu: Çok sayıda boilerplate kod üretilmesi, kod incelemesini zorlaştırabilir.
  • Linux tabanlı yaklaşım: Linux SoC kullanmak, daha standart API'ler ve daha temiz kod ayrımı sağlayabilir.
  • Empedans ve iz uzunluğu: Yüksek hızlı USB bağlantıları için empedans ve iz uzunluğuna dikkat etmek gerekir.
  • Diferansiyel çiftin avantajları: Diferansiyel çift, voltaj gürültüsünü azaltmada avantajlı olduğundan kararlı veri iletimi sağlar.
  • Mikrodenetleyici seçimi: Projeye göre uygun mikrodenetleyiciyi seçmek önemlidir. STM32 dışında da çeşitli seçenekler vardır.

1 yorum

 
GN⁺ 2024-06-04
Hacker News yorumları
  • ST mikrodenetleyici kullanımına dair görüş: USB kullanımı hakkında iyi bir yazı, ancak ST mikrodenetleyicilere odaklanmış. Son dönemde ESP32 ekosistemi daha kolay bir tak-çalıştır yaklaşımı sunuyor. Yeni başlayanlar için yüksek hızlı çalışmalar yerine temel USB denetleyici IC’leri kullanmak daha uygun olabilir.

  • USB uygunluk testi deneyimi: Uzun zaman önce USB uygunluk testi yaparken ani akım testinde çok sorun yaşanıyordu. Yüksek hızlı dijital tasarıma odaklanmak kolay, ancak uygunluk testlerinde küçük ayrıntılar önemlidir.

  • USB-C ile ilgili ipucu: CC pinlerini uygun dirençlere bağlamak gerekir. USB 2.0’da diferansiyel yönlendirme ve empedans büyük bir sorun değildir. Benzer uzunlukta olacak şekilde doğrudan bağlamak yeterlidir.

  • STM32 için alternatif önerisi: ARM işlemci lehimlemek zorsa, küçük denetleyiciler veya VUSB kütüphanesi kullanmak da düşünülebilir. Arduino tarzı programlamayı tercih ediyorsanız, birçok kart USB aygıtı olarak kolayca kullanılabilir.

  • ESP32 ve ucuz hack yöntemi: Çoğunlukla ESP32 kullanılıyor, ancak atılmış USB klavyelerin kontrol kartlarını değerlendirerek ucuz ve sağlam özel denetleyiciler yapılabilir.

  • STM32’de 64 bayttan büyük alım desteği: 64 bayttan büyük çerçevelerin nasıl alınacağına dair bir soru var. Referans kılavuzunda yer alan ayarlar genel amaçlı register’lar olmadığı için zorlayıcı.

  • Bare metal USB kodu yazma deneyimi: MCU üzerinde bare metal USB kodu yazmak, SPI veya I2C’den daha karmaşıktır. Üreticinin sağladığı yazılımlardan mümkün olduğunca yararlanmak iyi olur. Yüksek hızlı aktarım için bulk transfer kullanılmalı ve host tarafındaki sorunlar kontrol edilmelidir.

  • Sanal USB aygıtı oluşturma: Raspberry Pi kullanarak PC’ye bağlanan sanal bir USB aygıtı oluşturulmuş. Yazılımı kandırmak için bir MTP kamerayı emüle etmekte kullanılıyor.

  • USB 3 destekli geliştirme kartı sorusu: USB C monitör sink’i için prototip hazırlamak isteniyor, ancak DisplayPort alabilecek güce sahip bir kart bulmak zor.

  • USB kullanmanın maliyeti: USB ücretsiz değildir. Vendor ID almak için tek seferlik 6.000 dolar ödemek gerekir.