USB -> LPT

Postby KOE » 03 Feb 2008, 15:11

Купил мну переходничек. Вот такой

9148435.jpg
9148435.jpg (18.73 KB) Viewed 10259 times


Для того, чтобы можно было плиски и контроллеры с ноута прошивать. Но радость моя была недолгой. Вставил я это чудо в ноут, он его сразу же распознал как 'USB printer'. И принтер (если его подключить через эту хрень) действительно работает. Но мне-то нужен LPT порт, а не USB принтер. Квартус и прочая хрень порт просто не видит. Иду дальше. Панель управления -> установка периферийных устройств -> порты COM и LPT. Устанавливаю. Прописываю адрес 0x378. Теперь программы порт видят, но он нифига не работает. Переустанавливаю драйвер из прилагаемого CD, все рарвно не работает. Чего еще можно придумать - не знаю. Может у кого были такие грабли?
Last edited by KOE on 03 Feb 2008, 15:12, edited 1 time in total.
Мы рождены, чтоб сказку сделать былью
"Кто не обломался, тем еще предстоит"
User avatar
KOE
 
Posts: 4674
Joined: 15 Apr 2007, 13:06
Group: Registered users

Postby KOE » 03 Feb 2008, 15:22

Я так понял, что венда при установке драйвера принтера сразу подключает свой вендовозный драйвер usbprint.sys. А когда я установил новый LPT порт и прописал его адрес, венда при обращении к нему пишет не в USB-конвертер, а в этот самый несуществующий адрес. Как бы сделать так, чтобы венда перехватывала обращения к LPT и пихала их в USB-конвертер? Принтеры ведь c этим конвертером именно так работают???
Мы рождены, чтоб сказку сделать былью
"Кто не обломался, тем еще предстоит"
User avatar
KOE
 
Posts: 4674
Joined: 15 Apr 2007, 13:06
Group: Registered users

Postby fk0 » 03 Feb 2008, 18:04

KOE wrote:Я так понял, что венда при установке драйвера принтера сразу подключает свой вендовозный драйвер usbprint.sys. А когда я установил новый LPT порт и прописал его адрес, венда при обращении к нему пишет не в USB-конвертер, а в этот самый несуществующий адрес.


А С ЧЕГО ТЫ ВЗЯЛ, ЧТО ОНО ВООБЩЕ КАКОЕ-ТО ОТНОШЕНИЕ К микросхеме реализующей LPT-порт в компьютере IBM-PC (или совместимом) имеет??? Я б до этого не додумался даже бы. Разумеется принтер работает.
Разумеется что-то вроде \\Device\\LPT появляется (не знаю даже как оно там называется). Что обеспечивается её драйвером. Но ПРИ ЧЁМ ЗДЕСЬ ПОРТЫ ВВОДА-ВЫВОДА микропроцессора (типа "пеньтиум")???

Нет, я даже догадываюсь как оно работает. FT232, верней её аналог, для параллельного ввода-вывода.


Как бы сделать так, чтобы венда перехватывала обращения к LPT и пихала их в USB-конвертер?


Отловить все исключения в программе при попытке записи в порт и перенаправить их на свой драйвер этой хреновины, который бы заставлял её дёргать ножками? С, замечу особо, отнюдь не нормированной скоростью...

Только это, думаю, дааааалеко не тривиально. Не представляю даже как. Только догадываюсь -- отладчики эти исключения наверняка как-то ловят.


Принтеры ведь c этим конвертером именно так работают???


Если я тебе скажу, что принтеры, точней программы которые на них печатают, верней драйвера принтеров, отнюдь не пихают байты в 0x378 порт микропроцессора, а пишут поток в \\Device\\LPT -- я открою для тебя великую тайну? (они вщё и по tcp/ip умеют, в указанный пользователем порт... tcp-протокола)
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1533
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby deathsoft » 03 Feb 2008, 19:01

fk0 wrote:Может у кого были такие грабли?

Все программы для работы с LPT прртом под виндой пишут в аппаратный порт 0x378 (LPT1) либо из драфвера режима ядра, либо из юзермода. Никакие УСБ устройства не могут эмулировать аппаратный порт процессора, а могут лишь передавать данные через шину УСБ и свой драйвер (ЛПТ порт при этом эмулируется при помощи пакетов), данные чеерз шину УСБ выдаются на 8битную параллельную шину, но со стороны винды данные пишутся командой WriteFile в \Device\Usbxxxx

В отличие от COM портов, где весь виндовый софт работает чедез символическую ссылку \Device\COMn работа с ЛПТ осуществляется напрямую.
Last edited by deathsoft on 03 Feb 2008, 19:02, edited 1 time in total.
User avatar
deathsoft
 
Posts: 4709
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby KOE » 03 Feb 2008, 19:57

fk0 wrote:А С ЧЕГО ТЫ ВЗЯЛ, ЧТО ОНО ВООБЩЕ КАКОЕ-ТО ОТНОШЕНИЕ К микросхеме реализующей LPT-порт в компьютере IBM-PC (или совместимом) имеет??? Я б до этого не додумался даже бы.


У меня и мыслей таких не было, вроде не пил с утра. При покупке этого девайса я ожидал, что при установке драйвера у меня появится виртуальный LPT порт. Который я выберу для работы в квартусе и будет мне счастье. Т.е. данные венда будет слать не в свою микросхему, реализующую LPT порт, а в этот контроллер посредством драйвера. У меня уже есть такой конвертер для COM порта (причем того же производителя), и все работает на ура.
Только в случае с этим девайсом я получаю драйвер для принтера, а не виртуального LPT порта.

---

Т.е. если нет драйвера, позволяющего создать в венде виртуальный LPT порт на основе этого конвертера, то мне он ни к чему, я правильно понял?
Last edited by KOE on 03 Feb 2008, 20:08, edited 1 time in total.
Мы рождены, чтоб сказку сделать былью
"Кто не обломался, тем еще предстоит"
User avatar
KOE
 
Posts: 4674
Joined: 15 Apr 2007, 13:06
Group: Registered users

Postby fk0 » 03 Feb 2008, 20:33

Куда, какая программа, чего будет слать? Ты вообще понимаешь как это работает?
Прочтение М. Гука (Аппаратное обеспечение ИБМ-ПЦ) и Абеля (программирование на ассемблере ИБМ-ПЦ) рекомендуетеся...

Какой, нафиг, виртуальный порт? НЕТ ТАКОГО ПОНЯТИЯ даже. Есть "устройство" в том виде как оно было в древнем ламуксе образца 1970 года. Ничего не изменилось. И только тот функционал который оно даёт через read/write/ioctl доступен прикладным программам. Твои же программы никакой файл не используют, они тупо выполняют mov dx, #0x378 и outb(dx), al. Только это НЕ РАБОТАЕТ ни в одной ОС, без костылей и подпорок разного рода, ибо в защищённом режиме, ну ты уж должен догадываться, outb не вызывает исключение, если только там какие-то биты в дескрипторе сегмента не стоят, только и этого мало... В ламуксе есть /dev/port если что, и также iopl(). В виндах хитрый драйвер как-то эмулирует (отлавливая исключения? не в курсе).
Да, но в том же ламуксе НОРМАЛЬНЫЕ программы лезут в /dev/parport в котором возможность
дёргания ножками просто заложена.

(и я тихо помалкиваю, что 378 или ещё какой порт может образоваться только после конфигурения PCI устройства, а его никто не будет делать ДО загрузки соответствующего драйвера, ну в том же ламуксе, а к драйверу может подтянуться и lpd который будет иметь своё мнение как нужно ножками дёргать, через /dev/lp...)


квартусе и будет мне счастье. Т.е. данные венда будет слать не в свою микросхему, реализующую LPT порт, а в этот контроллер посредством драйвера. У меня уже есть такой конвертер для COM порта (причем того же производителя), и все работает на ура.


Ты точно уверен, что понимаешь как это работает? Deathsoft выше описал почему так.


Т.е. если нет драйвера, позволяющего создать в венде виртуальный LPT порт на основе этого конвертера, то мне он ни к чему, я правильно понял?


Я не разбираюсь в виндах настолько. НО ЧТО ТАКОЕ *ДРАЙВЕР ВИРТУАЛЬНОГО ПОРТА* ???
Что такое вообще порт? \\Device\\LPTxxx наверняка есть (а может так всё плохо, что и действительно нет...) Но туда поток байтов писать положено, а не ножками дёргать. Как-то же
пресловутая libieee<номер забыл> работает. Или она с этим чудом тоже не работает.

Я смутно догадываюсь, deathsoft хотел скаать, что в виндах есть только /dev/lp, а /dev/parport нет. Поэтому и лезут напрямую. /dev/lp только печатать на принтер предназначен (вот т.е. cat file.txt > /dev/lp распечатает файл и будет как положено на каждом байте стробом дёргать и busy проверять).
А /dev/ttySn (ну т.е. \\Device\\COMn) в виндах не только байтики посылать умеет но ещё поменять и считать состояние сигнальных линий через ioctl(), посему напрямую в соответствующий порт микропроцессора никто и не лезет.
Last edited by fk0 on 03 Feb 2008, 20:46, edited 1 time in total.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1533
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby deathsoft » 03 Feb 2008, 20:58

fk0 wrote:Что такое вообще порт? \\Device\\LPTxxx наверняка есть (а может так всё плохо, что и действительно нет...) Но туда поток байтов писать положено, а не ножками дёргать. Как-то же пресловутая libieee<номер забыл> работает. Или она с этим чудом тоже не работает.

Я смутно догадываюсь, deathsoft хотел скаать, что в виндах есть только /dev/lp, а /dev/parport нет. Поэтому и лезут напрямую. /dev/lp только печатать на принтер предназначен (вот т.е. cat file.txt > /dev/lp распечатает файл и будет как положено на каждом байте стробом дёргать и busy проверять). А /dev/ttySn (ну т.е. \\Device\\COMn) в виндах не только байтики посылать умеет но ещё поменять и считать состояние сигнальных линий через ioctl(), посему напрямую в соответствующий порт микропроцессора никто и не лезет.


Именно это и хотел сказать, что писать в LPT порт без протокола обмена (как например с принтером) в RAW режиме (т.е. дергать ножками) нельзя. Через Read/Write поддерживается только работа по стандартным протоколам (принтер/ и всякие ecp/epp устройства, которые работают в соответствии с ieee1284 а не просто хаотично дергают ножками).

Более того квартус работает вообще через свой драйвер и открывает устройство \Device\ALPT в которое пишет через свои ioctl, такую работу можно проэмулировать и через кабель купленый КОЕ, только придется написать собственный драйвер, который транслирует иоцтл используемые квартусом в передачу байтов по USB, ну и имя девайса делает ALPT1.
User avatar
deathsoft
 
Posts: 4709
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 03 Feb 2008, 21:06

KOE wrote:У меня уже есть такой конвертер для COM порта (причем того же производителя), и все работает на ура.

Для RS-232 протокол обмена с устройствами стандартизирован, плюс, как уже писал fk0, есть ioctl для управления сигналами типа DTR/RTS, для LPT же стандартизирован был только протокол обмена с принтером (ну и потом уже со всякими сканерами и внешними дисками). Программатор реализует свой - нестандартный протокол, а именно эмулирует интерфейс типа SPI на ножках LPT порта, там программно генерируется клок и передается один бит данных (синхронный последовательный протокол). Если сделать это через ioctl (я делал тако драйвер) то будет - очень медлено, т.к. на передачу каждого байта нужно переключаться из юзермода в кернельмод.

Стандартные драйвера от квартуса делают по другому. Вначале заполняется массив с данными которые нужно вывести в порт, затем драйвер выводит сразу подготовленый буфер, в это время готовится следующий буфер, при этом количество переключений узермоде/кернель моде - значительно меньше.

Вот типа устройств поддерживаемых стандартным драйвером в винде http://msdn2.microsoft.com/en-us/library/ms798338.aspx
Last edited by deathsoft on 03 Feb 2008, 21:10, edited 1 time in total.
User avatar
deathsoft
 
Posts: 4709
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby KOE » 03 Feb 2008, 21:30

fk0 wrote:Ты точно уверен, что понимаешь как это работает?

Нет, не точно. Точнее, вообще понятия не имею, как оно работает (если б знал точно, то не задавал бы тупых вопросов). И в данном случае мне оно пофиг, если честно. А нужно это дело было для прошивания микросхем. Переписывать драйвера и т.д. я, разумеется, не буду, потому как не умею этого делать.
Last edited by KOE on 03 Feb 2008, 21:33, edited 1 time in total.
Мы рождены, чтоб сказку сделать былью
"Кто не обломался, тем еще предстоит"
User avatar
KOE
 
Posts: 4674
Joined: 15 Apr 2007, 13:06
Group: Registered users

Postby lvd » 03 Feb 2008, 23:15

Вот жеж мозгоЙОбы... Всё-то они знают, только толку от них, как обычно, минус ноль процентов...

KOE, у тебя в ноуте пцмциа есть? Вроде бы есть мультикарточки в туда, и вроде бы они даже и 0х378 умеют.

PS: А у мну ноут с лпт и комом... и из-под винды (мозгоЙОбам приготовиться брызгать слюной и плеваться! :)) при помощи inpout32.dll прекрасно за 0x378 ножками дёргается... Разумеется, и квартусы всякие работают ;-)
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7239
Joined: 07 Apr 2007, 21:28
Group: Registered users

Next

Return to Hardware

Who is online

Users browsing this forum: No registered users and 2 guests

cron