USB'den Akım İzni Almak

Başlatan Tagli, 18 Haziran 2020, 23:41:05

Tagli

Bilindiği üzere USB'ye bağlanan bir cihaz başlangıçta en fazla 100 mA akım talep edebiliyor. Eğer cihaz daha fazla akım gerektirecek fonksiyonlara sahipse, bunların başta devre dışı olması ve ancak bilgisayar tarafından izin verildiği zaman etkinleştirilmesi gerekiyor.

Ancak bu izin verme işini anlamadım. USB cihazlar genelde farklı güç ihtiyaçlarına göre farklı konfigürasyonalara sahip olabiliyorlar. Bunlar da zaten configuration descriptor'lar içinde belirtiliyor. Bilgisayar üzerinde bir sürücü, USB cihaza konfigürasyon değiştirme komutu gönderebiliyor. Zaten enumaration aşamasının sonu bu, bilgisayar bir konfigürasyon seçiyor. Burada sorun yok, libusb kullanarak yazılan bir yazılım ile konfigürasyon değişimi yapabiliyoruz. Örneğin PyUSB'de set_configuration() diye bir fonksiyon var.

Sorun şu: Ben bu işin için kimden izin alıyorum? Kafama göre konfigürasyon değiştirebilir miyim? Öncesinde bir yerlere "Bana ayırabileceğin kaç mA'in var?" diye sormalı mıyım? Yoksa host donanımı akım veremeyecek durumda ise set_configuration() talebi hata mı döndürür?
Gökçe Tağlıoğlu

ErsinErce

Enumeration tamamlanınca, descriptor da tanımlanan kadar akım çekebilirsiniz.

usbden, tanımlanandan fazla akım çekilince power switch ile usb kapatılır.

Akım veremem gibi birşey söz konusu değil.

HexfeT

#2
Notebooklardaki standart USB2.0 portlar için konuşursak, çekilen akımın ölçülmesi ya da miktarının aktif kontrolü gibi bir şey yok. USB portun beslemesi 8 pinli basit bir load switch entegresine bağlı. Sistem açıldığında Enable oluyor. 500mA sınırlaması var, aşılırsa akımı kesip çipsete uyarı gönderiyor, hepsi bu kadar.

Tagli

USB cihazı ben tasarlıyorum. EZ-USB (FX2LP) tabanlı bir kart olacak. Muhtemelen descriptor'ları da ben yazıyor olacağım (FX2LP kendisi default bir USB cihaz tanımlıyor ve bazı durumlarda bu doğrudan kullanılabilir).

Ben şu şekilde sanıyordum: Konfigürasyonlarda (ConfDesc diyeceğim kısaca) o konfigürasyonun ne kadar akım istediği belirtiliyor. ConfDesc'lerin içinde interface'ler de tanımlı ve bu bilgi aslında o cihazın ne kadar veri yoluna ihtiyacı olduğunu da belirtiyor. Buna göre aygıt sürücüsü veya uygulama programı bir konfigürasyon ve varsa alternatif interface'leri seçiyor. Atıyorum, cihazımız config 1'de 100 mA istiyor ama aslında config 2'ye geçip 300 mA akım gerektirecek acayip bir özelliği etkinleştirmek istiyoruz. Config 2'ye geçebilmemiz için ise host'un bu akımı verebiliyor olması gerekir. Çünkü aynı host üzerinde belki 300 mA çeken bir başka cihaz daha var.

Ama siz diyorsunuz ki her porttan 500 mA çekebilirim. Bu durumda ConfigDesc'te yazan akım değerinin bir anlamı kalmıyor, öyle değil mi? Host üzerinde birden fazla yüksek akım çeken cihaz varsa da durum böyle mi? Bilgisayardaki her USB portundan kafama göre 500 mA çekebilir miyim?
Gökçe Tağlıoğlu

Elektroemre

Alıntı yapılan: Tagli - 19 Haziran 2020, 10:23:48Ama siz diyorsunuz ki her porttan 500 mA çekebilirim. Bu durumda ConfigDesc'te yazan akım değerinin bir anlamı kalmıyor, öyle değil mi? Host üzerinde birden fazla yüksek akım çeken cihaz varsa da durum böyle mi? Bilgisayardaki her USB portundan kafama göre 500 mA çekebilir miyim?

Ben her zaman ConfigDesc akım için sayısal 250 değerini veriyorum (250*2mA = 500mA). Hiç sıkıntı olmuyor. Normal bir PC'den tüm portlarında 500mA çekebilirsiniz. Çoğu PC üreticisi USB standarlarını iplemiyor açıkçası. Yani ConfigDesc'a 2mA desenizde 500mA çekebilirsiniz.

z

Belki bu akim siniri sadece belirlenen degerin ustunde akim cekilmesi durumunda hata uretmek icindir. Siz 100ma olarak set etseniz de sistem 500ma verebilir eger isletim sistemi ve main board yetenekli ise 100mA i astiginizda uyari verir. Kartiniz/isletim sisteminiz yeteneksizse akim artisi dikkate alinmaz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com