roboforum.ru

Технический форум по робототехнике.

 

FT245 + D2xx

Обсуждаем рождающиеся мысли и результаты экспериментов.

Re: FT245 + D2xx

Сообщение AndreiSk » 11 июн 2013, 14:02

1) убери проверку TXE, просто фигачь без проверки дергай WR только, ничего ты там не заддосишь.
2) выставляй SND пин
Аватара пользователя
AndreiSk
 
Сообщения: 2618
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: FT245 + D2xx

Сообщение Madf » 11 июн 2013, 14:26

1. если убрать TXE проверку, то тупо данные будут пропадать, но попробую
2. что за такой пин SND? У меня такой модуль:

Изображение

Нет там такого.
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: FT245 + D2xx

Сообщение AndreiSk » 11 июн 2013, 15:07

название чипа тогда надо, и даташит... можт там в принципе быстрее нельзя
Аватара пользователя
AndreiSk
 
Сообщения: 2618
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: FT245 + D2xx

Сообщение Madf » 11 июн 2013, 15:28

http://www.ftdichip.com/Support/Documen ... FT245R.pdf

Добавлено спустя 13 минут 2 секунды:
Из датащита: Data transfer rates up to 1Mbyte / second.
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: FT245 + D2xx

Сообщение Dmitry__ » 11 июн 2013, 15:33

Madf писал(а):А зачем тебе exe-ник? Он привязан к моему устройству по имени, гибкую систему с выбором устройства - не делал. Как будешь подцепляться?

Программой редактирования eeprom залил в свой модуль "FT245R USB Parallel FIFO", твоя программа увидела, на жамканье кнопки светодиода - все ок. На жамканье "V1+" - ошибка, run-time error 9, subscript out of range.
Напиши тест: Отсылать в порт всякую хрень и принимать всякую хрень (не проверять что принимается, только подсчитывать байты). 10 секунд отсыла/приема, потом подсчет скорости. Я подключу к модулю свою плату, которая будет щелкать wr/rd по rxf/txe

Madf писал(а):Из картины видно, что МК легко "ддос"-ит FT245 и она перегружена, раз TXE находится всегда не в 0 и принимает всё только по 1 байту (внутренний буфер переполнен), комп не успевает принимать данные. Т.ч. проблема в связке PC+FT245.

Ну, мягко говоря, ты и проверил что я хотел. А теперь засунь свои амбиции в тряпочку и читай мои сообщения про работу с буферами :D
Вот еще глянь эту табличку, уж больно скорость по vcp по картинке смахивает с твоей скоростью.
http://www.efo.ru/doc/Ftdi/Ftdi.pl?2394
Запусти MProg3.5 и выстави там все правильно, типа usb2.0 и.т.д. А еще залезь в диспетчер устройств и проверь снятую галку с "загрузить VCP"
Во чего нарыл на эфо:
http://www.efo.ru/doc/Ftdi/Ftdi.pl?778
Программа "D2XXApp" EXE ZIP
Программа представляет собой пример приложения, выполненного в среде Borland C++ Builder v.5.0 и использующего драйверы D2XX. Она позволяет передавать и принимать данные по USB как в стандартных режимах UART и FIFO, так и в режиме "Bitbang". Вы можете скачать исполняемый модуль этой программы, а также исходные файлы проекта.

Показывает скорость от 1мбит до 4-х мбит. Это у меня на ноуте 1.6ггц, на вендахXP под виртуалбоксом под линухом :D
Да, если не засунешь свои амбиции в тряпочку, то читай тут :)
Также следует учитывать, что максимальная скорость достигается только в том случае, если данные передаются не по одному байту, а строкой. При побайтовой передаче установленная скорость распространяется только на передачу отдельных бит внутри байта. Длительность интервала времени между передачей отдельных байт в этом случае не поддается управлению и значительно снижает скорость передачи всего массива данных.

http://www.efo.ru/doc/Ftdi/Ftdi.pl?497
Аватара пользователя
Dmitry__
 
Сообщения: 6047
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: FT245 + D2xx

Сообщение Madf » 11 июн 2013, 16:25

Амбиций никаких нет, скорее на оборот.

Моя прога так делает (ничего не проверяет):

- по нажатию кнопки "V1+" вначале отсылает команду "start"+0D (чтобы МК начал выплёвывать данные ровного объёма)
- потом включает засечку времени и начинает принимать любые данные из буфера/порта
- по завершению передачи происходит принудительная запись принятых данных в файл "d:\D2xx.txt" (для последующего анализа глазом). Если нет раздела диска D, то будет ошибка, т.к. обработчик не делал. Возможно в этом и проблема.
Определение конца приёма данных происходит по алгоритму ожидания таймаута, если в течении 300 ms ничего не принимается - значит всё. Сделал так, чтобы не усложнять протокол обмена (не передавать всякие там длины пакета и CRC).

Остальное попробую, спасибо.
"загрузить VCP" - помню точно эту штуку не отключал в драйверах. Кстати пробовал D2xx ставить скорость больше 3Мб - выдает ошибку.

На счет буфера, как ты себе представляешь в языка работать "напрямую с буфером"? Мне FT_Read.. и так отдает массив данных, я его и добавляю в другой имеющийся массив - быстрее уже никак не сделать, если только на другом языке (более быстром). Предлагаю тебе написать прогу и дать мне, я зупущу её на своей железке..

Добавлено спустя 14 минут 29 секунд:
Dmitry__ писал(а):
Также следует учитывать, что максимальная скорость достигается только в том случае, если данные передаются не по одному байту, а строкой. При побайтовой передаче установленная скорость распространяется только на передачу отдельных бит внутри байта. Длительность интервала времени между передачей отдельных байт в этом случае не поддается управлению и значительно снижает скорость передачи всего массива данных.

http://www.efo.ru/doc/Ftdi/Ftdi.pl?497

Тут видимо пилить надо "FT_Read", который пока у меня не запустился, на нем возможно скорость передачи повысится. Хотя как писал ранее, на "FT_ReadByte" мне прилетает всё равно массив, а не 1 байт. Т.ч. всё это пока сомнительно.
Вообще большинство документации/ссылки я видел, большинство из них описывают алгоритм завязанные на последовательной передачи и что касаемо чипа 245 - информации очень мало и не факт, что применимо к ней.

Добавлено спустя 8 минут 28 секунд:
Из этой доки: http://strawberry-linux.com/pub/AN232R- ... gModes.pdf
Указано следующее:
FT_SetBaudRate - The rate of data transfer can be controlled by using the FT_SetBaudRate command. The maximum Baud rate is 3MBaud, but to allow time for the data to be setup and held around the WR# strobe the Baud rate should be less than 1MBaud.

Прямо противоречие какое-то, в железке написано одно, а на выходе другое.
Есть ещё шанс попробовать "Bit Bang Mode", может там всё кроется..
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: FT245 + D2xx

Сообщение Dmitry__ » 11 июн 2013, 17:03

Madf писал(а):Вообще большинство документации/ссылки я видел, большинство из них описывают алгоритм завязанные на последовательной передачи и что касаемо чипа 245 - информации очень мало и не факт, что применимо к ней.

Да нет никакой разницы между послед. передачей и 245-м. Это все виртуальное.
Допили это
Код: Выделить всёРазвернуть
'****************
'пример передачи
bRead(0) = &HFF 'что угодно
bRead(1) = &H20 '
bRead(2) = &H0   '

WriteCOM32 256 'послать в порт 256 байт

'****************
'примеры приема:

'Id робота
    If Not WaitSerialData(XpsHandle, 0.03) Then GoTo Error_inp
    If bRead(0) <> 48 Then GoTo Error_inp
'символ ":"
    If Not WaitSerialData(XpsHandle, 0.03) Then GoTo Error_inp
    If bRead(0) <> 58 Then GoTo Error_inp
'1-й байт, V Akk
    If Not WaitSerialData(XpsHandle, 0.03) Then GoTo Error_inp
    LabelRobotData(n) = bRead(0) / 10
'2-й байт
    If Not WaitSerialData(XpsHandle, 0.03) Then GoTo Error_inp
    LabelRobotFire(n) = bRead(0)
'.......

Error_inp:
    LabelRobotData(n) = "Ошибка"
'очистка очереди, чтоб не ушло в блокировку по ошибке
    Do
    Loop Until WaitSerialData(XpsHandle, 0.03) = False

Функции обработки порта (давал раньше) оформи модулем, типа: com_module.bas
Проверяй на больших и кратных 2^x блоках, например по 256 байт
Аватара пользователя
Dmitry__
 
Сообщения: 6047
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: FT245 + D2xx

Сообщение Madf » 11 июн 2013, 17:10

Тут ещё по инету летает такая цифра для 245:

• Transfer Data rate to 1M Byte / Sec - D2XX Drivers
• Transfer Data rate to 300 Kilobyte / Sec - VCP Drivers

Не понял, что это за код (куда сувать), что допиливать, не проще дать готовый проект в архиве или просто EXE-ник? :shock:
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: FT245 + D2xx

Сообщение Dmitry__ » 11 июн 2013, 17:50

Madf писал(а):Тут ещё по инету летает такая цифра для 245:

• Transfer Data rate to 1M Byte / Sec - D2XX Drivers
• Transfer Data rate to 300 Kilobyte / Sec - VCP Drivers

Ну а я тебе ссылку на таблицу дал, не?
Dmitry__ писал(а):Вот еще глянь эту табличку, уж больно скорость по vcp по картинке смахивает с твоей скоростью.
http://www.efo.ru/doc/Ftdi/Ftdi.pl?2394


Madf писал(а):Не понял, что это за код (куда сувать), что допиливать, не проще дать готовый проект в архиве или просто EXE-ник?

Да нет у мня готового проекта под максимальную скорость блочными пересылками. :pardon: Я дал примеры работы с портом блоками, сами функции обработки порта дал раньше (где про api говорил). Дальше я ушел на визнетовские net модули, с com и лпт портами наигрался и выкинул.
Какую скорость у тебя показывает D2XXApp ?
Dmitry__ писал(а):Во чего нарыл на эфо:
http://www.efo.ru/doc/Ftdi/Ftdi.pl?778
Программа "D2XXApp" EXE ZIP
Программа представляет собой пример приложения, выполненного в среде Borland C++ Builder v.5.0 и использующего драйверы D2XX. Она позволяет передавать и принимать данные по USB как в стандартных режимах UART и FIFO, так и в режиме "Bitbang". Вы можете скачать исполняемый модуль этой программы, а также исходные файлы проекта.


Добавлено спустя 20 минут 58 секунд:
Думаю, надо тебе перебираться на FT2232H, правда ценник зашкаливает...
http://www.terraelectronica.ru/catalog_ ... ODE=333378
а может опять это грабля фтди :D
http://kazus.ru/forums/showthread.php?t=17520

Во, вспомнил, когда (10 лет назад) пытался найти решение гнать видеопоток по юсб, смотрел на Cypress, с примерами у них все в порядке. Эфо давал диск с кучей решений
http://www.efo.ru/doc/Cypress/Cypress.pl?1146
Правда все равно ушел на net и не жалею.
Аватара пользователя
Dmitry__
 
Сообщения: 6047
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: FT245 + D2xx

Сообщение Madf » 12 июн 2013, 12:03

Нет, всё - я больше с FTDI дела не имею по части всяких там гибко настраиваемых "простых" модулей и тем более программируемых (как писал ранее: ванкулум2 на полке пылится; нервов не хватило). Чуток ещё подергаюсь с 245 и там буду делать вывод.
Просто на сегодняшний момент я не представляю что можно использовать (из легко доступного и не дорогого) для быстрой передачи данных в компьютер с любительских устройств. Скажем использование SD-card: без покупки лицензии на протокол нормальный, скорость будет маленькой (в среднем 200КБ/сек), значит надо эту карту вынимать из устройства и вставлять в картридер компа. Здесь сразу проблемы: устройство будет не герметичным и нет универсальности (не у каждого компа есть читалка разных типов карт). По воздуху: дорого, либо дешево и очень медленно. Остается USB, а тут пока затык (непонятно).

Добавлено спустя 13 минут 37 секунд:
На счет Cypress Semiconductor, полазил по их сайту и чот простых чипов не нашел, все большие и для пайки феном в основном (про цену не говорю уже) - не вариант.
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: FT245 + D2xx

Сообщение Madf » 12 июн 2013, 20:12

И так мои эксперименты на этот раз открыли мне глаза на правду и весьма не дружелюбную.

Отключал в драйверах VCP - эта опция просто в системе отключает вид девайса как COM порт, толку от этого мало и на производительность не влияет.
Потом решил поиграться "FT_W32_ReadFile", но уперся в "lpOverlapped", непонятно какие данные туда пихать, пробовал по разному в итоге либо проходит вся операция на ОК но ничего не читается или тупо крашится..

..плюнул на эту штуку и решил не гадать на кофейной гущи, а подключить осцил к ноге WR, чтобы понять с какой скоростью вообще МК дергает ногой, в коде отключил проверку TXE (как советовал AndreiSk), в итоге увидел тот факт, что МК изначально медленно проделывает этот процесс. Начал оптимизировать код (заранее убрал всё лишнее, добавил по умолчанию настройку порта, убрал параллельную обработку приходящих команд) и получил скорость передачи на D2xx в районе 500КБ/сек. Данные все прилетают корректные, если пытаться на этой скорости и с этим алгоритмом не поверяя TXE гнать данные по VCP, то: скорость передачи не поднимается выше 330КБ/сек и данные приходят кусками мусор.

В общем итог таков, как и везде говорилось, хочешь скорости юзай: D2xx + шустрый МК.

зы: пока достиг скорости передачи около 418КБ/сек с проверкой TXE (без него 478КБ/сек), чую пора сигать на АРМ что ли или ассемблерные вставки делать...вообще не очень понятна физика выставления этого сигнала, ща ещё почитаю.

Добавлено спустя 2 часа 9 минут 7 секунд:
Хочу уточнить, оказывается на VCP можно передавать на больших скоростях, но тогда нужно обязательно выдерживать стандарт, пользоваться TXE (D2xx к этому не критичны и скорость передачи выше).

Добавлено спустя 18 минут 51 секунду:
На том же коде, разогнав ХМегу до 50 МГц, с контролем TXE получил такой результат:

ft245_XMega_50MHz.gif
ft245_XMega_50MHz.gif (10.08 КиБ) Просмотров: 1384

:ROFL:
Всем спасибо за помощь :good: , буду далее оптимизировать код МК.
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: FT245 + D2xx

Сообщение AndreiSk » 12 июн 2013, 21:39

Madf, я ошибся, у меня был не 245, а 232h модуль... я просто забыл за эти три года
Вот такой у меня был
http://www.dlpdesign.com/usb/usb1232h.shtml
он гнал 1Мбайт и больше с блекфина (это все таки 500мгц проц, я тогда пытался с него видео снять)...
Возможно у тебя модуль больше не позволяет или МК...
Аватара пользователя
AndreiSk
 
Сообщения: 2618
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: FT245 + D2xx

Сообщение Duhas » 13 июн 2013, 09:02

ммм, а хмегой с помощью DMA гнать не ? через event system кидаться байтом в порт по готовности со стороны 245..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6341
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: FT245 + D2xx

Сообщение Dmitry__ » 13 июн 2013, 10:25

Madf писал(а):В общем итог таков, как и везде говорилось, хочешь скорости юзай: D2xx + шустрый МК.

Чего-то здесь не так, 10-ти мгц. пикина может шевелить ft245 с частотой 1 мгц, а у тебя мега под 30 мгц :shock:
Напиши затычку на авр: дергать rx/tx по соотв. приемным сигналам, лучше на асм, параллельные данные не трогай. Так ты проверишь скорость работы программы на стороне компа. Если добьешься 8 мбит/с то тогда только ковыряй программу на авр. Подправь свой D2xx.exe, чтоб писал лог в папку из которой запускают файл (чтоб ошибку убрать). Я попробую еще раз поковырять. Папка по умолчанию в vb: App.Path или CurDir, типа:
Код: Выделить всёРазвернуть
Open App.Path & "\" & "log.txt" For Output As #1
Аватара пользователя
Dmitry__
 
Сообщения: 6047
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: FT245 + D2xx

Сообщение Madf » 13 июн 2013, 11:21

Duhas писал(а):ммм, а хмегой с помощью DMA гнать не ? через event system кидаться байтом в порт по готовности со стороны 245..

Проблема на самом деле в более глобальном, мало того, что нужно не только выставлять данные в порт, но ещё и дергать ногой в такт + параллельно нужно брать данные откуда либо (подготавливать) + система таймаута чтобы не повисло всё. Пока данные тупо берутся из самого счетчика (т.е. нет пока никаких наворотов с забором данных) и вон как тормозит. По этому не вижу смысла морочиться с DMA (алгоритм не линеен).

Чего-то здесь не так, 10-ти мгц. пикина может шевелить ft245 с частотой 1 мгц, а у тебя мега под 30 мгц :shock:

Выше описал, там мало тупо дергать ногой.

Напиши затычку на авр: дергать rx/tx по соотв. приемным сигналам, лучше на асм, параллельные данные не трогай. Так ты проверишь скорость работы программы на стороне компа. Если добьешься 8 мбит/с то тогда только ковыряй программу на авр.

Вообще мне лень было и писал всё в BASСOM-е, теперь планирую эту часть кода в асм перевести. Как бы опыт можно сказать, что удался, теперь можно дальше двигаться (имеет смысл). Надо же было понять, стоит продолжать или нет.

Подправь свой D2xx.exe, чтоб писал лог в папку из которой запускают файл (чтоб ошибку убрать). Я попробую еще раз поковырять. Папка по умолчанию в vb: App.Path или CurDir, типа:

Ох любишь ты всё усложнять. :) Чтобы писать в тоже место где EXE-ик находится, достаточно без пути файл записывать (одно имя). Поправил:
D2xx.zip
(8.37 КиБ) Скачиваний: 0

Нижний прогрессбар показывает относительно 8МБ передающихся данных, на него можно внимание не обращать. Просто проверял на сколько код на VB тормозит передачу (оказалось вообще не тормозит и запас прочности большой (у меня по крайней мере так, на дохлых машинах не пробовал)) + при передачи большего объёма - точнее измеряется скорость передачи.
Madf
 
Сообщения: 2157
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Пред.След.

Вернуться в Идеи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Mail.ru counter