Co-Simulation/Дневник
- Техническое задание
- Описание FT2232H
- Описание FT232H
- (TUMPA) TIAO USB Multi Protocol Adapter
- (TUMPA) Litle
- Описание макета
- Примеры кода
Содержание |
2013-11-02 Анализ текущего состояния проекта
- При запуске моделирования наблюдается следующее
Модельное время модельная частота Шина вх\вых Время моделирования 1 мс 10 МГц 512\16 ~20 сек 1 мс 10 МГц 512\512 ~20 сек 1 мс 10 МГц 1024\1024 ~20 сек
- установка буфера разной величины не влияет
- получаем 1 мс - 10 МГц - 10000 переключений => 20 сек/10000 = 2 мс
- анализ функций из драйвера микросхемы показывает..., что минимальная задержка при чтении буфера и записи в буфер 1 мс
-
так как за цикл работы эмулятора происходит пересылка туда и обратно, то напрашивается вывод, что время работы ограничивается этой задержкой.
-
TO-DO: попробовать установить задержу равную 0 и обрабатывать самому события приема и посылки данных.
2013-11-22 (Revision 31)
Проведена проверка скорости работы в режиме только отправки от ПК в FTDI-мост.....
- С++ проект модифицирован для оправки.
- VHDL-модель была скорректирована только для чтения из FTDI и ширина регистра установлена равной 256 бит (32 байта).
- В результате получена скорость работы следующая: 10000 циклов посылки 64 Кбайт выполняется за 31 с = 20 Мбайт/с - предельная скорость .... так как буфер сделать больше нельзя (64 Кбайт предел), а при уменьшении пуза при обработке пакетов минимальная 120-240 мкс (плавает). Т.е. если посылать 1 байт, то между посылками будет пауза 120 -240 мкс..... при увеличении пачки посылаемых данных длительность паузы нивелируется за счет более быстрой работы во время передачи одного пакета.
- Во время передачи пакета без задержек выполняется передача 512 байт, потом 10 мкс пауза (FTDI наполняет внутренний регистр) и снова 512 байт за ~10 мкс (потом снова пауза 10 мкс) и т.д.
2013-11-26
- Анализ алгоритма работы USB-шины (с чего нужно было начинать) Статья с вики Шина_USB объясняет задержку время 2 мс(по 1 мс на прием и отправку, действия инициируются каждую мс) между посылкой и приемом информации
Вывод неутешительный ..... если наблюдаем не 10000 и более сигналов то usb не дает требуемой скорости.
2013-12-05 (по драйверам для PCI)
Изучаем материал по драйверам для pci (еще нужно глянуть на LAN)
А для системщика под виндой WinDDK вообще как вода для страждущего. Разве только... кубик сухого льда не повредит. Кстати, надеюсь уже все в курсе, что существует конвертер из SOURCE-файлов(для утилиты BUILD) в проекты под VC 5.0/6.0 . Дешево и сердито. Стянул, кажется у NuMega... Библиотеки функций (и классов) WinDK (C и C++ отдельно, www.bluewatersystems.com) и Driver::Works (только C++, www.numega.com) я получил на одном и том же диске (С/С++ для Профессионалов, достало словечко). Оба пакета содержат хорошие Wizardы для Visual C++, есть примеры для PCI/USB устройств, поддержка WDM-дров. Использую WinDK, т.к. другой существенно (проверял) более громоздкий и слишком удален от базового набора примитивов в WinDDK. Тогда как в WinDK они используются прямо в рабочих структурах. Можно чередовать сервисные библиотечные и стандартные функции (только если понимаешь, что делаешь — RTFM), поскольку все прозрачно. IMHO WinDK это на 5, Driver::Works на 4, но более распространен, судя по количеству примеров и ссылок. Ну что поделаешь, NuMega -- авторитет 8)
- http://www.linux.org.ru/forum/development/1345028
- http://qnx.org.ru/forum/index.php?topic=6419.0;wap2
Как написать драйвера? (любые в частности для PCI)
Numega Driver Studio имеет в своем составе аналогичный компонент: Driver Agent сгенерит все необходимое для использования универсального драйвера. Вы даже сможете создать свой файл .sys, который будет работать в составе ядра и делать там все, что вы запрограммируете, например обрабатывать прерывания. При этом вникать опять же ни во что не придется. За день разработаете свой драйвер.
Оба пакета содержат средства для написания настоящих драйверов, НО при помощи DriverStudio или WinDriver это делать значительно проще, чем при помощи только DDK, в дополнение они имеют хорошую документацию касающуюся общих вопросов драйверов, более читаемую чем в DDK. Кстати DDK для работы с ними необходимо установить.
Установив Numega Driver Works, Вы открываете студию (не Driver, а Microsoft Visual Studio), выбираете там NewProject и видете в окне мастера рядом с MFC App Wizard NT/WDM Driver Wizard Мастер за 9 шагов, сгенерит проект из которого получается драйвер и exe-шник, который этот драйвер тестирует. Кроме того в Driver Studio входит (я бы назвал это Driver Developmen Foundational Classes) набор классов, которые содержат все необходимое для разработки драйверов, так же как MFC для разработки приложений.
Ну, а если вам необходимо прочитать - записать байт в порт, не используя прерываний, так тут ни каких драйверов писать не надо, все уже написано до нас.
Универсальный драйвер, который позволяет обращаться к портам ввода-вывода. Больше он ничего не может, но в большинстве случаев можно обойтись и этим. Драйвер этот называется PortIo.sys и входит в состав примеров прилагаемых к Numega Driver Works. Я его скомпилировал, вам остается скачать и использовать. Драйвер предоставляет 4 функции: Open, Close, Read и Write. Есть тестовое приложение, которое демонстрирует как эти функции использовать. Чтобы установить драйвер надо: [1]
- Пример работы с драйвером IO
- http://code.msdn.microsoft.com/windowshardware/Windows-8-Driver-Samples-5e1aa62e
- http://www.altera.com/literature/ug/ug_ethernet.pdf
2013-12-04
2013 12 10
Продолжаем обзор usb http://www.softelectro.ru/usb.html
Обращаем взор на LPT порт судя по инфе из вики [2]
Стандарт позволяет использовать интерфейс в нескольких режимах:
- SPP (Standard Parallel Port) — однонаправленный порт, полностью совместим с интерфейсом Centronics.
- Nibble Mode — позволяет организовать двунаправленный обмен данными в режиме SPP путём использования управляющих линий (4 бит) для передачи данных от периферийного устройства к контроллеру. Исторически это был единственный способ использовать Centronics для двустороннего обмена данными.
- Byte Mode — редко используемый режим двустороннего обмена данными. Использовался в некоторых старых контроллерах до принятия стандарта IEEE 1284.
- EPP (Enhanced Parallel Port) — разработан компаниями Intel, Xircom и Zenith Data Systems — двунаправленный порт, со скоростью передачи данных до 2МБайт/сек.(1991)
- ЕСР (Extended Capabilities Port) — разработан компаниями Hewlett-Packard и Microsoft — в дополнение появились такие возможности, как наличие аппаратного сжатия данных, наличие буфера и возможность работы в режиме DMA.
Ищем перевод стандарта
- http://www.rusdoc.ru/material/hardware/iee/ieee_1284.htm
- http://www.dsioffe.narod.ru/stuff/ieee1284/ieee_1284.htm
Описание работы порта на регистровом уровне с примерами на DELPHI
Описание работы SPP режима(до 2МБ/c) с временными диаграммами
- http://wiki.auditory.ru/Интерфейс_Centronics
- О пакете WinDriver, или как можно написать драйвер устройства сразу для нескольких ОС
- [3]
- Описание имен ног LPT порта !!
- описание имен ног LPT порта
- запрос на перевод в режим EPP
- Работа с LPT портом в режиме
- Инициализация режима EPP
- мой проектик с времянками (Lpt.rar)
- Времянка для установки режима порта (EPP_init2.zip)
Пример
Проба программки в епп режиме
2013 12 17
- Делаем схему согласования LPT 5В и 3.3В FPGA
- Используем буфер с тремя состояниями in74hc244a
Вопрос с режимом EPP решен
- Все оказалось просто нужно было вкурить мануал повнимательнее
- Для генерации управляющих сигналов и обмена даными в EPP-режиме согласно описанной диаграмме нужно производить запись или чтение дополнительные (этими регистрами EPP отличается от SPP режима) в регистры по адресу +3 или +4 от базового адреса (x378) (в десятичной форме это (dec)891 (dec)892 в шестнадцатеричной форме x37B, x37D)
- Я в первоначальных экспериментах использовал запись в регистр данных как в примере с +0 смещением.
Если писать в эти регистры, контроллер аппаратно выполняет управление служебными сигналами согласно диаграмме
- Запись и чтение из порта x37B, x37D – одинаковое для примера чтение одного, а запись в другой приведены... отличаются лишь тем, что для регистра по адресу x37B управляющий сигнал DataStrb#, а для регистра x37D сигнал AddrStrb#
LPT
драйвера
- http://mavius.mavjuz.com/projects/lpt/
- http://www.highrez.co.uk/Downloads/InpOut32/
- http://ru3dnn.jimdo.com/про-win-test/win-test-lpt-windows-7-64-bit/
реальная скорость LPT
- http://chipnews.gaw.ru/html.cgi/arhiv/00_07/stat_58.htm
- http://rudocs.exdat.com/docs/index-36981.html?page=19
PCI
- http://ru.osdev.wikia.com/wiki/Функционирование_шины_PCI
- http://www.about-pc.narod.ru/part4/mother6.html
- http://ru.osdev.wikia.com/wiki/Описание_сигналов_шины_PCI
- http://www.elart.narod.ru/articles/article32/article32.pdf
- http://www.sm1820.ru/KSNews_167.htm
- С ПРИМЕРОМ НА ВЕРИЛОГЕ) http://www.fpga4fun.com/PCI2.html