Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32] USB OTG Host HID biblioteka

DosinskY 16 Mar 2011 15:33 3570 6
  • #1 16 Mar 2011 15:33
    DosinskY
    Poziom 18  

    Witam,

    Czy ktoś z Was uruchamiał bibliotekę ST implementująca obsługę urządzeń klasy HID w linii Connectivity? Mam na myśli bibliotekę opisaną w dokumencie UM1021. Warto się nią zainteresować czy lepiej opracować wszystko od podstaw (czas jednak gra tutaj kluczową rolę)? Da się tą bibliotekę pogodzić z rozbudowanym kodem "właściwym"? Czy napotkaliście na problemy z obsługą myszy?

    Link do UM1021

    Pozdrawiam
    Dosinsky

    0 6
  • #2 28 Mar 2011 09:38
    DosinskY
    Poziom 18  

    Ok. Skoro nikt nie działał z klasą HID to może ktoś ruszał klasę MSC? Byłbym wdzięczny za nawet ogólne uwagi / spostrzeżenia związane z praktycznym uruchamianiem OTG w STM32. Zastanawiam się dlaczego w CMSIS nie zdefiniowano rejestrów OTG... Na razie czuję się jak R. Crusoe :)

    Pozdrawiam

    0
  • Pomocny post
    #3 29 Mar 2011 22:34
    fantom
    Poziom 31  

    DosinskY napisał:
    Zastanawiam się dlaczego w CMSIS nie zdefiniowano rejestrów OTG... Na razie czuję się jak R. Crusoe :)
    Pozdrawiam


    Cytat z dokumentu

    Cytat:
    The library stands on top of the STM32F105/7 USB OTG peripheral low-level driver


    Nie rozumiem z czym masz problem. Jest biblioteka, jest dokumentacja nic tylko uzywac. Jak widac zaimplementowane sa tylko 2 najprostsze klasy urzadzen USB ale zapewne dla wiekszosci osob wystarczajace. Jak chcesz opracowywac od podstaw to zycze powodzenia. Implementacja hosta USB to nie lada wyczyn. Swoja droga nie wiadomo nawet co ta biblioteka implementuje OHCI czy UHCI ?

    0
  • #4 30 Mar 2011 07:57
    DosinskY
    Poziom 18  

    Dzięki za odzew. Rozumiem, że nie miałeś praktycznego kontaktu z tą biblioteką.

    Cytat:
    Jak chcesz opracowywac od podstaw to zycze powodzenia

    W złożoność tematu nie wątpię i właśnie dlatego zainteresowałem się ta biblioteką. Skoro ST nie definiuje rejestrów w CMSIS, tylko w "low level driver" używa makr itp. do zapisu tych rejestrów, to rozumiem, że delikatnie sugeruje użytkownikom, że droga bez biblioteki jest drogą złą. Mimo wszystko jest to dla mnie nieco dziwne.

    Cytat:
    Swoja droga nie wiadomo nawet co ta biblioteka implementuje OHCI czy UHCI ?

    Jeszcze chwila i zaczniemy się rozumieć :) Niby jest biblioteka i niby jest dokumentacja a tak na prawdę nic o niej nie wiadomo. Zanim ją skompilowałem musiałem trochę powalczyć. Biblioteka sprawia wrażenie jakby przygotowano ją wyłącznie na eval board-y i "bez modyfikacji" wymaga ona dołączania co najmniej dziwnych plików. Pytanie po co tą bibliotekę napisano - żeby demonstrować możliwości na EVB, czy żeby z niej korzystać przy normalnych projektach?
    Przez ostatni czas nie siedziałem z założonymi rękami i wrzuciłem ją na proca. Klasa HID działa ale nie do końca - urządzenia są enumerowane ale nie można od nich odebrać danych (chyba nie ma sensu wgłębiać się w szczegóły). Klasy MSC nie testowałem jeszcze.
    Żeby teraz dowiedzieć się, dlaczego biblioteka nie działa poprawnie i tak muszę rozgryźć jak to wszystko funkcjonuje od podstaw....czyli życz mi powodzenia :)

    0
  • Pomocny post
    #5 30 Mar 2011 08:10
    fantom
    Poziom 31  

    Rzuc kawalkiem swojego kodu to sprobuje zerknac, urzadzenia USB moga wymagac pewnych szczegolnych operacji jak chociazby wybranie konfiguracji.

    0
  • #6 30 Mar 2011 08:39
    DosinskY
    Poziom 18  

    Tak sobie myślę, że w zasadzie o to czy to jest OHCI czy UHCI czy Custom Host Controller to za bardzo martwić się w tej bibliotece nie trzeba. Skoro jest to biblioteka ST to musi być dopasowana do sprzętu host-a w procu ST.

    Kodem za bardzo nie ma co rzucać bo jest to kod całkowicie standardowy - prawie kropka w kropkę przykład ST. Zmieniony tylko proc i funkcje call back (na własne, nie wspierające EVB). Program jest ściśle testowy i nie realizuje nic prócz USB HID.

    Code:

    int main(void)
    {
       // tutaj konfiguracje zegara i peryferiow
       USBH_Init(&USB_OTG_FS_dev, &HID_cb, &USR_Callbacks);
       while (1)
       {
          USBH_Process();
       }
    }

    Zgodnie z dokumentacją od biblioteki i przykładami jest to cały kod użytkownika (pomijając call back-i) niezbędny do komunikacji z HID Devices. Biblioteka wywala się w maszynie stanu HID. Gdybyś był zainteresowany szczegółami to pisz na prv - nie będziemy "zaśmiecali" głównego wątku ;)

    Jeżeli chodzi o wybór konfiguracji to nie ma takowego. Z góry deklaruje się (inicjalizując host) jaką klasę będziemy obsługiwali. Rodzaj urządzenia HID (mysz, klawiatura) jest rozpoznawany automatycznie przez bibliotekę na podstawie danych uzyskanych podczas enumeracji.

    0
  • #7 31 Mar 2011 14:18
    DosinskY
    Poziom 18  

    Problem rozwiązany dzięki wiedzy i uprzejmości użytkownika fantom. Przyczyną problemów było objęcie komentarzem jednej z linii biblioteki podczas jej uruchamiania (i brak przywrócenia stanu pierwotnego, za dużo masła, skleroza).

    0