RTV forum PL | NewsGroups PL

Jak odczytać dane z nietypowego portu LPT na karcie PCI w nowoczesnym PC?

Port LPT na karcie PCI i pytanie o adresy i sposób komunika

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak odczytać dane z nietypowego portu LPT na karcie PCI w nowoczesnym PC?

Sebastian Bialy
Guest

Mon Sep 20, 2004 4:09 pm   



Witam!

Jest urządzenie. Komunikuje się z pecetem przez port drukarki.
Konkretnie dane z urządzenia wysyłane sią do portu drukarki poprzez
linie d0-d7. Program na PC odczytuje stan tych lini.

I jest problem jeden - najwazniejszy komputer nie czyta danych z tego
portu mimo, że 10 innych czyta. Wszelkie kombinacje z portem drukarki w
biosie wykonane. Niestety nie chce czytać danych.

Osoba która musi to urządzenie podąłczyć kupiła w końcu port drukarki
(dwukierunkowy) na złączu PCI. Niestety port ten po uruchomieniu
przydzielił sobie zasoby następujące (po niemiecku):

E/A - Bereich CC00 - CC07
E/A - Bereich C800 - C807

(i nazywa sie LPT1)

Wygląda to zgoła inaczej, niż 378/278 znane ze standardowych portów
drukarki.

Pytanie zatem mam takie: czy ktokolwiek próbował kiedykolwiek dobrać się
do takiego nietypowego portu ? Przebudowa urządzenia nie wchodzi w grę,
ponieważ jestem 1300km od miejsca gdzie stoi sprzęt. W tej chwili
program korzysta z biblioteki inpout32.dll i działał znakomicie na
prawie wszystkich komputerach. Licze na to, że "grzebanie" po tych
portach powinno dac podobny rezultat co grzebanie po portach 378/278.
Czy ktoś mógłby to potwierdzić ? Musze pisać aplikacje w ciemno i
chciałbym ieć cień szansy, że zadziała.

PS. Komputer z kapryśnym portem drukarki to raczej nowoczesny sprzęt -
jakiś athlon. Czy coś się zmieniło ostatnio w hardware lpt? Pytam bo na
moim athlonie działa jak trzeba bez zająknięcia.

--
Sebastian Bialy - heby@poczta.onet.pl

J.F.
Guest

Mon Sep 20, 2004 4:32 pm   



On Mon, 20 Sep 2004 19:09:16 +0200, Sebastian Bialy wrote:
Quote:
Osoba która musi to urządzenie podąłczyć kupiła w końcu port drukarki
(dwukierunkowy) na złączu PCI. Niestety port ten po uruchomieniu
przydzielił sobie zasoby następujące (po niemiecku):

E/A - Bereich CC00 - CC07
E/A - Bereich C800 - C807

(i nazywa sie LPT1)

Wygląda to zgoła inaczej, niż 378/278 znane ze standardowych portów drukarki.
Pytanie zatem mam takie: czy ktokolwiek próbował kiedykolwiek dobrać się
do takiego nietypowego portu ?

Ze starych czasow to ci powiem ze np karty ethernet "ne2000
compatible" na pci dawalo sie obsluzyc driverem z czasow ISA.
O ile oczywiscie driver dal sobie wpisac odpowiednie adresy - niektore
wiedzialy "lepiej" - sam podmienialem 0320 w pliku na EE00 i
wybieralem trzecia onfiguracje z listy ..

Oczywiscie badz swiadom ze ten adres potrafi sie zmienic przy
najmniejszej okazji. No i ze przydzielone przerwanie moze byc
dzielone.

Quote:
W tej chwili
program korzysta z biblioteki inpout32.dll i działał znakomicie na
prawie wszystkich komputerach.

PS. Komputer z kapryśnym portem drukarki to raczej nowoczesny sprzęt -
jakiś athlon. Czy coś się zmieniło ostatnio w hardware lpt?

Przez ostatnie 5 lat raczej nic. Moze port juz spalony ?
A moze windows jakies nowe i olewa ustawienia w biosie, ustawilo
np port jednokierunkowy ?

A ten inpout32 to juz dostosowany do NT/XP ? Bo moze w tym problem ?

J.

Sebastian Bialy
Guest

Mon Sep 20, 2004 4:43 pm   



J.F. wrote:
Quote:
Ze starych czasow to ci powiem ze np karty ethernet "ne2000
compatible" na pci dawalo sie obsluzyc driverem z czasow ISA.
O ile oczywiscie driver dal sobie wpisac odpowiednie adresy - niektore
wiedzialy "lepiej" - sam podmienialem 0320 w pliku na EE00 i
wybieralem trzecia onfiguracje z listy ..

Oczywiscie badz swiadom ze ten adres potrafi sie zmienic przy
najmniejszej okazji. No i ze przydzielone przerwanie moze byc
dzielone.

Licze na to, że się da, teraz szybko doszywam do aplikacji możliwśc
pobierania numerka prosto z pliku konfiguracyjnego ... niestety nie
wiem, czy inpout32.dll pozwoli na podanie taiego adresu. Znasz moze
alternatywę ? Coś co pozwala mi grzebać po portach LPT.

Quote:
Przez ostatnie 5 lat raczej nic. Moze port juz spalony ?
A moze windows jakies nowe i olewa ustawienia w biosie, ustawilo
np port jednokierunkowy ?

Bo ja wiem ... praktycznie wszędzie działa, a na tym jedeynm, na którym
musi działać - nie chce. Port na sztywno pisze w win że dwukierunkowy -
drukarka działa na nim.

Quote:
A ten inpout32 to juz dostosowany do NT/XP ? Bo moze w tym problem ?

Sprawdzany nawielu róznych windowsach, działa bez pudła.

--
Sebastian Bialy - heby@poczta.onet.pl

Sebastian Bialy
Guest

Mon Sep 20, 2004 6:19 pm   



Sebastian Bialy wrote:
Quote:
Osoba która musi to urządzenie podąłczyć kupiła w końcu port drukarki
(dwukierunkowy) na złączu PCI. Niestety port ten po uruchomieniu
przydzielił sobie zasoby następujące (po niemiecku):
E/A - Bereich CC00 - CC07
E/A - Bereich C800 - C807
(i nazywa sie LPT1)

Zaryzykowałem i posłałem program, który zamiast po porcie 378 grzebie po
porcie c800. Okazało się, że działa Smile To tak dla wszystkich, którzy
będą kiedyś googlować. Korzystam z biblioteki inpout32.dll która co
prawda w dokumentacji stwierdza, że obsługuje wyłącznie 378/278 ale jak
widać dziaął znakomicie na innych zakresach we/wy.

--
Sebastian Bialy - heby@poczta.onet.pl

Krzysztof Rudnik
Guest

Mon Sep 20, 2004 6:54 pm   



Sebastian Bialy wrote:

Quote:
Sebastian Bialy wrote:
Osoba która musi to urządzenie podąłczyć kupiła w końcu port drukarki
(dwukierunkowy) na złączu PCI. Niestety port ten po uruchomieniu
przydzielił sobie zasoby następujące (po niemiecku):
E/A - Bereich CC00 - CC07
E/A - Bereich C800 - C807
(i nazywa sie LPT1)

Zaryzykowałem i posłałem program, który zamiast po porcie 378 grzebie po
porcie c800. Okazało się, że działa Smile To tak dla wszystkich, którzy
będą kiedyś googlować. Korzystam z biblioteki inpout32.dll która co
prawda w dokumentacji stwierdza, że obsługuje wyłącznie 378/278 ale jak
widać dziaął znakomicie na innych zakresach we/wy.


Tylko pamietaj ze w PCI adresy sa przydzielane dynamicznie
a wrecz teoretycznie urzadzenia IO moga zostac zmapowane do pamieci.

Krzysiek Rudnik

Sebastian Bialy
Guest

Mon Sep 20, 2004 7:19 pm   



Krzysztof Rudnik wrote:
Quote:
Tylko pamietaj ze w PCI adresy sa przydzielane dynamicznie
a wrecz teoretycznie urzadzenia IO moga zostac zmapowane do pamieci.

Nie ma znaczenia - zawsze można przestawić adres IO na dowolny inny -
dorobiłem proteze odczytującą z pliku ten adtres, więc user może łatwo
zmienić. Coś mi się wydaje jednak, że bez zmian w hardware samo z siebie
nie powinno się zmienić.

--
Sebastian Bialy - heby@poczta.onet.pl

Adam Dybkowski
Guest

Mon Sep 20, 2004 7:34 pm   



Krzysztof Rudnik wrote:

Quote:
Zaryzykowałem i posłałem program, który zamiast po porcie 378 grzebie po
porcie c800. Okazało się, że działa Smile To tak dla wszystkich, którzy
będą kiedyś googlować. Korzystam z biblioteki inpout32.dll która co
prawda w dokumentacji stwierdza, że obsługuje wyłącznie 378/278 ale jak
widać dziaął znakomicie na innych zakresach we/wy.

Tylko pamietaj ze w PCI adresy sa przydzielane dynamicznie
a wrecz teoretycznie urzadzenia IO moga zostac zmapowane do pamieci.

Dlatego w konfiguracji programu lepiej dac do wyboru numer portu LPT, a
dopiero w czasie dzialania znajdowac jego adres bazowy. Tak dziala np.
ISPProgrammer:
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html
Sam mam karte LPT PCI i wszystko obsluguje sie tak jak w "klasycznym"
porcie LPT.

Polecam lekture dokumentacji funkcji Win32 API: SetupDiGetClassDevs,
SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty,
CM_Get_First_Log_Conf, CM_Get_Next_Res_Des, CM_Get_Res_Des_Data i
jeszcze kilka pomniejszych.

--
Adam Dybkowski
adybkows@amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/

Sebastian Bialy
Guest

Mon Sep 20, 2004 7:43 pm   



Adam Dybkowski wrote:
Quote:
Polecam lekture dokumentacji funkcji Win32 API: SetupDiGetClassDevs,
SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty,
CM_Get_First_Log_Conf, CM_Get_Next_Res_Des, CM_Get_Res_Des_Data i
jeszcze kilka pomniejszych.

Nie ma czasu na eksperymenty, tym bardziej, że urządzenia nie mam i
musze pisać w ciemno. To tylko proteza, żeby w ogóle zadziałało -
docelowo wszystko będzie na rs232 może USB (ale też pewno w jakimś
trybie strumieniowania jak rs232).

--
Sebastian Bialy - heby@poczta.onet.pl

Adam Dybkowski
Guest

Mon Sep 20, 2004 8:02 pm   



Sebastian Bialy wrote:

Quote:
Polecam lekture dokumentacji funkcji Win32 API: SetupDiGetClassDevs,
SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty,
CM_Get_First_Log_Conf, CM_Get_Next_Res_Des, CM_Get_Res_Des_Data i
jeszcze kilka pomniejszych.

Nie ma czasu na eksperymenty, tym bardziej, że urządzenia nie mam i
musze pisać w ciemno. To tylko proteza, żeby w ogóle zadziałało -
docelowo wszystko będzie na rs232 może USB (ale też pewno w jakimś
trybie strumieniowania jak rs232).

Na RS232 nie polecam żadnej nowej produkcji, bo już niedługo nie będzie
tego gdzie podłączyć. Teraz już mało który laptop ma RS232, a widać tą
tendencję też w dużych blaszakach.
Odnośnie USB i wirtualnego COMa - dobry pomysł o ile nie zachcesz więcej
portów (np. jeden kanał do transmisji danych a drugi do debugowania)
albo całkiem innej funkcjonalności (fajnie wygląda upgrade firmware'u
urządzenia przez wrzucenie pliku na wirtualną "dyskietkę" - klasa USB
Mass Storage). Do obu zastosowań i jeszcze 100 innych nadają się za to
bardzo dobrze uniwersalne układy USB takie jak np. Philips ISP1181 lub
nowsze.

--
Adam Dybkowski
adybkows@amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/

Sebastian Bialy
Guest

Mon Sep 20, 2004 8:33 pm   



Adam Dybkowski wrote:
Quote:
Nie ma czasu na eksperymenty, tym bardziej, że urządzenia nie mam i
musze pisać w ciemno. To tylko proteza, żeby w ogóle zadziałało -
docelowo wszystko będzie na rs232 może USB (ale też pewno w jakimś
trybie strumieniowania jak rs232).

Na RS232 nie polecam żadnej nowej produkcji, bo już niedługo nie będzie
tego gdzie podłączyć. Teraz już mało który laptop ma RS232, a widać tą
tendencję też w dużych blaszakach.

A to wiem, ale założenie jest bardzo proste - coma zawsze można
podłaczyć przez USB - koszt około 40zł za "przelotkę" i masz port COM w
kazdym laptopie. To że to stary system przesyłania danych - powiedz to
producentom elementów do automatyki - tam cały czas RS232 jest
podstawowym sposobem komunikacji i tego raczej nie przeskocze. Tak
naprawdę to urządzenie które będzie sterowane przez komputer wymaga aż 4
lini RS232 do komunikacji, bo przerobić gotowych urządzeń nie mogę ...
No i dodatkowo moja proteza na LPT ... Ale w następnej wersji będzie już
tylko jeden RS232 / USB / IrDA / etc.

Quote:
Odnośnie USB i wirtualnego COMa - dobry pomysł o ile nie zachcesz więcej
portów (np. jeden kanał do transmisji danych a drugi do debugowania)
albo całkiem innej funkcjonalności (fajnie wygląda upgrade firmware'u
urządzenia przez wrzucenie pliku na wirtualną "dyskietkę" - klasa USB
Mass Storage). Do obu zastosowań i jeszcze 100 innych nadają się za to
bardzo dobrze uniwersalne układy USB takie jak np. Philips ISP1181 lub
nowsze.

Zastanawia mnie wykorzystanie raczej gotowego mikrokontrolera z
interfejsem USB. Jeśli tylko załatwi wszelkie
hardware/synchronizacje/protokół i udostępni mi strumieniowane
transmisje to więcej mi nie trzeba.

--
Sebastian Bialy - heby@poczta.onet.pl

J.F.
Guest

Mon Sep 20, 2004 9:05 pm   



On Mon, 20 Sep 2004 22:34:11 +0200, Adam Dybkowski wrote:
Quote:
Tylko pamietaj ze w PCI adresy sa przydzielane dynamicznie
a wrecz teoretycznie urzadzenia IO moga zostac zmapowane do pamieci.

Dlatego w konfiguracji programu lepiej dac do wyboru numer portu LPT, a
dopiero w czasie dzialania znajdowac jego adres bazowy. Tak dziala np.
ISPProgrammer:
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html

A w jaki sposob znajdujesz adres portu ?

No i ..
- co w przypadku jak port jest, ale windows go nie znajduje
- windows znajduje .. ale to port na USB ...

J.

Adam Dybkowski
Guest

Tue Sep 21, 2004 8:01 pm   



J.F. wrote:

Quote:
Dlatego w konfiguracji programu lepiej dac do wyboru numer portu LPT, a
dopiero w czasie dzialania znajdowac jego adres bazowy. Tak dziala np.
ISPProgrammer:
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html

A w jaki sposob znajdujesz adres portu ?

Wymieniłem w tamtym poście nazwy kilku funkcji Windows API, z nich
korzystam. RTF MSDN jakby co.

Quote:
No i ..
- co w przypadku jak port jest, ale windows go nie znajduje

Jak nie widać portu w Windows to nawet inny program nic z nim nie zrobi.
Nie daję w sofcie takich portów do wyboru.

Quote:
- windows znajduje .. ale to port na USB ...

Wtedy dla danego portu nie da się uzyskać adresu bazowego i nie daję w
takim przypadku go do wyboru użytkownikowi. Taki port nie nadaje się do
grzebania ręcznie "bitami" i AFAIK nie ma żadnej funkcji Win32 API
pozwalającej w porcie LPT zmienić stan jednego bitu. A tego wymaga
transmisja SPI.

--
Adam Dybkowski
adybkows@amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/

elektroda NewsGroups Forum Index - Elektronika Polska - Jak odczytać dane z nietypowego portu LPT na karcie PCI w nowoczesnym PC?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map