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

Jak programowo zaimplementować USB w procesorze? Szukam przykładowego kodu

n01x 16 Wrz 2007 13:41 6994 38
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak programowo zaimplementować USB w procesorze AVR i skąd wziąć prosty przykładowy kod?

Najprościej nie pisać USB od zera, tylko skorzystać z gotowych przykładów i bibliotek: OBDEV AVR-USB, USBTiny albo noty AVR309 „USB to UART converter” Igora Cesko [#4289447][#4290017][#4320604][#4323979][#4298674] Do teorii i pełnej specyfikacji warto sięgnąć do dokumentacji USB na usb.org, bo implementacja obejmuje nie tylko pakiety, ale też stos, PnP i obsługę klas urządzeń [#4290017][#4291960] Programowe USB jest trudne, bo wymaga bardzo rygorystycznych czasów; w bibliotekach OBDEV kluczowe fragmenty są w ASM, a w BASCOM-ie bezpośrednie użycie jest problematyczne [#4290905][#4298674][#4320604] Jeśli chcesz tylko komunikacji z PC, łatwiejszym rozwiązaniem jest gotowy konwerter USB-RS232/FTDI zamiast własnego stosu USB [#4291443][#4291544][#4291960]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 4289086
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Witam,

    Czy ktoś z państwa próbował implementować USB w procesorze programowo?
    Chodzi mi konkretnie jakie informacje wysyla i potrzebuje dostać USB?
    Może ktoś ma kawałek gotowego kodu?

    Pozdrawiam
    n01x
  • REKLAMA
  • REKLAMA
  • #3 4289937
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Znam tą strone, jednak jestem bardzo słaby w języku C.

    Chodzi mi o to jakie zapytania wysyła USB i jak trzeba odpowiedzieć. Ktoś tu kiedys (bodajże Samuraj) pisał o prostym implementowaniu USB w procesorach AVR.

    Jak by ktoś miał kawałek kodu (może być w C ale z objaśnieniami) to bardzo prosze.
  • REKLAMA
  • #5 4290767
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    isteniej jakas możliwość zaimplementowania kodu do bibliotek z "obdev" w bascomie?
    ma ktoś jakies doświadzenia z tym związane?
  • #6 4290905
    firefox_PL
    Poziom 17  
    Posty: 235
    Pomógł: 21
    Ocena: 2
    trzeba by je przepisać z C do Bascom'a bo na pewno nie da się ich bezpośrednio wykorzystać, ale do tego trzeba znać C (a skoro się już zna wystarczająco dobrze C to po co używać Bascom'a :P )
  • #7 4291443
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Nie prościej wziąć procek ze sprzętowym stosem USB, albo jeszcze lepiej podłączyć do zwykłego procka układ tłumaczący z RS na USB (np. FTDI232)?
    Pozdrawiam
  • #8 4291487
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Ch.M. napisał:
    Nie prościej wziąć procek ze sprzętowym stosem USB, albo jeszcze lepiej podłączyć do zwykłego procka układ tłumaczący z RS na USB (np. FTDI232)?
    Pozdrawiam


    Pewnie, ze lepiej.
    Ale ile kosztuje procesror z usb? albo taki uklad FTD?
    Nie lepiej zaimplementować to w procesorze?

    btw. Ma ktos jakiś kurs (dla bardzo początkujących) języka C dla AVR?

    Pozdrawiam
    n01x
  • #9 4291544
    zipp
    Poziom 15  
    Posty: 77
    Pomógł: 6
    Ocena: 13
    Szkoda ci 14 zł na FT232R? Dokładasz do tego ze 2 kondensatorki i masz ładny konwerter RS na USB. Zaoszczędzony czas możesz wykorzystać na dopracowanie głównego układu.
  • #10 4291575
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    A jeszcze lepiej w tej samej cenie masz TUSB3410 i komunikacje w kilku standardach, miedzy innymi i2c. Z Twoją wiedzą upłyną tygodnie zanim zacznie coś Ci działać na ogromnym procku np. M128. jak już musisz zrobic wszystko na jednym procku to wybierz taki z obsługą USB, najtanszy bedzie kosztował tyle, co ATtiny 2313 i bedzie sie nazywał podobnie AT90S2313
  • #11 4291582
    firefox_PL
    Poziom 17  
    Posty: 235
    Pomógł: 21
    Ocena: 2
    Ch.M. napisał:
    bedzie sie nazywał podobnie AT90S2313
    ten akurat na pewno nie ma USB, bo to jest powiedzmy stara wersja ATtiny2313, chodziło ci pewnie o AT90USB.... najmniejszy to AT90USB82
  • #12 4291607
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Ch.M. napisał:
    Z Twoją wiedzą upłyną tygodnie zanim zacznie coś Ci działać


    Z moją wiedzą o procesorach jest ok. Programuje w bascomie i wcale nie uważam, że jest gorszy od C - kwestia przyzwyczajenia.

    Chodzi mi jedynie o pakiety informacji jakie wysyla USB po podłaczeniu i jakie potrzebuje otrzymać. W dokumentacjach jest to wysoce fachowo opisane i jest to malo przyswajalne.

    Dodano po 4 [minuty]:

    Gdzie można kupić AT90USB82?
  • #13 4291617
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Faktycznie rozpędziłem sie :)
    mea culpa.
    A jeśli chodzi o implementacje USB, to ciekawe ile linijek zajmuje taki prosty program do komunikacji ?
  • REKLAMA
  • #14 4291620
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Ch.M. napisał:
    A jeśli chodzi o implementacje USB, to ciekawe ile linijek zajmuje taki prosty program do komunikacji ?



    I jeszcze jak by ktoś podał taki prosty kod :)
  • #15 4291656
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Cytat:
    I jeszcze jak by ktoś podał taki prosty kod

    Nie wiem czy znajdziesz coś takiego. Wykonanie implementacji programowej USB nie jest proste i w dodatku dochodzą sterowniki do PC więc lepiej wykorzystać gotowe rozwiązania i niezastanawiać się jak to działa :wink:. I zapomnij że coś więcej zrobisz na tym uC który obsługuje USB, chyba że chcesz mieć problemy z połączeniem i transferem danych.
    Fakt jest taki że znajomość USB od strony fizycznej jest na rynku ceniona i raczej nikt nie będzie dzielił się tą znajomością bezpłatnie :wink:.
    Kod Osamy (zresztą wszystkie dostępne źrdóła) są dosyć mocno zagmatwane i rozszyfrowanie ich (a tym bardziej zrozumienie działania USB) jest dosyć trudne oraz pracochłonne i bez przeczytania (i zrozumienia) dokumetacji się nie obejdzie.

    Cytat:
    A jeśli chodzi o implementacje USB, to ciekawe ile linijek zajmuje taki prosty program do komunikacji

    Nieco ponad 2kB więc można sobie na "linijki" przeliczyć :wink: jak dasz rady.
  • #17 4291794
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Cena brutto: 42.70 zł.

    Prawie jak ATTiny .... :)
  • #18 4291820
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    No to jest akurat odpowiednik M128 droższy jedynie o 18zł. Tańszy byłby ARM7 np. AT91SAM7S64 za 24zł
  • #19 4291830
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Jadnak wiecej satysfakcji mailbym z napisania takiego kodu.
    Dzieki wszystkim za pomoc, jak ktos ma cos jeszcze do dodania (ewentualny kod :P) to bardzo prosze.

    Pozdrawiam
    n01x
  • #20 4291960
    Jdsoul
    Poziom 23  
    Posty: 501
    Pomógł: 47
    Ocena: 10
    Problem USB to problem klasy stosu, oraz uniwersalności portu jako takiego i szeregu funkcji PnP, które musisz w swoim procku zaimplementowć.

    USB jako port komunikacyjny klasowo podobny jest do komunikacji Ethernetowej :), Może troszkę prostszy.

    Pisanie tego typu drivera od podstaw w języku asm lub bascom jest możliwe , ale na pewno czasochłonne.

    Sam port USB dzieli się na kilka grup prędkości i klasy urządzeń, więc dobrze trzeba się zastanowić nad zastosowaniami i sposobem realizacji.
    Część urządzeń działa synchronicznie , a część asynchornicznie

    Polecam www.usb.org

    Uważam że jeśli masz ochotę tylko na "podłączenie" do PC to kabelek USB -RS232 z "gotowymi" sterownikami - na początek wystarczy - urządzenie klasy CDC i oki :), a koszty rzędu 9 zł. a ciągle masz do czynienia z komunikacją szeregową :)
  • #22 4298591
    Klima
    Poziom 31  
    Posty: 1535
    Pomógł: 112
    Ocena: 180
    n01x napisał:
    Wrcajaąc jeszcze do tematu, póbował ktos skompilować firmware z tego pliku: http://www.cesko.host.sk/downloads/USB%20to%20RS232%20Application%20Note.zip dla ATMega8?

    Wyskakują mi błędy w kodzie.


    Ale tam jest HEX dla ATmega8.

    Sory, po zastanowieniu doszedłem do wniosku, że będziesz chciał wpisać własne procedury i dlatego rekompilujesz kod. W takim wypadku - nie, nigdy nie próbowałem.
  • #23 4298602
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    i dlatego nie moza sobie tego skompilowac?
  • #24 4298674
    ksz
    Poziom 15  
    Posty: 113
    Pomógł: 12
    n01x napisał:
    Wrcajaąc jeszcze do tematu, póbował ktos skompilować firmware z tego pliku: http://www.cesko.host.sk/downloads/USB%20to%20RS232%20Application%20Note.zip dla ATMega8?

    Wyskakują mi błędy w kodzie.


    Tu jest - myślę - najprostsza implementacja USB dla AVR, w C:
    http://www.xs4all.nl/~dicks/avr/usbtiny/
    Za to ta od OBDEV wspiera więcej możliwości USB (np. HID)

    EDIT: Co do implementacji w BASCOM, wątpię, by się (u)dało. USB jest bardzo restrykcyjne jeśli chodzi o czasy, a Bascom czasem lubi 'wtrącić' jakieś rozkazy, przez co te czasy mogą się 'rozjechać' i być dla hosta nie do zaakceptowania. Dlatego kluczowe elementy biblioteki OBDEV są w ASM, by mieć pełną kontrolę nad działaniem uC.
  • #25 4314898
    Jdsoul
    Poziom 23  
    Posty: 501
    Pomógł: 47
    Ocena: 10
    Sorki że wracam do swojego wątku :)

    USB nie jest niemożliwe do zastoswania i jego implementacja też nie jest niczym bolesnym, ale narzuca w "uniwersalnym" kontrolerze pewne szczególne ograniczenia.

    Biblioteka zabrania stosowania przerwań oraz zabiera timery, i narzuca duże wymagania w zakresie obsługi USB , tak więc trzeba te wszystkie "drobiazgi" dopasować do siebie :)

    Bardzo ciekawy task zawarł kolega mirekk36 i tam wszystko jest pokazane, z tym że u kolegi mirka Atmega jest "poświęcona" na sam konwerter USB->RS232 :)

    https://www.elektroda.pl/rtvforum/topic827115.html
  • #26 4315076
    ksz
    Poziom 15  
    Posty: 113
    Pomógł: 12
    Jdsoul napisał:
    (...)
    Biblioteka zabrania stosowania przerwań oraz zabiera timery
    (...)

    Stosowałem u siebie przerwanie od zakończenia odbioru danych przez UART i działa bez problemu.
    Myślę, że timerów też można by używać, ale z umiarem :)
    Nie wolno z tym wszystkim przesadzić, szczególnie implementując urządzenie klasy HID. Bo przy urządzeniu nie-HID, gdzie ono decyduje, kiedy jest transmisja po USB, można na tym uC zrobić jeszcze sporo (odsyłam do wyżej podanego przeze mnie linku do USBTiny i jego przykładów).
  • #27 4320573
    Jdsoul
    Poziom 23  
    Posty: 501
    Pomógł: 47
    Ocena: 10
    Generalnie chodziło mi o przerwania dłuższe w obsłudze :) ale zgadzam się że obsługa portu szeregowego jest możliwa , zabrane są niestety wejści INT0 i INT1 :( , ale i tak AVR ma sporo innych zabawek na pokładzie !!!
  • #28 4320604
    Konto nie istnieje
    Poziom 1  
  • #29 4321548
    ksz
    Poziom 15  
    Posty: 113
    Pomógł: 12
    Jdsoul napisał:
    (...) zabrane są niestety wejści INT0 i INT1 :(

    chyba tylko jedno z nich..? Druga linia USB nie musi być na wejściu z przerwaniem (niestety teraz już nie pamiętam, która z linii USB wymaga przerwania, ale jestem pewien że tylko jedna)

    atom1477 napisał:
    Igor Cesko bardzo dawno temu stworzył implementację USB na AT90S2313 i na ATMega8. Obie oczywiście prawie się nie różnią. Jest ona opisana w nocie AVR903 "USB to UART converter". Była to chyba pierwsza programowa implementacja. Niestety jest tam bardzo uproszczony opis USB. Ale ta implementacja łatwo poddaje się modyfikacjom.
    Niestety nigdzie w tej nocie nie pisze czy zastosowany algorytm i kod programu jest freeware. Jak go sobie przerobię to mogę go legalnie wykorzystywać w projektach komercyjnych?

    Wydaje mi się (!!), że skoro jest w nocie, to jest freeware do wszelkich zastosowań..?
    AVR-USB ma podwójne licencjonowanie, GPL oraz, jeśli nie chcesz się dzielić swoją pracą na GPL, komercyjna licencja..
  • #30 4323771
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy programowej implementacji USB w mikrokontrolerach, głównie AVR, oraz poszukiwania przykładowego kodu i informacji o protokole USB, w tym pakietach danych wysyłanych i odbieranych przez urządzenie USB. Wskazano na bibliotekę AVR-USB (obdev.at), która oferuje przykłady i częściowo implementację w C i asemblerze, jednak jej zrozumienie wymaga dobrej znajomości języka C i dokumentacji USB. Poruszono kwestie trudności implementacji USB programowo ze względu na restrykcyjne wymagania czasowe i konieczność obsługi stosu USB, co często wymaga użycia asemblera dla krytycznych fragmentów kodu. Zasugerowano alternatywę w postaci użycia mikrokontrolerów ze sprzętowym kontrolerem USB lub konwerterów USB-RS232 (np. FT232R, TUSB3410), które znacznie upraszczają projekt i obniżają koszty. Wskazano modele mikrokontrolerów z USB, takie jak AT90USB82, AT90USB2313, ATMega8, ATMega16, ATMega32 oraz ARM7 (AT91SAM7S64). Poruszono też kwestie licencjonowania biblioteki AVR-USB, która jest dostępna na licencji GPL lub komercyjnej, co ma znaczenie przy produkcji wielu urządzeń z różnymi PID/VID. Wskazano na dokumentację USB (usb.org) jako podstawowe źródło wiedzy, choć trudne do przyswojenia. W dyskusji pojawiły się także przykłady implementacji USB do UART (np. AVR309) oraz uwagi o ograniczeniach w używaniu Bascoma do implementacji USB ze względu na precyzyjne wymagania czasowe. Podsumowując, implementacja USB programowo w mikrokontrolerze jest możliwa, ale złożona i czasochłonna, dlatego często rekomenduje się użycie gotowych rozwiązań sprzętowych lub bibliotek z asemblerowymi optymalizacjami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA