В свое время работали с USB 1.0 (FT232R, FT245R). Софт для PC писался под Delphi, с использованием драйверов и библиотек от разработчика. Все было нормально.
Решили перейти на USB2.0 и бешеные скорости, так как 800 кбайт/сек уже упиралось в наши требования. Купили kit 2232. Библиотек для Delphi не оказалось, решили писать на Borland.
Собрали макет. Подключили. Запускаем написанную программу. Устанавливаем режим Full-speed (SetBitMode 0x40). Осцилографом смотрим - появилась желаемая частота в 60мегагерц. Ок. Дальше посылаем 0х01, в ответ на которое наша плата должна была загореть светодиод и выдавать данные. Единичка записывается, светодиод загорается, но "плата" больше ни на что не реагирует. UsbTracer показывает "смерть" девайся и его отключение. Винды иногда при этом пишут "устройство не опознано".
Тыкались-тыкались, решили попробовать ассинхронный режим, без SetBitMode 0x40. Сделали плату, перепрошили контроллер. Запускаем. Посылаем единичку. После этого GetStatus выдает наличие данных в буфере (и если циклично проверять, то видно как буфер наполняется), но Read не читает ничего, ft_status равен 4, ошибка чтения, но GetStatus так же исправно продолжнает показывать данные в буфере без ошибок.
Берем старую программу из под Delphi и пробуем ей - она все прекрасно читает. Отличия только в разных библиотеках для дельфей и для борланда. И фих с этой борладской библиотекой, но проблемма в том, что дельфевая библиотека старая и она не умеет SetBitMode. Я пытался его руками добавить, т.к. в ftdi2xx.dll такая функция есть, но неполучается - устройство не видит этой команды. Возможно в борландовской библиотеке какая-то обертка стоит над этой функцией.
Впринципе, сейчас мы получаем почти 5 мегабайт в секунду по usb в ассинхронном режиме, но это как то неправильно, на мой взгляд. Кто нить добивался большего? У кого-нить получилось работать в full-speed?Как вообще работать с этой 2232?
|