SAM7 - szybkość transmisji USB

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.

Michał

Reply to
invalid unparseable
Loading thread data ...

Użytkownik "Michał Lankosz" snipped-for-privacy@tlen.pl napisał w wiadomości news:h1vufq$q51$ snipped-for-privacy@srv.cyf-kr.edu.pl...

A jaka dlugosc bufora ? USB leci co 1ms, wiec trzeba pare KB jak sie chce szybko ..

J.

Reply to
J.F.

Dlaczego co 1ms??

M.

Reply to
AK

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.

Reply to
Piotr Pitlab Laskowski

AK pisze:

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.

Reply to
Adam Dybkowski

Piotr Pitlab Laskowski pisze:

Eee, jaki "automat"? Pisałeś w ogóle coś kiedyś związanego z USB dla AT91SAM7?

Reply to
Adam Dybkowski

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.

Michał

Reply to
invalid unparseable

Wszystkich (Low i Full Speed). Skoro bufor ma 64 bajty, osiągniesz 64000 bajtów na sekundę i ani bita więcej.

Pozdrowienia, MKi

Reply to
MKi

Oj cos kolego pokreciłes, w trybie interruptowym owszem, ale w trybie bulkowym to maksymalnie prawie 1MB/s (oczywiście w FS).

A CDC chodzi przeciez w bulk-ach.

M
Reply to
AK

MKi pisze:

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).
Reply to
Adam Dybkowski

Fakt, pokręciłem :(

Pozdrowienia, MKi

Reply to
MKi

MKi pisze:

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.

Reply to
Adam Dybkowski

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.