информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в WindowsЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / hardware
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
На стандартном "системном" LPT-порту нет. Нужен LPT-порт на... 18.03.06 22:21  Число просмотров: 3383
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
На стандартном "системном" LPT-порту нет. Нужен LPT-порт на PCI-плате, с обменом через отображаемую память (memory mapped i/o, не через порты ввода-вывода), там цикл обмена занимает 100 нс.
<hardware>
Помогите по работе с LPT 18.03.06 20:42  
Автор: zpv78 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Помогите, пожалуйста! Мне необходимо принимать информацию через LPT-порт.
Данные идут со скоростью 400 КБ/с. Длительность строба 500 нс, поступает на 10 контакт (Interrupt).
Пробую читать не по прерыванию, а в бесконечном цикле опрашивая наличие строба и читая данные.
Программа работает в DOSе. После ручной установки данных и ручном формировании строба на порту
программа отрабатывает, а при подключении информационного канала, который необходимо читать
пропускает большую часть данных. Подскажите могу ли я прочитать данные с такими характеристиками и
как это делать.
В принципе скорости должно хватить. Скорость чтения из порта... 20.03.06 09:56  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Отредактировано 20.03.06 09:57  Количество правок: 1
<"чистая" ссылка>
> Помогите, пожалуйста! Мне необходимо принимать информацию
> через LPT-порт.
> Данные идут со скоростью 400 КБ/с. Длительность строба 500
> нс, поступает на 10 контакт (Interrupt).
> Пробую читать не по прерыванию, а в бесконечном цикле
> опрашивая наличие строба и читая данные.

В принципе скорости должно хватить. Скорость чтения из порта может достигаеть 1-1.2 Мб/сек.
С другой стороны строб слишком короток, чтоб его пропулить. То есть должен быть более 1 мкс. Кроме того из-за прочих прерываний (таймера, например) возможны пропуски.

> Программа работает в DOSе. После ручной установки данных и
> ручном формировании строба на порту
> программа отрабатывает, а при подключении информационного
> канала, который необходимо читать
> пропускает большую часть данных. Подскажите могу ли я
> прочитать данные с такими характеристиками и
> как это делать.

В ДОСе мапить порты в память не очень просто. Проще будут такие варианты:
1. Продлить строб.
2. Обрабатывать прерывания.
3. Использовать возможности порта ECP/EPP.
Не согласен, при желании не проблема. 20.03.06 15:51  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
> В ДОСе мапить порты в память не очень просто. Проще будут
Не согласен, при желании не проблема.

> такие варианты:
> 1. Продлить строб.
Это точно проще всего.

> 2. Обрабатывать прерывания.
Не успеет.

> 3. Использовать возможности порта ECP/EPP.
Можно попробовать, это доступнее чем PCI-LPT. Но придется возиться с DMA и отключением кеша CPU.

И насчет реальной скорости обмена с LPC super-I/O (где сидит LPT) - у меня есть тест, оценивающий скорость наполнения FIFO UART-а (географически сидит там-же). Дак вот на битовой скорости 921600 за время заполнения 16 байт FIFO 4 из них упевают уйти в линию...


Но может linux заюзать?
EPP/ECP 20.03.06 19:03  
Автор: zpv78 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Строб увеличить не получиться. Приходится подстраиваться под готовый информационный канал. А можно поподробнее по поводу работы в режиме EPP/ECP и как возиться с DMA и зачем отключать кеша CPU, а то я полных лох в этом. Если можно то какие-нибудь наработки, пожалуйста. Буду очень признателен.
В двух словах: 20.03.06 22:01  
Автор: leo <Леонид Юрьев> Статус: Elderman
Отредактировано 21.03.06 08:59  Количество правок: 1
<"чистая" ссылка>
В двух словах:
SSP - это обычный LPT-порт, работает только на вывод данных;
EPP - расширенный LPT-порт, двунаправленный обмен данными;
ECP - "супер" расширенный LPT-порт, двунаправленный обмен данными, опционально через DMA 3;

Тебе нужен ECP с DMA. Переключение режимов - дело тонкое, как правило делается настройки super-I/O или SIO/MIO чипа. Углубляться в это не советую, достаточно просто включить в BIOS.

Так как ввод данных будет идти через DMA (т.е. мимо CPU), то CPU об этом ничего знать не будет, если только ему об этом не "скажит" чипсет. На "правильном" языке это означает, что LPT будет работать в режиме ISA Bus Master DMA.

Как правило, на машинах с PCI вся ISA-шина подключена к основной шине (северному мосту) через PCI. Соответственно, это похоже на работу PCI Bus Master и вот тут самое главное - поддерживает ли связка CPU+север+PCI+ISA/юг протокол разделения доступа к памяти и invalidation кешей CPU. Например, на некоторых относительно старых мат. платах достоверно извесно, что это не работает (KP133 кажется). На всех современных (без ISA-слотов) должно работать, если явно не сказано про DMA от LPT.
CPP|EPP 21.03.06 06:37  
Автор: zpv78 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Блин, как все сложно. Но я попробую поискать информацию по программированию ввода через DMA, и что-нибудь реализовать. Спасибо.
Ничего сложного. Однако использование этих энхенсед режимов... 21.03.06 09:45  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Отредактировано 21.03.06 09:49  Количество правок: 1
<"чистая" ссылка>
> Блин, как все сложно. Но я попробую поискать информацию по

Ничего сложного. Однако использование этих энхенсед режимов позволяет значительно повысить скорость передачи данных.
Сначала нужно доку найти. ЛПТ ориентирован на вывод и умеет через ДМА данные гнать в устройство, при этом автоматически формировать строб и отслеживать линии состояния. Думаю разработчики не полные идиоты, чтоб забыть про реализацию ввода от устройства через ДМА.

> программированию ввода через DMA, и что-нибудь реализовать.

А строб продлить к стати можно и не внедряясь в устройство. Можно обойтись конденсаторами/резисторами или операционником в конце концов.

> Спасибо.
На стандартном "системном" LPT-порту нет. Нужен LPT-порт на... 18.03.06 22:21  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
На стандартном "системном" LPT-порту нет. Нужен LPT-порт на PCI-плате, с обменом через отображаемую память (memory mapped i/o, не через порты ввода-вывода), там цикл обмена занимает 100 нс.
Спасибо, поищу. 19.03.06 10:41  
Автор: zpv78 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach