logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Jak zaprogramować Atmega8 do emulacji urządzenia USB, np. klawiatury?

Sinistra 10 Cze 2008 00:27 1755 8
  • #1 5230858
    Sinistra
    Poziom 14  
    Posty: 150
    Pomógł: 4
    Ocena: 3
    Mam na myśli sekwencję danych jaką wysyła komputer po podłączeniu do niego USB, bo ciekawi mnie jak zrobić urządzenie (atmega8) udawające coś innego, np. klawiaturę, albo pamięć, czyli podłączam atmege8 przez USART do USB, ona "rozmawia" z kompem i wychodzi na to, że komputer widzi to urządzenie, tak jak ja to zaprogramuję. Czy ktoś mógł by mi pomóc? Proszę.

    Sinistra


    P.S. ten temat utworsyłem tu, ponieważ w dziale komputery\hardware, podejrzewam że nikt się nie zjamuje programowaniem takich rzeczy.
  • #3 5231317
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    Ewidentnie nie wiesz na co sie porywasz. USB to bardzo skomplikowany protokol z kilkoma trybami transmisji nie to co zwykly UART. Jak przez UART to tylko przez przejsciowke RS232<->USB ale wtedy jest widziany jako wirtualny port szeregowy. Klawiatura to dla USB tzw urzadzenie klasy HID, akurat chyba najprostsza klasa urzadzen USB ale i tak wystarczajaco skomplikowana. Mozesz zajrzec tu https://www.elektroda.pl/rtvforum/topic1017251.html po kilka informacji.
  • #4 5233594
    Sinistra
    Poziom 14  
    Posty: 150
    Pomógł: 4
    Ocena: 3
    czyli jedyne wyjście to jest zrobić dodatkowy sterownik dla windowsa, który by obsłużył to "urządzenie"? To w jaki sposób można np. zrobić sterowny wyświetlacz LCD pod USB?
  • #5 5233914
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    protokół stosowany w usb nie jest zgodny ani z transmisją szeregową stosowaną w usart, ani z i2c ani z niczym innym, poprostu masz transmisję różnicową przy częstotliwości zegara 1.5MHz (low speed) lub 12MHz(full speed), transmisja NRZI z bit-stuffingiem. Jeśli do tego się nie dostosujesz, to komputer wogóle nie będzie rozumiał danych do niego wysyłanych. Wyżej masz protokoły do odpytywania urządzenia o deskryptory, transmisji danych etc. USB nie jest protokołem typu rs232, że ma się bezpośredni(prawie bezpośredni) dostęp do warstwy fizycznej i rób co chcesz. Jeśli miał bym porównywać, to jest on bliższy stosowi tcp/ip - raczej nie masz możliwości wystawiania konkretnego stanu, mozesz co najwyżej wysłać pakiety, a i tak to jest ograniczone, gdyż pakiety są formowane przez warstwy transportowe. Ty tylko dostarczasz dane, a cały mechanizm zajmuje się resztą. w tym przypadku układ musiał by się zajmować odbiorem i rozpakowywaniem ramek. Jeśli myślisz, że usb jest porównywalne do rs232, to zapomnij wogóle o usb bezpośrednio podpinanym do uC.
  • #6 5234605
    Sinistra
    Poziom 14  
    Posty: 150
    Pomógł: 4
    Ocena: 3
    Czyli faktycznie nie miałem pojęcia za co się biorę. To teraz wiem, że lepiej jest podłączy to przez MAX232 i wtedy do USB.
  • #8 5237023
    Sinistra
    Poziom 14  
    Posty: 150
    Pomógł: 4
    Ocena: 3
    no chyba tak będę musiał zrobić ,zakupić at90usb i szaleć, o ile cos w ogóle będę umiał napisać na niego. a tak sie zastanawiam, jak jest podłączona atmega8 w USBasp do usb? przecież tam nie ma max232 ani usb converterów, to jak to jest?
  • #9 5237169
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    Sinistra napisał:
    no chyba tak będę musiał zrobić ,zakupić at90usb i szaleć, o ile cos w ogóle będę umiał napisać na niego. a tak sie zastanawiam, jak jest podłączona atmega8 w USBasp do usb? przecież tam nie ma max232 ani usb converterów, to jak to jest?


    Programowa implementacja USB, niezly hardcore ;-).

Podsumowanie tematu

✨ Atmega8 nie jest przystosowana do bezpośredniej emulacji urządzeń USB, takich jak klawiatura HID, ze względu na złożoność protokołu USB, który różni się od transmisji szeregowej USART. USB wymaga transmisji różnicowej z zegarem 1.5 MHz (low speed) lub 12 MHz (full speed) oraz obsługi protokołu NRZI z bit-stuffingiem, co wymaga implementacji warstw protokołu USB, w tym obsługi deskryptorów i ramek danych. Próba emulacji USB przez USART wymagałaby dodatkowego sterownika na komputerze lub konwertera RS232-USB, który widziany jest jako wirtualny port szeregowy, a nie urządzenie HID. Alternatywą jest użycie mikrokontrolerów z natywnym wsparciem USB, np. At90usb1287, które umożliwiają łatwiejszą implementację urządzeń USB. Przykładem programowej implementacji USB jest projekt USBasp, gdzie Atmega8 komunikuje się z USB bez konwerterów, ale wymaga specjalnego oprogramowania i konfiguracji. Ogólnie, emulacja urządzenia USB na Atmega8 jest bardzo trudna i wymaga zaawansowanej wiedzy oraz dodatkowych komponentów lub wyboru mikrokontrolera z natywnym USB.
Wygenerowane przez model językowy.
REKLAMA