|
|
|
|
цена соизмерима |
|
|
На PL2303 нет битбанга. |
|
|
Интересные замечания по теме: 1. У меня есть программа - программатор для микросхем 24cXX, работающая через ЛПТ. Я ее писал во времена голого ДОСа и Виндовс-98. Совсем недавно я как-то даже не задумываясь запустил ее из-под Виндовс-ХР и отработал то, что мне было надо (работа с модулем I2C по адресу устройства, отличному от 0 - фирменные программаторы этого не могут). И только потом сообразил, что под ХР прямой доступ к портам не работает!!! Оказалось, что все-таки работает, если только не пользоваться регистром управления (у меня задействован регистр данных и регистр статуса). Только работает на 2 порядка медленнее, чем из-под голого ДОСа. (на ВИН-98 тоже медленнее, чем из ДОСа). А вот регистр управления точно недоступен - и не читается, и не пишется. 2. На старых портах ЛПТ регистр управления (CR) допускал запись в порт и чтение состояния внешних линий (имеется в виду прямой доступ из-под ДОС). На современных читается не состояние линий, а то, что записано в регистр. Это две большие разницы. Свой "Супертаймер", например, мне пришлось переписывать, заменив чтение из CR на чтение из регистра статуса - там читается именно состояние линий. Вот. |
|
|
musor: кабель для старого сотана alx25v: на ... нет битбанга rx3apf: мост USB-UART ... отвязываем оптопарой ... дальше микроконтроллер Арс: цена да уж, когда кто подарит бери-не-хочу FT232/PL230X/CP210Х/211Х их-есть-у-меня, или для разминки, колдуя над готовой платкой USB/UART-модуля пауком uC-одночипа, мы кто-в-доле за пару-тройку часов такой бит-банг сорганизуем да терминалом отладим, что даже без развязки - щастя хватит в полный рост: опись-про́токол, байт сдал-приня́л… отпечатки пальцев! а-ля однобайтовая структура посылок с адресацией скажем 32-х I/O-бит 8-ю командами: эхо, направление/подтяжка, установить/сбросить немедленно/отложено до следующего и т.п., а в ответ - тишина, тьфу - чтение; если ж битов мало, то сразу - гоу в порт а уж опосля, к этому - долго-долго будем ваять W7 platform GUI |
|
|
AN1440: И только потом сообразил, что под ХР прямой доступ к портам не работает!!! Скорее всего уже когда-то Вы открыли прямой доступ к портам в этой ОС, установив соответствующий драйвер. Возможно даже не осознавая этого, при установке какой нибудь программы он сам поставился. Например, известная программа СпидФан устанавливает такой драйвер и открывает прямой доступ к портам. Ну или работаете с ЛПТ-портом как с файлом. Но там тогда могут вылезти проблемы с отработкой правильных временных интервалов. Да и надо физически эмулировать принтер на приёмной стороне(некоторые пины к нужным напряжениям притянуть и АСК выдавать). birua: колдуя над готовой платкой USB/UART-модуля пауком uC-одночипа, мы кто-в-доле за пару-тройку часов такой бит-банг сорганизуем да терминалом отладим, что даже без развязки - щастя хватит в полный рост: опись-про́токол, байт сдал-приня́л… отпечатки пальцев! а-ля однобайтовая структура посылок с адресацией скажем 32-х I/O-бит 8-ю командами: эхо, направление/подтяжка, установить/сбросить немедленно/отложено до следующего и т.п., а в ответ - тишина, тьфу - чтение; если ж битов мало, то сразу - гоу в порт Это всё понятно и никаких проблем с этим нет, кроме того что я ещё до этого не дошёл Пока буду двигаться по намеченному направлению: 1) Встраивание прямого тупого моста ЮСБ-8разрядов (на базе ФТ245 или ФТ232) 2)Использование микроконтроллера для работы независимо от компьютера и связь с компьютерном контроллера по ЮСБ или преобразователю ЮСБ-СОМ Мне это больше интересно не как конечный продукт, а как плацдарм для овладения соответствующими технологиями. |
|
|
Арс: какой нибудь Об этом не подумал - СпидФан действительно стоИт на всех машинах, где я производил упражнения. Однако, насколько я знаю, чтобы драйвер использовать, обращение к ему должно быть предусмотрено в программе. А тут программа на ТурбоБейсике досовском - тупо делает OUT PORT%,x и INP(PORT%), даже не подозревая, что на свете существуют какие-то драйвера. И еще тонкость - адрес порта должен быть не тот, которо прописан в Виндоузе в свойствах, а тот, который считывается из памяти переменных БИОС, как это всегда и делали в голом ДОСе. А там он совсем не такой: например, Виндоуз показывает 378h, а из памяти считывается 3BCh, и по ему и обращаемся. |
|
|
AN1440: тобы драйвер использовать, обращение к ему должно быть предусмотрено в программе Не обязательно. Есть такие, что открывают общий доступ всем программам(изменяют там какой-то недокументированный параметр внутрях ОС). Во всяком случае я с таким сталкивался. Не было доступа, потом поставил какой то драйвер и из любой программы мог использовать прямой вывод в порт (port[] в паскале и inp(), outp() в Си). Может достаточно чтобы этот драйвер был загружен другой программой. Только не помню, что за драйвер. Возможно giveio.sys. С ним я больше всего тогда работал.
Этот драйвер написал Dale Roberts черт знает когда, но актуальности от не потерял до сих пор. В кратце расскажу как он работает: в начале работы нашей программы для общения с портами необходимо обратиться к драйверу GiveIO.sys. При этом он установит такие значения битового массива карты разрешения (I/O Permission Map) для нашего приложения, что для него будет разрешен прямой доступ к любым портам. I/O Permission Map это составная часть системы защиты ввода-вывода Windows NT. Он представляет собой битовый массив, каждый бит которого соответствует порту ввода-вывода. Если бит = 1, то доступ к порту закрыт, если 0, то открыт. Для любого пользовательского приложения все биты установлены в 1, и соответственно мы не можем напрямую влезть в порт. GiveIO.sys внаглую влезает в этом массив и везде устанавливает 0 - т.е. можем обращаться к любому порту из приложения.
Вполне возможно доступ открывается всем DOS приложениям, так как они запускаются не напрямую, а через прослойку, которой и даётся доступ к портам. |
|
|
AN1440: Интересные замечания по теме: 3. Современные процессоры способны отрабатывать инструкции за наносекунды, и команды типа OUT должны, казалось бы, проскакивать молниеносно -- фигас два! На исполнение уходит около микросекунды. Подозреваю, что специально затягивается чипсетом. Ни на форумах, ни от Intela вразумительного ответа не получил. Кто знает -- поделитесь! |
|
|
IDiod: На исполнение уходит около микросекунды Это все от ОСи. Для микросекунд Вам нужна особая Real Time OS с минимальным временем задержки. Я когда-то читал статьи на эту тему, были советы как уменьшить время реакции самой винды. Точно не помню, но там есть минимальный отрезок времени для реакции и он составляет миллисекунды (толи десятки, точно не помню). Сейчас все переходят на последовательную передачу данных, чтобы не привязываться к загруженности ОС и только на последнем шаге, с помощью специальной микросхемы, делают параллельную передачу и ее контроль. |
|
|
Все это я уже слышал. -- речь про то, что и внутри выделенного отрезка времени команда OUT выполняется медленно, -- гипотеза о затрате времени на проверку прав доступа тоже отпадает, поскольку факт имеет место быть и в чистом ДОСе (реальный режим работы процессора).. |
|
|
|
|