Skocz do zawartości

Pomocna odpowiedź

Napisano

Cześć,
Mam pytanie - czy ktoś orientuje się jak wykryć na który endpoint jest robiona transmisja? Mam trzy endpointy i chciałbym wykryć na który z nich nadawane są dane...

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.

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?

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)?

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?

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.

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!

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

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...