prędkość machania LPT

Aug 13, 2009 63 Replies

Witam. Czy ktoś mógłby mi potwierdzić mój wynik? Macham sobie na zmiane D0:



01010101010101 ... w ciasnej pętli składającej się z outb na 0x378. Wychodzi mi fmax=290kHz. Troche biednie. Macham na Linuxie, ale to chyba nie ma za wiele do rzeczy. Mialem nadzieję na przynajmniej 1MHz. Ktoś może wie czemu tak mizernie to wychodzi?

W dniu 13.08.2009 16:11, Sebastian Biały pisze:

W jakim trybie masz ustawiony port w BIOSie? W ECP powinien byc najszybszy i wyciagac ok. 2MHz.

Użytkownik "Sebastian Biały" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:h616ue$pia$ snipped-for-privacy@achot.icm.edu.pl...

tak przy okazji mi się przypomniał taki dialog:

-jaką szybkość ma LPT?

-on nie ma szybkości, on ma wolność

;P

a tak serio to nie śadzę ze uda Ci się więcej wyciagnąc, może na rs232 wicej by dało...

Użytkownik "Sebastian Biały" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:h616ue$pia$ snipped-for-privacy@achot.icm.edu.pl...

Nie wiem, czy Ci pomogę. Ja próbowałem w drugą stronę, to znaczy przyjmowanie równolegle danych w przerwaniu (od /ACK). Na 'oko' wyszło mi

400-450kHz. Prosty program w Turbo Pascalu 6.0 pod DOSem, Celeron 1GHz, płyta DFI CA-64.

Michał

Sebastian Biały schrieb:

a to, że na Linuksie też musisz przejść przez port mapping. Jak chcesz szybciej machać, to musisz napisać sterownik, który będzie machał bezpośrednio nóżką. W zależności od rasy ustrojstwa (hardware portu) możesz wyciągnąć nawet ponad 2MHz.

Waldek

Co to jest port mapping w tym kontekście?

A czy on przypadkiem nie będzie robił z grubsza tak samo? outb ...

We wszystkich dostępnych trybach osiąga 290kHz.

Nie potrzebuje w ogóle miec takich predkosci. Jestem po prostu zdumiony że aż tak malutko, a wyszło to przy okazji zabawy z urzadzeniem na SPI.

Mnie tu zastanawia, czy nowe zintegrowane chipsety I/O na nowoczesnych płytach głównych w ogóle ktoś projektuje pod tym kątem. Może po prostu to ograniczenie badziewnego hardware które haltuje CPU na czas dostępu?

Przyznaje bez bicia, że nie mam DOSa zeby to w tej chwili sprawdzić pod nim. Moe rzeczywiście Linux sam z siebie ma spory narzut.

formatting link
(3.4kB)

To źródlo produkuje 290kHz na mojej płycie. Procesor >2GHz wiec to nie to ;)

Uruchamiać jako root bo używa ioperm.

Ostatnio jak sprawdzalem to IMHO tak wlasnie bylo - operacje na ISA haltowaly procesor na ~1us, co szczegolnie istotne bylo im lepszy procesor, ktory moglby w tym czasie tysiace operacji zrobic.

I jeszcze drobiazg - optymalizacja ISA zakonczyla sie gdzies w czasach

286, plyty 386 i pozniejsze byly nawet wolniejsze.

Niby teraz port LPT na chipsecie nie jest juz powiazany z ISA, ale cos podejrzewam ze nadal ta ~1us zostala.

A osobna sprawa ze jak ambitny system operacyjny zacznie wyjatki generowac, sprawdzac i emulowac, to tez mu tysiac instrukcji zejdzie ..

J.

Coś mi się przypomina, ze w trybie ECP trzeba chyba coś sprzętowo potwierdzać na złączu LPT.

Paweł

1.0 GHz -> 285kHz 2.1 GHz -> 291kHz

Nie ma zadnej sensownej zależnosci od prędkości procesora. Wygląda na blokowanie przez hardware.

Nie wydaje mi się, żebym korzystał z takiej funkcjonalności która wymaga potwierdzania. W teorii na adresie 0x378 jest zatrzask który powinienem widzieć jako D0-D7 na zewnątrz. Taka prymitywną forme działania miały chyba pierwsze LPT i tak zostało. W kazdym razie ten zatrzask jakiś nieprędki jest.

Dawno temu robiłem pewne urządzenie komunikujące się przez LPT. W jednym trybie uzyskiwałem około 1MB w drugim znacznie mniej. Z tego co pamiętam na płytce były jakieś przerzutniki generuje potwierdzenia. Zobacz czy tu nie znajdziesz jakiś informacji:

formatting link
Paweł

Ale jak ci zalezy na predkosci, to mozesz skorzystac z trybow rozszerzonych. Trzeba bedzie podac zewnetrzny zegar ..

J.

Nie nie, LPT to w ogóle tylko diagonstycznie jest, pewna zabawka na SPI mi nie działa jak powinna i diagnozuje ja na piechotę. Tylko ze podczas tej diagnozy nie mogłem uwierzyć, że tak powoli dziala i test zrobiłem.

Bede chciał szybko to wykorzystam jakies coś na USB. A na razie sobie tylko tak narzekam.

Sebastian Biały pisze:

Jest bardzo duży rozrzut na różnych komputerach, nie zależy to prawie wcale od częstotliwości procesora a raczej od chipsetu (do którego dochodzi port LPT), ew. chipu na karcie PCI LPT.

290kHz to rzeczywiście słabo, powinno dać się wyciągnąć 500-800kHz na większości komputerów.

Sebastian Biały pisze:

Jak na USB to polecam [de]serializer ze stajni FTDI: FT3232 lub nowsze (np. FT4232H). SPI/JTAG/UART serializuje sprzętowo - po początkowych ustawieniach wysyłasz tylko opakowane specjalnie bajty przez USB, a po drugiej stronie wychodzi np. ładna transmisja SPI.

Zrobiłem test na WinXP. Taki program:

int _tmain(int argc, _TCHAR* argv[]) { HANDLE h = CreateFile(L"\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(h == INVALID_HANDLE_VALUE) { printf("GiveIO not installed\n"); return 1; } CloseHandle(h);

printf("Generuje\n");

while(1){ _outp(0x378, 0xFF); _outp(0x378, 0x00); }

return 0; }

Wygenerował mi częstotliwość 400kHz, co daje zmianę stanu co 1,25us.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required