USB, czasem nie wykrywa urzadzenia

Cześć. Jest sobie urządzonko na STM32F3 w którym ktoś zrobił port USB w ten sposób, że linia DP jest cały czas podciągnięta do +3.3V rezystorem 1.5k. Urządzenie jest oczywiście "self powered" . Przeważnie to działa, ale problem jest podczas restartu tego urządzenia z poziomu oprogramowania, bo raz na kilkanaście restartów Windows go nie wykrywa. Zgaduję że problemem jest ten na stałe podłączony pull-upie. I teraz pytanie. Jaki jest mechanizm, że zwykle to działa tj. windows jest w stanie zrobić enumerację nawet jeśli nie było odłączenia/podłączenia pull-up-a i czemu czasem nie działa. Kombinuję, żeby przy starcie na chwilę wymusić poziom niski na DP, ale pewnie jest ryzyko uszkodzenia albo portu USB albo mikrokontrolera, jeżeli host będzie coś nadawał akurat?

A.

Reply to
Artur
Loading thread data ...

W dniu 05.06.2023 o 18:54, Artur pisze:

Na 99% opisane jest to w punkcie 7.1.5.1 z pliku usb_20.pdf znajdującego się w usb_20_20230224.zip ze strony

formatting link
W skrócie - enumeracja następuje po wykryciu lub zaniku pullup na D+ lub D-.

Jeżeli chcesz zrobić to dynamicznie, dodaj tam coś co będzie odpinało pullupa. Na ile czasu ? Tego nie wiem. 100 ms pewnie wystarczy.

Pozdrawiam

Adam Górski

Reply to
Adam Górski

poniedziałek, 5 czerwca 2023 o 19:27:48 UTC+2 Adam Górski napisał(a):

Tylko, ze ten pull-up jest na stale podpiety do 3.3V, nie da sie go odpiac :) Jedyne, co mozna zrobic to sciagnac linie DP do masy konfigurujac na chwile ten pin jako zwykle wyjscie. Zastanawiam sie jak bardzo jest to ryzykowne.

Reply to
AW

poniedziałek, 5 czerwca 2023 o 19:27:48 UTC+2 Adam Górski napisał(a):

Ten pull-up jest podpięty na stałe do 3.3V. Jedyna opcja to skonfigurować pin DP jako wyjście i ustawić 0 na kilkadziesiąt ms, a później zainicjować USB. Pytanie tylko jak bardzo jest to ryzykowne. No i czemu przeważnie działa nawet jeśli host nie dostaje informacji w standardowy sposób, że coś zostało odłączone i podłączone?

Reply to
Artur

W dniu 05.06.2023 o 19:57, AW pisze:

Dokumentacja od STM32F niestety nie wspomina nic na temat ograniczania prądu. Jedynie , że prąd max dla portu I/O jest w okolicy 25mA. Fajnie by było gdyby otwarcie napisali czy są tam źródła prądowe szeregowo z mosfetami wyjściowymi. Lub może szeregowe rezystory wyjściowe.

Nie martwił bym się jednak specjalnie tym zwieraniem D+ czy D- do masy. Sygnały na D+ i D- są na poziomie 400mV względem masy w czasie transmisji. Lub jak kto woli +/-400mV różnicowo. Razem z rezystorami szeregowymi dopasowującymi rzędu 22-33R na liniach D+ i D- skutecznie ograniczy ten prąd w okolicy < 20mA.

Zatem zwierać i się nie przejmować.

pozdrawiam

Adam Górski

Reply to
Adam Górski

W dniu 05.06.2023 o 20:45, Artur pisze:

Zobacz jak działa wykrywanie urządzenia.

To jednak 7.1.7.3 Connect and Disconnect Signaling

Adam

Reply to
Adam Górski

poniedziałek, 5 czerwca 2023 o 20:58:57 UTC+2 Adam Górski napisał(a):

Spędziłem trochę czasu z analizatorem stanów logicznych bo mnie męczyło czemu to jednak przeważnie działa, a nie powinno. Tzn. przeważnie po restarcie urządzenia jest ono wykrywane przez windows tj. znika i pojawia się ponownie port COM. Okazuje się, że podczas uruchamiania sterownika USB w tym urządzeniu, po zainicjalizowaniu gpio przez chwilę tj. 4us na linii DP wymuszane jest "0". Windowsowy sterownik przeważnie ten krótki impuls wykrywa i inicjalizuje ponownie połączenie. Linuxowy sterownik ten impuls zawsze ignoruje i w 100% przypadków po restarcie port szeregowy nie działa. Co ciekawe dokumentacja USB mówi, że 0 na obu liniach przez czas dłuższy niż 2.5us to stan DISCONNECT. Czyli nawet ten krótki impuls powinien być zawsze wykrywany jako rozłączenie urządzenia. Artur

Reply to
Artur

W dniu 09.06.2023 o 23:41, Artur pisze:

I tak bywa.

Adam

Reply to
Adam Górski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.