[USB 2.0 Full Speed] Prędkość dla małych paczek.

0

Witam,

Wyczytałem że do przesyłania małych ilości danych najlepiej użyć "Interrupt Transfers".
Potrzebuję wysyłać pakiet który zajmuje 2B z maksymalną prędkością jaką się da. Prędkość jaką uzyskałem to 2000B/s, na oscyloskopie zaobserwowałem że pakiety wysyłane są co 1ms niezależnie od ich wielkości(porównałem 1B oraz 40B).
Minimalna prędkość jaka mnie zadowoli to ok 32KB/s, lecz możliwe jest uzyskanie takiej prędkości w USB 2.0 Full Speed?
W standardzie tym tokeny SOF wysyłane są właśnie co 1ms.... myślałem że "Interrupt Transfers" jakoś lepiej sobie poradzi, bo prędkość jest taka sama jak przy "Control Transfers" czy "Bulk Transfers".
Jak się nie uda, będę musiał jakoś łączyć dane w większe pakiety, lecz uzyskam opóźnienie, a nawet 1ms to dosyć dużo :/

0

Chodzi o predkosc czy przepustowosc :)

Bo tu wyglada, ze lepiej dla ciebie wybrac transfer jak dla audio/video > isochronous transfer.

Sprawdz ile zmiesci sie w 1ms i wysylaj o tyle wieksze pakiety. 2B to bardzo malo i tu naglowki zjadaja duzo. Trzeba dobrac (minimalizacja fun) wielkosc naglowokow kontra przesylana wielkosc danych.

0
załamany napisał(a)

Jak się nie uda, będę musiał jakoś łączyć dane w większe pakiety, lecz uzyskam opóźnienie, a nawet 1ms to dosyć dużo :/

Tylko bufor fifo dla dużej ilości małych danych. Co to za projekt? Czy te 16bit dane to sprzężenie zwrotne? Jeśli tak, to należy zmienić ideę projektu.

0

Ma być to przejściówka z portu szeregowego na równoległy, pod takim kątem, aby uruchomić programy takie jak openocd/uisp i podobne. Programy te mają w sobie już zaimplementowane odpowiednie protokoły, sterując danym pinem(LPT).
Wysyłam do urządzenia 2B czyli nagłówek i dane. Dane te zostają wysłane na 8bitowy port. Żeby wysyłać dane w protokole SPI, 1bajt zajmuje ok 18bajtów wysłanych przez USB(nie licząc nagłówka - ten 1B więcej nie zmienia prędkości). Niestety nie mogę danych sklejać i wysyłać, gdyż po wysłaniu z USB 2 pakietów, programy potrzebują odpowiedź(stan pewnych pinów) aby kontynuować transmisje.
Maksymalną prędkość jaką uzyskałem "udając" SPI to ok 16B/s...
Coś mi się zdaje że będę musiał napisać od razu przejściówki usb->spi, usb->jtag, usb->......
Już wiem czemu nie ma adapterów USB->LPT :-/

0
załamany napisał(a)

Już wiem czemu nie ma adapterów USB->LPT :-/

Chodzi tobie o adapter w kompie usb<-up->LPT a nie na odwrot (z LPT usb ?!).
Jesli tak to jest ich bardzo duzo (nawet kiedys widzialem projekt w oparci o jakis popularny uP wraz z kodem do sterownikow pod win NT).

//----
toto
http://www-user.tu-chemnitz.de/~heha/bastelecke/Rund%20um%20den%20PC/USB2LPT/index.html.en

ale przyznam, ze nie chcialo by mi sie dzis ich budowac (chyba, ze w celu nauki) bo cena to kilka dolarow ...

0

Ok, napisz, jak realizujesz połączenie via usb?
Nie mogę zrozumieć tego co napisałeś, ponieważ raz piszesz, że potrzebujesz przejściówkę usb-lpt aby wykorzystywać soft do programowania oraz sprzętowy debugger tak więc wychodzi na to, że chcesz mieć w systemie port lpt. Następnie stwierdzasz, że nie ma takich przejściówek więc będziesz musiał zrobić przejściówkę usb-jtag? [???]

Popełniłem swego czasu programator do msp430 wykorzystujący interfejs jtag, stosując mikrokontroler ze sprzętowym spi. Dane z pc wysyłałem do pamięci mikrokontrolera w paczkach po 4kB, a ten zajmował się programowaniem docelowego układu.

Co do przejściówek usb-lpt (działających!) mogę Ci polecić układ CY7C68013A, ale czy nie wygodniej użyć express card z lpt (rozumiem, że chodzi o laptop)?

0

Tak, są za kilka złotych przejściówki lecz nie nadają się do programatorów, ponieważ mogą przesyłać dane takie jakie "rozumieją" drukarki, skanery itp - nie ma możliwości sterowania dowolnym pinem. Te na pcmcie/express są dobre, lecz nie wszystkie laptopy mają te gniazda(mój osobiście ma) i przy okazji chcę zrobić analizator stanów logicznych(tutaj wysyłam już pakietami) - który sprawuje się bardzo dobrze.
Pisałem, że nie ma przejściówek "pełnych" usb-lpt(przynajlniej dla Full Speed) i postanowiłem taką zrobić, realizuję to w następujący sposób:

/** parport_register_port
transfer realizowany przez usb_control_msg, nie będę zamieszczał z "Interrupts Transfer" bo trochę więcej kodu, prędkość taka sama oraz ten sam problem.
 **/
static void parport_usblpt_write_data(struct parport *pp, unsigned char d){
	unsigned int retval;
	unsigned char pack[2];
	int rlen;
	struct usblpt_private * priv = pp->private_data;
	if(!priv) return;
	pack[0] = USBLPT_WRITE;
	pack[1] = d;
 	retval = usb_control_msg(priv->usbdev, usb_sndctrlpipe(priv->usbdev, 1), 0, USB_DIR_OUT  | USB_TYPE_VENDOR, 0, 0, pack, 2, HZ);
	printk("parport_usblpt_write_data: [%d]0x%02x\n", retval, d);
}

static unsigned char parport_usblpt_read_data(struct parport *pp){
	unsigned int retval;
	unsigned char pack[2];
	struct usblpt_private * priv = pp->private_data;
	if(!priv) return 0;
	pack[0] = USBLPT_READ;
	pack[1] = 0;
	// eksperymentalnie
	retval = usb_control_msg(priv->usbdev, usb_sndctrlpipe(priv->usbdev, 1), 0, USB_DIR_OUT  | USB_TYPE_VENDOR, 0, 0, pack, 2, HZ);
	retval = usb_control_msg(priv->usbdev, usb_rcvctrlpipe(priv->usbdev, 2), 0, USB_DIR_IN   | USB_TYPE_VENDOR, 0, 0, pack, 2, HZ);

//	printk("parport_usblpt_read_data\n");
	return 0;
}
/**
zrobiłem także programik do testowania działania oraz prędkości wykorzystując ioctl
**/

System widzi moją przejściówkę jako /dev/parport0, dane przechwycone zostają przesłane do układu, który następnie steruje stanami na gnieździe DB25. Okazało się że pakiety są przesyłane właśnie z częstotliwością 1kHz, więc przez tą wadę nie jest możliwe zrobienie takiej przejściówki. Widzę że CY7C68013A wykorzystuje High Speed gdzie występuje większa częstotliwość wysyłania pakietów, niestety ja posiadam układ z Full Speed :-/

0

Masz rację, nic dobrego z tego nie wyjdzie. Układ Cypressa by się sprawdził, jednak Ci nie pasuje bo nie wszystkie usb 2.0 pracują w trybie high speed. Większość przejściówek usb-lpt instaluje w systemie wirtualny sterownik drukarki, więc z miejsca odpadają.

A może wziąć coś od realteka lub microchipa i zrobić mostek LAN-LPT?

Przyznam, że to bardzo ciekawy projekt, dawaj znać jak idą prace :)

0

Siedzę na armach atmela, zainwestuje w wersje at91sam7x z LAN 100Mbps. Powinno się udać ;-P
Myślałem też żeby dla wygody zrobić przez wifi, wykorzystując np. karty wifi SDIO(muszę trochę poczytać czy spi-karta nie będzie zwalniać transferu), ale ciężko teraz takie coś dostać za rozsądne pieniądze.
Jak coś stworzę to się odezwę :-O

0
załamany napisał(a)

Siedzę na armach atmela, zainwestuje w wersje at91sam7x z LAN 100Mbps. Powinno się udać ;-P

uda sie, kwestia godzin :) wymyslilem, ze bede mial prace magisterska z wyswietlaczem lcd zamiast okladki, da sie :)
nie mam doswiadczenia z wifi, jedynie moduly bluetooth sa mi znane. Bezprzewodowy programator to fantastyczny pomysl! Zarejestruj sie na forum, jest tu kilka kompetentnych osób, które pomoga, nawet wyobrazilem sobie wspolny projekt :)

0

wprawdzie ten konkretny nie jest przewidziany dla ARMow ale z tego co kiedys czytalem ARMy tez maja JTAG.. nie wczytywalem sie jednak w ich specyfikacje.. jednakze:
http://www.elektroda.pl/rtvforum/viewtopic.php?t=1601592&sid=b71d9c28701888cfce221755c5154221

Gdzies widzialem w necie JTAG specjalnie dla ARMow od Atmela, jak znajde linka to podam, bylo tez z przejsciowka pod USB wlasnie.

o tu cos jest.. wspomniane wlasnie o ARMach
http://www.hs-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1