2009-07-24 16 views
10

Nie można tego traktować jako bezpośrednio związanego z programowaniem, ale nie wiem, gdzie jeszcze mogę zapytać. Próbowałem przeglądać różne witryny internetowe, ale jak dotąd Google nie był moim przyjacielem.Czy muszę napisać własny sterownik USB po stronie hosta dla urządzenia CDC?

Mam problem ze sprawdzeniem, czy muszę napisać sterownik urządzenia dla różnych platform Windows/Linux/Mac, do którego może być podłączone urządzenie, do którego się rozwijam, lub czy funkcja jest zapewniona przez standardowe sterowniki.

Moje urządzenie to USB CDC (urządzenie komunikacyjne), które pojawia się jako port COM :. Obejmuje także ładowarkę, która po wyliczeniu urządzenia wymaga pełnego 5-cio ładunkowego (500mA) prądu zasilającego, który można pobrać ze złącza USB. Mój problem polega na tym, że jeśli sterownik USB w hoście zdecyduje, że nie może dostarczyć pełnego prądu zasilania, to nie powinien wyliczyć urządzenia.

Jeśli jako rezerwę, zapewniam drugi zestaw konfiguracji, który pozwala urządzeniu tylko na pobranie 1 jednostki obciążenia ze złącza interfejsu, standardowe sterowniki wyliczą urządzenie przy użyciu tej konfiguracji.

+0

Uważam, że najpierw trzeba sprawdzić specyfikację USB, aby sprawdzić, czy takie rzeczy są dozwolone. Jeśli specyfikacja na to zezwala, najprawdopodobniej będą obsługiwane standardowe przeglądarki. – kgiannakakis

+0

W specyfikacji USB 2.0 deskryptor urządzenia pozwala na wiele konfiguracji, z których każda może określić, że wymaga pewnej ilości energii z interfejsu. Byłoby więc, jak przypuszczam, być do kierowcy, aby wybrać między tymi różnymi konfiguracjami. –

Odpowiedz

6

Musisz napisać plik .inf dla systemu Windows, który wiąże system VID i PID urządzenia z systemem usbser.sys. Kopalnia wygląda następująco (Wymień twoja_firma jako niezbędną, umieścić w swoim VID i PID (w hex) i zmienić linię DriverVer na cokolwiek data i wersja chcesz):

; ----------------------------------------------------------------------------- 
; XP/2000 USB Comms Port Setup 
; ----------------------------------------------------------------------------- 

[Version] 
DriverVer=12/03/2008,1.0.0000.0000 
Signature="$Windows NT$" 
Class=Ports 
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318} 
Provider=%YourCompany% 

[DestinationDirs] 
DefaultDestDir=10,system32\drivers 
DriverCopyFiles=12 

[ControlFlags] 
ExcludeFromSelect = * 

[Manufacturer] 
%YourCOmpany%=YourCompanySerialPort 

[YourCompanySerialPort] 
%YourCompanyUSBSerialPort%=YOURCOMPANYUSB,USB\VID_1234&PID_ABCD 

; 
; Win 2000/XP 
; 
[YOURCOMPANYUSB] 
Include=mdmcpq.inf 
CopyFiles=FakeModemCopyFileSection 

[YOURCOMPANYUSB.HW] 
AddReg=YOURCOMPANYUSBAddReg.HW 

[YOURCOMPANYUSBAddReg.HW] 
HKR,,DevLoader,0,*ntkern 
HKR,,NTMPDriver,,"usbser.sys" 

[YOURCOMPANYUSB.Services] 
AddService=usbser, 0x00000002, FuncDrv_Service_Inst 

[FuncDrv_Service_Inst] 
DisplayName=%USBFilterString% 
ServiceType= 1 
StartType = 3 
ErrorControl = 0 
ServiceBinary = %12%\usbser.sys 

[Strings] 
YourCompany="YourCompany" 
YourCompanySerialPort="Your Company USB Serial Port" 
USBFilterString = "USB Serial Service" 

Uwaga ta współpracuje z 32-bitowym systemów operacyjnych tylko . Działa również z Vistą, chociaż nagłówek pliku tego nie mówi!

Należy pamiętać, że niektóre wersje usbser.sys mają poważne problemy, w tym prześwietlanie, na przykład podczas przesyłania pakietów, które są dokładnymi wielokrotnościami 64 bajtów. Jeśli używasz XP SP2 lub wcześniejszego, zainstaluj poprawkę KB943198. XP SP3 i Vista są w porządku.

W przypadku komputerów Mac wystarczy po prostu zgłosić klasę urządzenia, a skan sterownika wyszukuje odpowiednie sterowniki. (Windows ignoruje klasę urządzenia, dlatego musisz podać plik .inf).

EDYCJA: Przepraszam, powinienem był być bardziej przejrzysty. To się nie uda się wyliczyć, jeśli nie będzie mógł pobrać pełnego ładunku - nie jestem pewien, czy to możliwe.

+1

Próbuję zainstalować ten sterownik automatycznie, w przeciwieństwie do użytkownika, który musi przejść do menedżera urządzeń (chociaż to działa). Próbowałem tylko za pomocą instalacji kliknij prawym przyciskiem myszy, a także za pomocą metody opisanej na http://stackoverflow.com/questions/677686/how-do-i-deploy-a-inf-based -driver. W obu przypadkach po podłączeniu urządzenia pojawia się Kreator nowego sprzętu i, mimo że pojawia się pod portami w menedżerze urządzeń, nie ma z nim powiązanego sterownika. Więcej informacji: –

+0

... Próbuję w systemie Windows XP i korzystam z układu Cypress. Cypress udostępnia plik .inf (http://www.cypress.com/?rID=40248), który jest całkiem inny, na przykład CopyFiles jest ustawiony na DriverCopyFiles, a nie FakeModemCopyFileSection. Jakieś sugestie? –

+0

Użyliśmy usbser.sys jako sterownika dla wielu produktów wyprodukowanych przez moją firmę i nigdy nie znalazłem łatwego sposobu na uniknięcie "Kreatora znajdowania nowego sprzętu" w Windows XP. Jeśli tak, proszę dać mi znać. Dobrą wiadomością jest to, że przy użyciu tego samego pliku inf sterowniki mogą zostać zainstalowane automatycznie bez Kreatora w systemie Windows Vista i Windows 7, jeśli urządzenie jest podłączone po zainstalowaniu pliku inf. –

1

Nie mam pewności co do pytania o moc, ale jest to ciekawy sterownik CDC (lub myślę, że jest), więc można go użyć. Jeśli chodzi o kwestię zasilania, rozwiązanie z wieloma konfiguracjami jest prawdopodobnie dobre, nigdy nie spotkałem się z tym w pracy (mam analizator USB), ale w domu czasami, gdy mam 3 lub więcej różnych urządzeń, które wymagają zasilania z USB, otrzymałem nieudane wyliczenie. Domyślam się, że jest to wybór systemu operacyjnego, jeśli nie może zasilić nowego urządzenia, które odłączyło (rozsądny wybór, ponieważ nie może go zasilić). To moje przypuszczenia, a raczej sprawdzanie standardu USB.

1

Jeśli urządzenie zgłasza identyfikator urządzenia, który jest już obsługiwany przez system hosta, , to nie będzie potrzebować sterownika.

Być może trzeba podszyć się pod istniejący interfejs USB. Arkusze danych są łatwo dostępne. (Ale zdaje mi się, że już to wiedziałeś.)

Nie jestem pewien, czy system operacyjny obsłuży twój pomysł na wiele konfiguracji.

Ale dajcie mu łapkę, więc wszyscy wiemy!

+0

Należy pamiętać, że identyfikator urządzenia składa się z identyfikatora dostawcy i identyfikatora produktu, a właściciel tego identyfikatora dostawcy może nie doceniać przejęcia jego identyfikatora. W przypadku osobistych projekcji nie ma problemu, ale nie sprzedawaj takich urządzeń. – MSalters

+0

oczywiście, uzyskanie własnego identyfikatora nie jest tak drogie, i wszyscy będziemy chcieli kupić twoje cudowne urządzenie, prawda? –

1

Masz poprawne pytanie kierowcy. Gdy urządzenie jest podłączone i przechodzi przez proces wyliczeniowy, musi pozostać < 100mA. Host będzie przesłuchiwał i określił konfigurację (konfiguracje). Jeśli jest więcej niż jeden, który obsługuje różne poziomy mocy, sterownik musi zdecydować o wyborze odpowiedniej konfiguracji. Jeśli jest tylko wysoka moc i nie jest dostępna, to nie wyliczy urządzenia. Ogólnie rzecz biorąc, standardowy sterownik wykonujący CDC nie byłby świadomy różnych konfiguracji poziomu urządzeń, które byłyby możliwe, a więc wymagałby pewnego stopnia dostosowania w celu ich obsługi.

1

Jeśli urządzenie łączy się jako urządzenie USB CDC-ACM z hostem systemu Windows, pulpit systemu Windows zawiera już sterownik usbser.sys. Ale są pewne problemy w Windows Vista. Wystarczy inf, aby zainstalować usbser.sys na pulpicie. W przypadku WinCE nie masz sterownika i musisz napisać lub pobrać od dowolnego dostawcy zewnętrznego. Oto jeden

http://www.em.avant-garde-lab.com/Products.html

Jeśli urządzenie określa się jako własne zasilanie w deskryptorze urządzenia następnie gospodarz będzie polegać na zdolności do samodzielnego zasilania urządzenia. Możesz sprawdzić na usb.org po szczegóły. Dzięki.

Powiązane problemy