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

Xmega32a4u-au: Jak skonfigurować USB low speed (1.5MHz)?

lupin22 29 Wrz 2017 19:12 690 2
REKLAMA
  • #1 16728379
    lupin22
    Poziom 10  
    Witam,

    w ramach przygotowania płytki do testów emc i czytania różnych publikacji w internecie dość mocno się zaniepokoiłem. Jest mnóstwo artykułów, które nie zawsze podają zgodne informacje, a ogólny wydźwięk jest taki, że każdy ruch może być ostatnim, nawet podążając za "dobrymi" wskazówkami z innych artykułów.

    Tak, czy owak, na mojej płytce oprócz SPI taktowanego z prędkością 3Mhz jedynym sygnałem o wysokiej częstotliwości jest właśnie sygnał USB full speed, czyli 12MHz.

    Pomyślałem więc, że może warto byłoby zainteresować się USB low speed (1.5MHz), bo taka prędkość transmisji danych jest w zupełności dla mnie wystarczająca, a na pewno dużo mniej problemów z emisją może być przy takiej częstotliwości.

    Niestety internet milczy na temat zastosowania USB low speed w procesorach xmega. Datasheet poinformował mnie tylko, który bit można ustawić w rejestrze, żeby korzystać z mniejszej prędkości i nic więcej na ten temat.

    Spróbowałem więc po prostu w pliku conf_usb.h dodać linię
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    co powoduje, że do częstotliwości 48Mhz generowanej za pomocą oscylatora 32Mhz stosowany jest dzielnik 6. Komputer rozpoznaje urządzenie, niestety nie może się z nim połączyć. Podejrzewam więc, że pewnie chodzi o jakiś problem z zegarem, nie wiem tylko zupełnie, jaki. Być może wskazówką jest, że:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    w pliku usb_device.c

    Próbowałem więc w pliku conf_clock.h zmienić linię
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    na
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    żeby skalibrować zegar według wewnętrznego oscylatora, ale bez skutku.

    Dodam tylko, że w projekcie odtwarzany jest też dźwięk i w obecnym momencie po podłączeniu urządzenia do komputera zmienia się jego ton (co wynika zapewne z kalibracji właśnie za pomocą USB Start Of Frame i efekt jest (przynajmniej dla ucha) taki sam w przypadku full speed, jak i low speed. Więc może to nie w zegarze problem, a coś innego stoi na przeszkodzie?

    EDIT: Aha i jeszcze pytanie, czy usb low speed oprócz mniejszego transferu niesie jakieś dodatkowe ograniczenia? Np problemy z kompatybilnością?
  • REKLAMA
  • Pomocny post
    #2 16730176
    tmf
    VIP Zasłużony dla elektroda
    Nie wiem jak to wygląda w bibliotece Atmela, przypuszczam, że niekoniecznie low speed jest zaimplementowane. W każdym razie jedyne co trzeba zrobić to wyzerować USB_SPEED_bm w CTRLA i skonfigurować zegar USB na 6 MHz. Z tego co mi się kojarzy to low speed ma spore ograniczenia i praktycznie do niczego się nie nadaje (jakieś małe transfery z urządzeń typu HID co najwyżej). Ramki co 10ms, 8 bajtowe endpointy, czyli masz transfer 800 bajtów/s :)
  • #3 16731259
    lupin22
    Poziom 10  
    No 800 bajtów/s to trochę za mało. Myślałem, że low speed będzie po prostu tylko 8 razy wolniejszy. W tej chwili (przy full speed) ogranicza mnie zapis do zewnętrznej pamięci flash, a nie transfer usb.
REKLAMA