Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Multimetr FlukeMultimetr Fluke
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

USB w warstwie najniższej - Poszukiwanie brakujących informacji

05 May 2013 23:58 3375 8
  • Level 17  
    Witam, pracuję nad interfejsem USB. Zgromadziłem różne materiały na ten temat. Moim celem jest dokładniejsze poznanie USB na najniższym poziomie w celu modyfikacji gotowych kodów dla mikrokontrolerów nie wyposażonych w USB.

    Więc proszę o nie odpisywanie typu: ... po co się w to bawić jak można skorzystać np z procka AT90USB162.

    Zabrałem sie za doświadczenia z magistralą z wykorzystaniem poniżej zamieszczonego schematu, zaczerpnięty jest on z noty aplikacyjnej o numerze AVR309
    (zamiast stabilizatora podłączyłem diodę LED i w ten sposób uzyskałem napięcie 3,2V)

    USB w warstwie najniższej - Poszukiwanie brakujących informacji

    Pierwszym moim celem jest sprawdzenie co sie dzieje na magistrali USB zaraz po podłączeniu urządzenia. Zrobiłem więc tak - wyciągałem z podstawki DIP mikrokontroler ATTINY2313 i podłączyłem się z oscyloskopem do linii magistralowych D+ oraz D-
    Od strony Hosta USB (komputera) wygląda to tak ze w momencie podłączenia mojego urządzenia zauważa on podciągnięcie linii D- do plusa zasilania i reaguje na tę sytuację co zarejestrowałem oscyloskopem.

    Otrzymałem poniższe przebiegi.
    Na pierwszym oznaczyłem charakterystyczne elementy transmisji, które nie w pełni rozumiem
    kolorem czerwonym oznaczony jest przebieg linii D-
    w kolorze niebieskim widoczny przebieg dla linii D+

    1 - podłączenie kabla USB do komputera i mojego urządzenia, pojawia się napięcie na liniach D+ i D- (D- ściągnięte do masy w obwodzie sterownika HOSTA)
    2 - nie wiem co to jest - występuje zawsze przy każdym podłączeniu do USB
    3 - stan IDLE -
    4 - RESET - trwa minimum 10ms, taki RESET wystepuje 3razy. Jest przed kazdym wysłaniem danych z HOSTA (komputera) do urządzenia, piszą ze reset w tych momentach sie pojawia wtedy gdy urządzenie nie jest jeszcze skonfigurowane.
    5 - TRANSMISJA - przesłanie pakietu danych - mamy takich 3
    6 - na lini D- regularnie w odstępie 1ms pojawia się impuls a właściwie ściągnięcie linii D- na czas około 1,2us do masy - NIE WIEM CO TO, nigdzie nie znalazłem o tym informacji tak jakby tylko u mnie to coś występowało.


    USB w warstwie najniższej - Poszukiwanie brakujących informacji

    RESET który występuje przed wysłaniem danych do nie skonfigurowanego urzadzenia, trwa około 20ms jak widać poniżej przy dokładniejszej obserwacji. Polega on na ściągnięciu obu linii do potencjału poniżej 0,8V(według dokumentacji), na wykresie widać ze ściąga do masy

    USB w warstwie najniższej - Poszukiwanie brakujących informacji

    W odstępach 1ms na linii D- pojawia się to coś - ten impuls który widać poniżej na przebiegu a o którym nie mogę znaleźć sensownych informacji.

    USB w warstwie najniższej - Poszukiwanie brakujących informacji

    Wydaje mi się że ten impuls pojawia się też przed samym przesłaniem danych jeszcze przed tym co piszą w różnych opisach tzn przed SOP - Start Of Packet czyli przed wyjściem magistrali ze stanu IDLE do stanu "K" (na magistrali w trakcie transmisji bitów pojawia się różnicowy stan K lub J)

    Stan "K" poniżej na rysunku: jest to przejście linii D+ (niebieski przebieg) ze stanu niskiego do wysokiego
    Na przebiegu poniżej widać trzy takie charakterystyczne impulsy o które się pytam.
    Pierwszy na samym początku, drugi po przesłaniu pierwszych 4bajtówi (SOF - Start Of Frame) i ostatni na samym końcu przed ponownym wejsciem magistrali w stan IDLE.


    USB w warstwie najniższej - Poszukiwanie brakujących informacji


    Moje pierwsze pytanie dotyczy właśnie tych charakterystycznych impulsów na linii D-
    Co to są za impulsy?
    Zachęcam do udziału w poszukiwaniu odpowiedzi i wspólnej nauki rozgryzania magistrali USB :)
  • Multimetr FlukeMultimetr Fluke
  • Level 12  
    bartosz.tarnowski wrote:
    W odstępach 1ms na linii D- pojawia się to coś - ten impuls który widać poniżej na przebiegu a o którym nie mogę znaleźć sensownych informacji.

    Nie zajmuję się USB od niskiego poziomu, programuję sporadycznie używając gotowych stosów. Z tego co pamiętam, urządzenia low speed oraz full speed odpytywane są przez hosta właśnie co jedną milisekundę (urządzenia High speed odpytywane są co 125uS).

    http://www.usbmadesimple.co.uk/ums_6.htm#frames_and_microframes
  • Multimetr FlukeMultimetr Fluke
  • Level 1  
  • Level 17  
    Prosty przykład wykorzystania programowego USB to karta przekaźnikowa sterowana przez USB, do takiego zadania wystarczy ATTINY2313 lub mniejszy.

    Ostatnio budowałem urządzenie którego PCB miało wymiary 43x38. Na jego pokładzie było 6układów scalonych, złącze JTAG 10 pinowe, 3 rezonatory kwarcowe i bateria podtrzymująca CR2032. Jeden scalak i rezonator obsługujące USB zajmowały mi niepotrzebnie miejsce bo procek ma nadmiar pamięci programu. Przy serii 100 sztuk ma to znaczenie. Można kupić procka z wbudowanym USB np ATMEGA32U4 za 30zł a można kupić ATMEGA8 za 6zł tak więc przy 100 sztukach mamy oszczędność 2400zł.
    Oczywiście można też wykorzystać procki STM32, maja USB i są tanie...
    Ale w temacie tego postu nie chodzi o sprzęt tylko o USB.
  • Level 1  
  • Level 12  
    Czytam ten wątek i nie mogłem się powstrzymać od komentarza:

    Z konfiguracji sprzętu widzę, że urządzenie pracuje w trybie Low Speed(LS). W zasadzie tylko w tym trybie jest możliwe formowanie ramki USB przez stosunkowo szybki procesor co po raz pierwszy pokazał kilka lat temu Igor.

    W trybie LS host musi zapewnić odpowiedni ruch na magistrali USB gdy nie ma transmisji w danej chwili, do tego wykorzystuje stroby keep-alive - o które kolega twórca tego wątku pyta.

    Ktoś wspomniał o Eye-diagramie - prawie nigdy nie jest on konieczny w trybie LS, to nie te prędkości...

    W tak prostym interfejsie nie ma potrzeby sterowania pullup-em do VBUS gdyż z założenia nie ma potrzeby rekonfiguracji.

    Jest otwarte pytanie o sens takiego interfejsu - myślę, że patrząc z poziomu nauki, edukacji jak najbardziej...

    Czasem jest przydatne bardzo proste urządzenie np. symulujące klawiaturę i wysyłające jakąś komendę do maszyny w postaci kilku klawiszy ... :)
    Lub np. symulator kliknięcia myszy.
    Jak najbardziej można użyć do tego procesor w cenie mniejszej od jednego dolara.
  • User removed account  
  • Level 17  
    Dzięki za linki. brakowało mi informacji o Keep-alive, na ogół w materiałach pisze się że host wysyła w równych odstępach czasu SOF tylko że dla urządzeń Low-Speed tego nie robi. Spodziewałem się SOF a się nie pojawiały, przychodziły natomiast Keep-alive o których nie wiedziałem. Myslałem że tak samo jest dla Low-Speed i Full-Speed

    Pracuję jako elektronik/embedded programer i choćby dziś w tej chwili walczę z problemem w którym dobra znajomość od podstaw sprzętu i sposobu zachowania się go w zależności od softu i trybu w jakim pracuje decyduje o powodzeniu przedsięwzięcia. Muszę uruchomić jeszcze jedną sztukę nowego urządzenia która nie działa z niewiadomego powodu, zwarć nie ma, przerw nie ma, wszystko działa poza kartą SD.

    Przekładając mój obecny problem z kartą SD na podobny z USB mogłoby to wyglądać tak:
    PRZYKŁADOWO: Mamy wiele urządzeń pełniących te same zadanie, starsze wersje pracowały w Low-Speed a nowsze w Full-Speed, wersji było 6, co gorsza wszystko znalazło się w jednym pudle w którym znajdują się uszkodzone, niepewne i dobre urządzenia z odzysku, Nowych urządzeń nie ma w magazynie bo żyjemy w Polsce no i trzeba wykorzystać to co mamy bo termin realizacji był na wczoraj. Urządzenia są zalane żywicą - mamy po prostu pudełeczka z niewiadomą zawartością. Urządzeń nie jesteśmy w stanie przetestować w docelowym systemie w którym mają pracować a jedynie na swoim biurku z komputerem. Musimy znaleźć jedno dobre Low-speed lub Full-speed zależnie od docelowego systemu w którym ma pracować. Decyzję o tym że urządzenie jest dobre podejmujemy w oparciu o to że komunikacja USB jest OK. Czyli szukamy urządzenie ze sprawnym USB które pracuje jako LS lub FS.

    Znając co nieco sposób komunikacji jesteśmy w stanie to zrobić tylko oscyloskopem bo sprawdzimy czy przychodzą Keep-Alive czy SOF.
  • Helpful post
    Level 12  
    Powiem tak:
    Aby sprawdzić czy dane urządzenie pracuje w LS czy FS nie trzeba mieć oscyloskopu, nie trzeba sprawdzać SOFy czy Keepy, wystarczy woltomierz.

    Urządzenie LS ma D- podciągany, a FS D+ podciągany do VBUS rezystorem 1.5k