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ę
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:
w pliku usb_device.c
Próbowałem więc w pliku conf_clock.h zmienić linię
na
ż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ą?
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++
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++
w pliku usb_device.c
Próbowałem więc w pliku conf_clock.h zmienić linię
Kod: C / C++
na
Kod: C / C++
ż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ą?