Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: Подключение самопального ECP-устройства  (Прочитано 45636 раз)
0 Пользователей и 1 Гость смотрят эту тему.
little
Помогающий

de
Offline Offline
Пол: Мужской

« : 27-06-2003 17:57 » 

Подскажите, что нужно наваять для общения из Win2k с самодельным устройством, поддерживающим ECP?
Нужно ли на него (устройство) писать свой драйвер, или можно обойтись имеющимися? В самом девайсе поддержку ECP я наваял (надеюсь правильно).

До этого использовался другой девайс, через который я работал с помощью перелопаченного genport.sys, входящего в DDK, но почему-то это не на всех компьютерах работало. А если и работало то с разной скоростью. У меня на Athlon XP все было замечательно, а у тех кому все это предназначалось (у них 2 P3) - в 4 раза медленне? На одном P4 вдвое медленнее (а через месяца полтора перестало работать). На другом P4 не работало изначально. В чем тут могла быть беда?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 27-06-2003 19:24 » 

А поподробней можно. Пока могу сказать только что от типа процессора это не зависит, от количества процессоров может зависеть, то есть от того uni или multi процессорное ядро.
 Как предположение- твоему девайсу не смогли выделить ресурсы(порты).
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 27-06-2003 22:57 » 

Да скорее всего чыто ты не предусмотрел разницу ядра....
Для подробностей распиши задачу.
Записан

А птичку нашу прошу не обижать!!!
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #3 : 28-06-2003 13:18 » 

Обрисовываю общую ситуацию:
На паркетном заводе, где я сейчас работаю, для изготовления всяко-разного паркета используются станки с ЧПУ, программа для которых записывается в самодельный модуль памяти, состоящий из 4-х микросхем памяти по 64Kb на шине I2C.
Когда я устроился на работу процесс записи программы в эту память выглядел следующим образом:
1. Дизайнер в автокаде создает нужный рисунок.
2. Этот рисунок обрабатывается программой-интерполятором и еще одной вспомогательной программкой, в результате чего получается файл с координатами отрезков.
3. Программа записи через контроллер этого самого ЧПУ преобразовывает и записывает файл во внутреннем коде в память.

В результате у каждого дизайнера стояло по 3 компа - на одном они под Win2k работали в автокаде, на втором по win98 записывали полученный файл через 3-й ящик-ЧПУ, потому как программа записи не общалась напрямую с портом, что Винда2000 ей не позволяла.
В результате моих переделок у дизайнеров осталось лишь по одному компу под 2000. Был сделан девайс на ЛПТ порт, через который компьютер напрямую писал в модуль памяти. А чтобы это работало под 2000, я немного переделал драйвер portio.sys, входящий в DDK. Изменения состояли лишь в том, что теперь он позволяет общаться с любым портом, а не только с тем, к которому "приклеен".

Но как оказалось, девайс, прекрасно работающий у меня, совершенно по-другому стал работать у дизайнеров. На двух компах старашно тормозит, на одном работал нормально, а потом ни с того, ни с сего перестал работать, а на четвертом не работал никогда.

Исходя из этой ситуевины, я решил сделать более умный девайс, который не зависел бы от архитектуры компов и общался бы с компом по ECP. Схему девайса (на 8051 архитектуре) и пробную прошивку я уже сделал, остался вопрос - что надо сделать на компе?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 30-06-2003 14:03 » 

Пока могу вот что сказать-
1) Не используй MMX, SSE и прочие мультимедийные прибамбасы и регистры в драйвере- при переключении контекстов системных потоков они не сохраняются если на это не указать.
2)Насколько я понял работаешь ты через стандартный LPT порт, если так, то почему не сделал свой драйвер как фильтр над портом или вобще не воткнул его в свой стек, так как к LPT можно несколько девайсов подвесить и каждый из них будет расти из своего стека, внизу стека будет PDO, управляемый драйвером LPT. Я это все к тому клоню- не мешает ли тебе стандартный драйвер LPT, когда ты пишешь в регистры порта.
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #5 : 30-06-2003 15:10 » 

1. Нечем таким и не пользовался.
2. Не сделал, потому что не знал как, а делать что-то надо было. Стандартный драйвер, может и мешает, не знаю. Но сейчас-то вопрос несколько в другом:
Что мне потребуется чтобы организовать общение с моим девайсом? Как мне к нему обращаться из программы? Могу ли я использовать стандартный драйвер для этого или мне опять же нужно делать свой?
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #6 : 30-06-2003 15:40 » 

Цитата: little
Но как оказалось, девайс, прекрасно работающий у меня, совершенно по-другому стал работать у дизайнеров. На двух компах старашно тормозит, на одном работал нормально, а потом ни с того, ни с сего перестал работать, а на четвертом не работал никогда.

Исходя из этой ситуевины, я решил сделать более умный девайс, который не зависел бы от архитектуры компов и общался бы с компом по ECP. Схему девайса (на 8051 архитектуре) и пробную прошивку я уже сделал, остался вопрос - что надо сделать на компе?


  Вот-вот, у меня точно такая же ситуация.
Только я думаю, что дело тут не в степени "умности" девайса, а как раз в возможном конфликте с "местными" драйверами из-за ресурсов.

ИМХО для того, что бы этого избежать не только можно, но и нужно использовать стандартный драйвер который сидит в системе. Для этого тебе придется написать (на основе того же genport) простенький драйвер и поставит его в стек исходящий из системного.

 Кстати, вопрос знающим людям:
Если мне нужно только чтение/запись, могу ли я обойтися, в данном случае, только ПРИЛОЖЕНИЕМ. Т.е. в приложении CreateFileом получить handle на системный драйвер (parallel.sys), а дальше Read/WriteFileом читать/писать?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #7 : 30-06-2003 16:53 » 

Цитата: Артем
Если мне нужно только чтение/запись, могу ли я обойтися, в данном случае, только ПРИЛОЖЕНИЕМ. Т.е. в приложении CreateFileом получить handle на системный драйвер (parallel.sys), а дальше Read/WriteFileом читать/писать?


Только получить handle не на драйвер, а на объект им созданным, получить handle на драйвер(DRIVER_OBJECT) конечно можно, но вот что-либо сделать с ним трудно. А вот получить handle на объект устройства(DEVICE_OBJECT), созданный драйвером можно и писать в него можно, надо просто открыть порт LPTX и писать в него.
Записан
um
Гость
« Ответ #8 : 01-07-2003 11:39 » 

А если попробовать через Win98. Была у меня задачка (под эту ось) - написать прогу по обмену с кассетой станка с ЧПУ через LPT - получилось даже на уровне аппликации. Понимаю, там все проще в отношении ресурсов, но все-таки... В NT я новичок, но также полагаю, что возможно мешает стандартный драйвер, т.к. управляющие сигнальные линии используются нестандартно (переназначены под свою задачу).
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #9 : 01-07-2003 11:42 » 

Разница между 2000 и 98 огромна 98 оставляет открытми ресурсы портов, я тоже писал на  асме прямой доступ по адресам реальным в 98 винде.

А вот 2000 то же самое можно сделаь только средствами драйвера.
Записан

А птичку нашу прошу не обижать!!!
um
Гость
« Ответ #10 : 01-07-2003 11:52 » 

Я совершенно согласен, поэтому протокол обмена с девайсом рекомендую отладить именно в системе, где нет ограничений на ПД к портам. А уже потом портировать на более сложную в этом отношении ось. Дело в том, что у меня тоже возникали заморочки при разработке ПО для интерфейса с устройством. Кстати, необходимо учитывать быстродействие порта и своего девайса (схемотехнику).
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #11 : 01-07-2003 11:54 » 

А это кстати мысль - вопрос в другом, насколько та работа которую будет делать программа возможно написать в 98 - так что бы работало в 2000...

Тут как бы двойная работа получается и проблема при двухпроцессорной машине, хотя ....
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #12 : 01-07-2003 11:59 » 

to Grom. Не забывай о методе, предложенном AlekDShadow, о том как разрешить писать в порты из юзер мода на ОС направления NT.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #13 : 01-07-2003 12:03 » 

http://www.shelek.com/club/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=397&11


Да вот ссылка но там все равно написание драйвера - пусть не устройства а так, который получает доступ к реальным адресам и через него , как я помню пишутся все комманды.
Записан

А птичку нашу прошу не обижать!!!
um
Гость
« Ответ #14 : 01-07-2003 12:10 » 

У меня появилась еще одна мысль, но ее не проверял. Возможно порты в BIOS'е на этих машинах сконфигурированы по-разному. А в отношении двухпроцессорной конфигурации - в чем проблема?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #15 : 01-07-2003 12:22 » 

Цитата: um
У меня появилась еще одна мысль, но ее не проверял. Возможно порты в BIOS'е на этих машинах сконфигурированы по-разному. А в отношении двухпроцессорной конфигурации - в чем проблема?

Порты действительно могут иметь разные адреса, количество процессоров на LPT порт не влияет, а вот то что ты там мог с синхронизацией нахимичить- это да, и на одном проце это было незаметно, а на двух проявилось.
Записан
um
Гость
« Ответ #16 : 01-07-2003 13:49 » 

Я имел ввиду не адреса, а режим работы - ECP, EPP, ...
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #17 : 01-07-2003 13:59 » 

Ты кстати в DDK читал-
 Microsoft recommends that hardware vendors design new multifunction print devices using composite USB interfaces, and strongly recommends against using IEEE 1284.4 interfaces. This documentation might be removed from all future versions of the Windows DDK. Microsoft-supplied drivers that support IEEE 1284.4 interfaces might be removed from all future versions of the Windows operating system.

В 64 разрядных версиях они уже это сделали.
Записан
um
Гость
« Ответ #18 : 01-07-2003 14:00 » 

Кстати, забыл спросить, каковы признаки того, что прога неправильно работает? Обмен вообще не происходит или, скажем, во внешнюю память записываются/считываются неправильные данные?
Цитата

На одном P4 вдвое медленнее (а через месяца полтора перестало работать). На другом P4 не работало изначально.

Что вообще значит - "не работало изначально"? А порт часом не откинулся?Лечение - по симптомам!
Записан
um
Гость
« Ответ #19 : 01-07-2003 14:09 » 

2SlavaI
LPT (и RS-232) - интерфейсы конечно устаревшие, но рабочее железо выбрасывать жалко. Тем более, для такой задачи он в самый раз годится: простота - залог успеха. В принципе, это устройство можно переделать под USB - необходима всего лишь одна ИМС (какая не помню) - см. ж-л "Радио" за этот год.
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #20 : 02-07-2003 05:49 » 

Цитата: um
Кстати, забыл спросить, каковы признаки того, что прога неправильно работает? Обмен вообще не происходит или, скажем, во внешнюю память записываются/считываются неправильные данные?
Цитата

На одном P4 вдвое медленнее (а через месяца полтора перестало работать). На другом P4 не работало изначально.

Что вообще значит - "не работало изначально"? А порт часом не откинулся?Лечение - по симптомам!

Обмен вообще не происходит (это на той машине, что перестала работать). А на той где не работало изначально еще и ошибку выдает при попытке обращения, сейчас не помню какую. Под Вынь98 на той же машине все прекрасно и быстро работает.
Записан
um
Гость
« Ответ #21 : 02-07-2003 09:48 » 

Тогда, видимо, это действительно определяется ОС и ее драйверами портов. Может, в системе установлен какой-нить драйвер принтера или сканера, который тормозит обмен по порту? Был у нас такой старенький (HP IntelliScan) - страшно тормозил P4 и не только при сканировании.
Более детальными советами по Win2k я пока поделиться не могу - работаю на под ней мало:)
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #22 : 02-07-2003 10:17 » 

В общем резюме такое:
1. Если нужно только чтение/запись--можно попробовать обойтись только приложением.
2. В противном случае--писать небольшой драйвер Ага , который будет общаться с системным.
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #23 : 03-07-2003 05:50 » 

Никаких других драйверов под ЛПТ не стояло. Пробовал вообще на голую систему ставить - как не работало, так и не работает.

Вопрос остается - смогу я пользоваться встроенным ECP и как мне это делать?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #24 : 03-07-2003 06:20 » 

little, Голая система вещь относительная LPT встроенный дрйвер в Вин есть всегда...
Записан

А птичку нашу прошу не обижать!!!
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #25 : 03-07-2003 07:13 » 

Цитата: Гром
little, Голая система вещь относительная LPT встроенный дрйвер в Вин есть всегда...


2little Посмотри: Правой кнопкой на Мой Комп--Свойства--Оборудование--Диспечер Устройств--Порты COM и LPT--порт принтера--Драйвер.
Попробуй его удалить, а потом перегрузи комп и посмотри что получиться  Отлично

P.S. Это все относиться к Win2000/NT.
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #26 : 04-07-2003 05:47 » 

НАрод, вы куда-то упорно уползаете от ответа на прямой вопрос: Смогу я в своей софтине, используя встроенный драйвер, юзать ECP для общения с моим девайсом, или же придется писать свой драйвер?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #27 : 04-07-2003 06:11 » 

Цитата: little
НАрод, вы куда-то упорно уползаете от ответа на прямой вопрос: Смогу я в своей софтине, используя встроенный драйвер, юзать ECP для общения с моим девайсом, или же придется писать свой драйвер?


Сможешь, скорее всего. В DDK есть исходники драйвера параллельного порта- неужели за неделю ты не мог с ними разобраться и понять- подходит он для твоих целей или нет.
ECP он поддерживает, мне так кажется.
Просто всем влом разбираться со стандартным драйвером.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #28 : 04-07-2003 06:17 » 

Вот не поленился и прочитал описание к исходникам драйвера параллельного порта. Он поддерживает

IEEE 1284.3 Bounded ECP Mode
IEEE 1284 ECP Mode (generic)
Hardware ECP Mode - Hardware based signaling
Software ECP - Software Emulated Signaling

Тебя это спасет? Даже исходники всего этого дела есть.
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #29 : 04-07-2003 06:24 » 

Спасибо, а, может, еще и ссылки имеются на описание IEEE1284? А то я максимум что нашел - Описание ECP от Майкрософт и драфты IEEE1284 на фтп Лексмарка.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #30 : 04-07-2003 06:54 » 

Описание IEEE 1284 за деньги продают, долларов 20.
Записан
DrvBeginner
Гость
« Ответ #31 : 04-07-2003 07:52 » 

Стандартов IEEE1284 четыре:

1284-2000 IEEE Standard Signaling Method for a Bidirectional
Parallel Peripheral Interface for Personal Computers

1284.1-1997 IEEE Standard for Information Technology--Transport
Independent Printer/System Interface (TIP/SI)

1284.3-2000 IEEE Standard for Interface and Protocol Extensions
to IEEE Std 1284 Compliant Peripherals and Host Adapters

1284.4-2000 IEEE Standard for Data Delivery and Logical
Channels for IEEE Std 1284 Interfaces

У меня есть первый (основной) и последний, ссылки откуда были взяты - теперь мертвые. Могу закачать например на местный ftp, если позволят (вообще то стандарты IEEE платные и теоретически могут быть неприятности).

Интересно, а как ты делал ECP-устройство не имея в руках стандарта?
И почему ECP? Он все же довольно сложноватый? Если скорость высокая не нужна - почему не просто режим SPP? А на более высокой - EPP неплох.
Я работаю в режиме EPP напрямую с портами из апликации, для NT/2000/XP просто открываю доступ к портам I/O c помощъю драйвера PortTalk (open source!):  http://www.beyondlogic.org/porttalk/porttalk.htm
Понимаю, что это не совсем честное решение, но свои задачи выполняет, все работает.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #32 : 04-07-2003 08:49 » 

Цитата: DrvBeginner
Я работаю в режиме EPP напрямую с портами из апликации, для NT/2000/XP просто открываю доступ к портам I/O c помощъю драйвера PortTalk (open source!):  http://www.beyondlogic.org/porttalk/porttalk.htm

 Очень интересная ссылочка Быть такого не может
Слушай, а прерывания в этом случае тоже можно из аппликухи ловить? :!:
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #33 : 04-07-2003 08:55 » 

Цитата: Артем
Цитата: DrvBeginner
Я работаю в режиме EPP напрямую с портами из апликации, для NT/2000/XP просто открываю доступ к портам I/O c помощъю драйвера PortTalk (open source!):  http://www.beyondlogic.org/porttalk/porttalk.htm

 Очень интересная ссылочка Быть такого не может
Слушай, а прерывания в этом случае тоже можно из аппликухи ловить? :!:


НЕТ!
Записан
DrvBeginner
Гость
« Ответ #34 : 04-07-2003 08:58 » 

Цитата: SlavaI
Описание IEEE 1284 за деньги продают, долларов 20.


IEEE1284-2000  - $108,  другие того же порядка.
См. http://shop.ieee.org/store/ , там идем на закладку "Search" (ибо Quick Search находит не все!), вводим "1284" в "Search by IEEE standard number".
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #35 : 04-07-2003 09:20 » 

Можно - ывкладывая - только название смени и я линк оставлю только здесь - дабы не смущать его видом сайт Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #36 : 04-07-2003 09:20 » 

Продают всякое старье за стольник.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #37 : 04-07-2003 10:23 » 

Цитата: SlavaI
Цитата: Артем
Цитата: DrvBeginner
Я работаю в режиме EPP напрямую с портами из апликации, для NT/2000/XP просто открываю доступ к портам I/O c помощъю драйвера PortTalk (open source!):  http://www.beyondlogic.org/porttalk/porttalk.htm

 Очень интересная ссылочка Быть такого не может
Слушай, а прерывания в этом случае тоже можно из аппликухи ловить? :!:


НЕТ!


Вот и я о том же Жжешь
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #38 : 04-07-2003 10:59 » 

А вобще то Alek D. Shadow уже говорил об этих ф-циях, еще в старом форуме-
 
                void Ke386SetIoAccessMap(int, IOPM *);
   void Ke386QueryIoAccessMap(int, IOPM *);
   void Ke386IoSetAccessProcess(PEPROCESS, int);

Они позволяют сделать действительной маску портов ввода-вывода для процесса, а по дефолту указатель на начало этой маски указывает за пределы TSS.
Записан
DrvBeginner
Гость
« Ответ #39 : 04-07-2003 11:03 » 

Цитата: Артем

Вот и я о том же Жжешь

А автору исходного сообщения это было и не нужно, вот что было написано:
Цитата: little

... потому как программа записи не общалась напрямую с портом, что Винда2000 ей не позволяла.

В данном конкретном случае PortTalk - было бы самое то. В отличие от решений когда для каждого I/O нужно переключаться в Kernel-mode и обратно - конечно это тормозило! Контроллер на MCS51 чтобы обслуживать ECP - к чему это все в данном случае?
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines