Skocz do zawartości

[C] stm32 usb endpoint


flasher

Pomocna odpowiedź

Nie napisałeś nic o samej transmisji - jakiej klasy jest urządzenie, czy znasz konfigurację endpointów, ani co rozumiesz przez "nadawanie danych" (w końcu na endpoint 0 zawsze coś jest nadawane podczas enumeracji).

Pozostaje mi odpowiedzieć tak ogólnie, jak zadałeś pytanie: podłącz analizator protokołu USB i zobacz.

Link do komentarza
Share on other sites

Usb fs, klasa vcp, trzy endpointy in/out.

Szukam rozwiazania jak po stronie mikrokontrolera wykryć na który z dostępnych endpointów robiona jest transmisja.

podłącz analizator protokołu USB i zobacz.
- po co?
Link do komentarza
Share on other sites

Wybacz, nie do końca zrozumiałem pytanie. Inna sprawa, że nadal nie rozumiem. Chcesz podłączyć 3 wirtualne porty szeregowe, czy masz typową implementację z 3 endpointami (IN, OUT, INT, nie liczę 0)?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Teoretycznie chciałbym mieć jeden port szeregowy (jedna wtyczka usb) i trzema różnymi endpointami in/out. Może faktycznie popełniam błąd bo powinienem wykryć trzy różne porty vcp?

Link do komentarza
Share on other sites

Mam wrażenie, że nieco inaczej rozumiemy pewne pojęcia i dlatego ciężko jest nam się dogadać. Endpoint jest zdefiniowany przez standard USB i ma specyficzne znaczenie. W największym skrócie: jeden endpoint nie wystarczy do utworzenia urządzenia vcp. Typowa konfiguracja to:

endpoint 0 - kontrolny, do enumeracji urządzenia, konfiguracji

endpoint 1 - bulk OUT, do odbierania danych

endpoint 2 - bulk IN, do wysyłania

endpont 3 - interrupt IN, do wysyłania powiadomień

Jak widać prosty port szeregowy składa się z trzech, albo właściwie z czterech endpointów. Dodanie kolejnego portu nie jest tak proste jak dodwania kolejnych endpointów.

Można oczywiście tworzyć bardzo skomplikowane urządzenia USB i jak najbardziej dałoby się utworzyć wiele wirtualnych portów szeregowych na jednym łączu, ale to znacznie trudniejsze - wymaga nie tylko modyfikacji deskryptorów urządzenia i interfejsów, ale też przygotowania własnego sterownika dla host-a (np. pod windows).

Wydaje mi się, że niepotrzebnie komplikujesz sobie życie. Skoro chcesz przesyłać dane między dwoma urządzeniami, utwórz jeden port COM - a przesyłając dane podawaj numer "wirtualnego" portu. Czyli zamiast tworzyć wiele portów COM, zostań przy jednym, a całe dzielenie danych zaimplementuj w protokole komunikacji szeregowej.

Link do komentarza
Share on other sites

Elvis,
Dzięki, tak jak napisałeś - jeden vcp ma cztery endpointy. Co w przypadku jak chciałbym zwiększyć liczbę endpointów IN/OUT dla jednego vcp? Jest to dobre rozwiązanie, czy może jednak tworzyć kolejne VCP z czterema endpointami?

Cały problem polega na - jak napisałem - jak wykryć transmisję danych do endpointa OUT po stronie mikrokontrolera? Które rozwiązanie jest lepsze? Jeden vcp i wiele endpointów? Czy wiele vcp z czterema endpoitami?

Dzięki!

Link do komentarza
Share on other sites

Nie wiem jak dokładnie znasz standard USB - proponuję najpierw trochę poczytać. Dodawanie endpointów nic nie da - przecież sterownik po stronie PC musi rozumieć do czego one służą. Jeśli chcesz mieć urządzenie z wieloma interfejsami, musisz zmienić deskryptor urządzenia i dopasować sterowniki. Nie robiłem czegoś takiego, więc szczegółów Ci nie podam.

Wiem za to, że znacznie łatwiej jest zostać przy standardowej implementacji z jednym interfejsem i nie kombinować. Ale jak jesteś odważny, to czemu nie.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.