Użyłem kitu Olimex z SAM7X256. Lekko przerobiłem przykład usb-device-cdc-serial-project-at91sam7x-ek pobrany ze strony Atmela. Wywaliłem obsługę UARTa i wysyłam w kółko usartBuffers[0]. Pomiar po stronie PC wykazał prędkość transmisji na poziomie 450kB/s danych użytecznych.
Czy to jest typowe osiągnięcie? Spodziewałem się minimum 600kB/s.
Kolejne ramki protokołu USB są wysyłane co 1ms. Jeżeli wysyła się dane małymi paczkami to dane nie wypełniają calego czasu łacza międzyz kolejnymi ramkami, do teog dochodzą jeszcze jakies sprawy protokolarne i w efekcie nie całe pasmo jest zajete. Żeby wyciągnać dużą przepustowość trzeba wpychać duze ilości danych na raz. Wtedy automat podzieli to na x pełnych ramek i wtedy wydajność będzie największa z możliwych ale i tak nie zbliżysz się do teoretycznej przepustowości.
Taki jest okres najczęstszego odpytywania urządzeń. Jeżeli chcesz częściej, pomoże przejście na HiSpeed. Ale to już nie z tym ARMem. Obejrzyj nową atmelową serię AT91SAM3U.
Użytkownik "J.F." <jfox snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:h202k5$379$ snipped-for-privacy@news.onet.pl...
Z pewnych zawiłości programu odczytuję, że chyba 64 bajty. 1ms dotyczy też urządzeń CDC, czy HID? Jeszcze nie wgryzałem się w USB więc mogę pisać jakieś głupoty.
A nie. W transferach "bulk" można sklejać wiele 64-bajtowych pakietów i wyciągnąć oczywiście więcej niż 64000B/s.
BTW: Wszystkie urządzenia USB zgłaszają do hosta żądany okres odpytywania. 1ms to najkrótszy okres dla urządzeń FullSpeed (max.
255ms). W przypadku LowSpeed najkrótszy czas to 10ms (max. również
255ms). Urządzenia HighSpeed mogą zarządać odpytywania co 125us * 2^n, co daje minimalny okres 125us. Przy czym host ma możliwość (jeżeli tak mu pasuje) odpytywania z krótszym okresem, niż zażądano. Mówi o tym rozdział 5.7.4 specyfikacji USB 2.0:
formatting link
W USB 3.0 dopiero robi się poezja z tymi czasami. Tak że jeżeli komuś się spieszy z transferem ;-) to polecam od razu rzeźbienie w 3.0. Kontroler NEC'a już można kupić (na PCI Express).
BTW: Tak przy okazji - przy prędkości LowSpeed są możliwe tylko transfery kontrolne i interrupt. Nie ma bulk ani izochronicznych tak więc można zapomnieć o normalnym CDC.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.