|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.05.2016, 15:59 | #1 |
Регистрация: 07.05.2016
Сообщений: 3
|
быстрый опрос LPT порта
Небольша вводная - есть программа для прошивки микрух PonyProg, есть пограмматор подключаемый к LPT порту (фактически это переходник, там одна буферная микросхема внутри и шлейф, схема легко ищется по запросу STK200, STK300). Чтоб не плодить сущности, я стараюсь использовать этот переходник вообще в разных целях, с помощью него прошивал SPI флеш и PIC когда нужно было. В принципе можно забыть что у меня есть этот переходник и представить что мы пытаемся дергать выводами LPT порта. Задачка школьная, как если бы мы хотели поморгать светодиодами подключенными к LPT.
Попробуем организовать программный SPI протокол, используя линии LPT D4 -----> Clk LPT D5 -----> MOSI LPT Ack <---- MISO например мне это нужно для программирования какой-нибудь экзотической микросхемы по SPI, есть даташит на нее с описанием команд какие она переваривает, но нет софта. Вспомним суть последовательного обмена по SPI Для передачи бита данных нужно: 1 опустить CLK 2 Выдать бит на MOSI 3 подождать. в это время ведомое устройство увидит что упал CLK и выдаст бит на линию MISO. задержка нужна чтоб ведомое устройство успело это сделать. 4 считать бит с MISO 5 поднять CLK 6 подождать. в это время ведомое устройство увидит что поднялся CLK и прочитает бит на с линии MOSI которые мы выставили в пункте 2. задержка нужна чтоб ведомое устройство успело это сделать. И так восемь раз. Предварительно выводимый байт данных надо попилить на биты, а принятые биты склеить в байт. Если не рассматривать этот процесс резания-сдвигания-склеивания, и исключить задержки, то в сухом остатке передача байта по SPI может выглядеть так: mov ecx,1024*1024 ; милион lab1: mov bl,8 ; передача бита по SPI: lab2: mov dx,378h ; базовый адрес порта out dx,al ; роняем CLK D4 и устанавливаем данные D5 mov dx,379h in al,dx ; читаем данные ACK mov dx,378h out dx,al ; поднимаем CLK D4 dec bl ; повторяем 8 раз, передается один байт jnz lab2 dec ecx jnz lab1 ; повторяем мильен раз, передается один мегабайт напомню, что это упрощенная модель передачи из двенадцати процессорных команд. осмысленные данные не подготавливаются должным образом и не сохраняются, через порт мы прокачиваем мусор. Нам важна суть процесса и его скорость. так вот этот код скомпилированный в COM файл в DOS выполняется кошмарно долго, 31 секунду. То есть восемь мегабайт мы будем прокачивать четыре минуты. В то же время PonyProg считывает восемь мегабайт за пять (!) секунд и похоже это не предел. Как достичь таких же скоростей ? Открыть LPT как файл под виндовс и вкачать в него данные, рассчитывая что все будет работать через DMI - можно, но безсмысленно. мне же нужно в промежутках между посылкой битов D4 D5 опрашивать линию ACK. У меня даже идеи не возникает как PonyProg это делает. Есть у кого-нибудь идеи ? все упирается в последовательность out dx,al in al,dx out dx,al которая работает неприемлимо долго, что под DOS что под Windosw/ А упрощать ее дальше некуда. PonyProg в пятьдесят раз быстрее прокачивает данные, используя тот же LPT порт и те же линии D4 D5 ACK, и похоже это не предел. В программе есть пункт "калибровка" в зависимости от скорости ПК. Должен быть другой способ изменить D4 D5 и опросить Ack - какой ? |
07.05.2016, 17:54 | #2 |
Форумчанин
Регистрация: 23.01.2016
Сообщений: 608
|
Под виндами с LPT - разве что через DeviceIOControl() http://rsdn.ru/?article/baseserv/directhard.xml. Либо не мучить код и работать через готовый драйвер прямого доступа, например есть обертка inpout32.dll/inpout64.dll. С шаговиками проблем не было. Да даже с I2C интерфейсом, который более требовательный:
Код:
|
07.05.2016, 19:24 | #3 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
serg8825, ты испытывал на работоспособность прошитую твоим способом память? У SPI помоему зонная запись, и штатные программаторы (типа пони) знают в какую область что писАть. Если тупо зальёшь в неё данные, думаю не прокатит..
Нашедшего выход - затаптывают первым..
|
07.05.2016, 21:14 | #4 | |
Регистрация: 07.05.2016
Сообщений: 3
|
Цитата:
Прошивал биосы материнок и видюх, проблем не видел. |
|
07.05.2016, 21:51 | #5 | |
Регистрация: 07.05.2016
Сообщений: 3
|
Цитата:
По FTDI чипы спасибо за наводку, надо посмотреть. Навскидку что там по скорости ? inpout32.dll - надо посмотреть что это, но если это просто обертка для инструкций in out, позволяющая выполнять их из режима пользователя то она бесполезна, я и так их могу выполнять через свой драйвер. Вопрос в том почему эти in out так тормозят и что такого придумал PonyProg чтоб LPT не тупил. 1.5Мбайт/сек которые прокачивает PonyProg мне вполне достаточно. может там вообще решение на поверхности. COM файл под DOS приведен условно, это не значит что я сижу под DOS. Я могу этот фрагмент кода вписать в тело драйвера и он будет выполняться на нулевом кольце. Вот только медленно он выполняется, откуда бы ни был запущен. Последний раз редактировалось serg8825; 07.05.2016 в 22:10. |
|
07.05.2016, 22:15 | #6 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
serg8825, зачем изобретать велосипед, когда за тебя его уже давно изобрели?
Какие ты флешки хочешь шить? Я тебе найду под неё софт, дизассемблируешь его и посмотришь, как там всё устроено.. А пони давно уже труп и годится только для древних девайсов. Он никогда не шил SPI, а если и шил то криво-косо..
Нашедшего выход - затаптывают первым..
|
08.05.2016, 07:03 | #7 | |||||
Форумчанин
Регистрация: 23.01.2016
Сообщений: 608
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
|||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ПРОВЕРКА LPT порта | bit.um | Компьютерное железо | 2 | 17.12.2011 20:26 |
Мониторинг LPT-порта | _SERGEYX_ | Общие вопросы Delphi | 1 | 11.01.2010 17:38 |
опрос порта по расписанию | Joslen_bomon | Microsoft Office Excel | 2 | 03.12.2009 21:17 |
опрос порта ЛПТ | shide | Общие вопросы Delphi | 2 | 08.10.2009 19:27 |
программирование lpt порта | alexs2141 | Общие вопросы Delphi | 5 | 07.06.2008 17:10 |