Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FTDI FT232R BitBangMode
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Dmitriy_V
Необходимо осуществить непрерывный вывод информации с определенной частотой.
Для этой цели использовался BitBangMode микросхемы FT232R.
Однако после вызова процедуры FT_WRITE программа зависает до полного вывода данных.
При этом возникают две серьезные проблемы:
1. невозможно проводить промежуточные вычисления с полученными данными.
2. после полного вывода данных возникает промежуток между окончанием
предыдущего и началом следующего вызова функции FT_WRITE.

Можно ли для данной микросхемы решить эти проблемы?
Alexsys
Если я правильно понял, тут нужно функцию обмена выносить в отдельный поток. Тогда основная программа подвисать не будет.
iosifk
Цитата(Dmitriy_V @ Aug 31 2006, 00:45) *
Необходимо осуществить непрерывный вывод информации с определенной частотой.
Для этой цели использовался BitBangMode микросхемы FT232R.
Однако после вызова процедуры FT_WRITE программа зависает до полного вывода данных.


Этот вопрос меня тоже интересует. Я еще не пробовал этот режим, поэтому у меня вот такой вопрос - если управлять битами, то на переключение каждого бита пойдет отделтная посылка по USB или это будет уложено в какие то пакеты?
И как я вижу, концом работы с битами является выход из процедуры. Что при этом происходит? Программа ждет ответа от микросхемы?
Сколько времени идет переключение одним битом, и сколько, допустим, восемью?
Dmitriy_V
Цитата(Alexsys @ Aug 31 2006, 11:45) *
Если я правильно понял, тут нужно функцию обмена выносить в отдельный поток. Тогда основная программа подвисать не будет.


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

Остается промежуток времени между окончанием обработки последнего вызова процедуры и
началом следующего. К тому же появляется проблема с определением окончания действия вызываемой процедуры.
Dmitriy_V
Цитата
Этот вопрос меня тоже интересует. Я еще не пробовал этот режим, поэтому у меня вот такой вопрос - если управлять битами, то на переключение каждого бита пойдет отделтная посылка по USB или это будет уложено в какие то пакеты?


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

Цитата
И как я вижу, концом работы с битами является выход из процедуры. Что при этом происходит? Программа ждет ответа от микросхемы?


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

Цитата
Сколько времени идет переключение одним битом, и сколько, допустим, восемью?


Данные пересылаются байтами, поэтому одинаковое. (могу ошибаться)
Alexsys
Цитата(Dmitriy_V @ Sep 1 2006, 00:33) *
Остается промежуток времени между окончанием обработки последнего вызова процедуры и
началом следующего. К тому же появляется проблема с определением окончания действия вызываемой процедуры.


Мне кажется в многозадачной ОС этот промежуток времени полностью устранить не удастся. А момент окончания процедуры можно отслеживать с помощью глобальной переменной или события.
KRS
у FTDI есть еще одна серьезная проблема с bit bang!!!
дело в том что между выводами бит у них бывает пауза до нескольких ms!! причем это не связано с задержками в USB данные уходят в одном пакете! и даже внутри 2 выводов бывают задержки для теста выводил в USB по 2 байта что бы получать одиночный импульс и задержка на 500 ms!
данные всегда уходили в одном USB пакете! прроверял так вот длина этого импульса часто бывала несколько ms! хотя бауд рейт стоял что бы импульс был 1 микросекунда!
Второй этап делал на максимальном баудрейте вывод как обычный UART так вот там эти два байта выдвигались всегда без задержки!!! Так что у них где то в логике пробелмы!
наблюдал это и в FT232BM и в FT232RL sad.gif
Dmitriy_V
Цитата
Мне кажется в многозадачной ОС этот промежуток времени полностью устранить не удастся. А момент окончания процедуры можно отслеживать с помощью глобальной переменной или события.


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

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

К сожалению, данная логика не работает с FT232R


Цитата(KRS @ Sep 1 2006, 12:00) *
у FTDI есть еще одна серьезная проблема с bit bang!!!
дело в том что между выводами бит у них бывает пауза до нескольких ms!! причем это не связано с задержками в USB данные уходят в одном пакете! и даже внутри 2 выводов бывают задержки для теста выводил в USB по 2 байта что бы получать одиночный импульс и задержка на 500 ms!
данные всегда уходили в одном USB пакете! прроверял так вот длина этого импульса часто бывала несколько ms! хотя бауд рейт стоял что бы импульс был 1 микросекунда!
Второй этап делал на максимальном баудрейте вывод как обычный UART так вот там эти два байта выдвигались всегда без задержки!!! Так что у них где то в логике пробелмы!
наблюдал это и в FT232BM и в FT232RL sad.gif


Спасибо, попробую посмотреть данные баги на своем устройстве.

Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался
для параллельного вывода данных.

И еще, при сбоях в выдаче сигналы #WR на выходе микросхемы тоже сбоит или выводится с постоянной частотой?
KRS
Цитата(Dmitriy_V @ Sep 1 2006, 14:11) *
Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался
для параллельного вывода данных.


Так она тоже может работать в обычном режиме (просто там не сдвиговый регистр, а парралельный выход и от баудрейта кстати не зависит, весь пакет можно быстро считать! RXF появляется через каждые 80ns пока есть данные.
Мы использовали и FT245BM и FT245RL с атмлом!

А вот в битбанг режиме у FT245RL те же проблемы (просто сделана возможность апгрейда атмела через нее и на ней делается spi! так вот там те же задержки иногда возникают! хотя данные 100% в одной посылке по USB идут.

Я вот думал С2 интерфейс для силабсов сделать на FT232RL (там получатеся и UART и SPI можно) а вот С2 никак из за этой задержки там клоки нельзя вниз опускать на милисекунды sad.gif
Dmitriy_V
Цитата(KRS @ Sep 1 2006, 15:32) *
Цитата(Dmitriy_V @ Sep 1 2006, 14:11) *

Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался
для параллельного вывода данных.


Так она тоже может работать в обычном режиме (просто там не сдвиговый регистр, а парралельный выход и от баудрейта кстати не зависит, весь пакет можно быстро считать! RXF появляется через каждые 80ns пока есть данные.
Мы использовали и FT245BM и FT245RL с атмлом!

А вот в битбанг режиме у FT245RL те же проблемы (просто сделана возможность апгрейда атмела через нее и на ней делается spi! так вот там те же задержки иногда возникают! хотя данные 100% в одной посылке по USB идут.

Я вот думал С2 интерфейс для силабсов сделать на FT232RL (там получатеся и UART и SPI можно) а вот С2 никак из за этой задержки там клоки нельзя вниз опускать на милисекунды sad.gif


Для Bit Bang можно выводить сигналы RDn и WRn как для параллельного порта.
При этом они идут с частотой битрейта или нет?
Седой
Цитата
Необходимо осуществить непрерывный вывод информации с определенной частотой.
Для этой цели использовался BitBangMode микросхемы FT232R.


Если непрерывность и частота критичны, то правильное решение:

1. МК с USB ( USB на борту или внешний контроллер USB).
2. Программа в МK - буферизация данных.
3. Драйвер - буферизация данных.
PS. На FTDI и CP210x проблему не решить.


Если непрерывность и частота не критичны, то можно и на FTDI:

1. Создание отдельного потока , в котором работает в цикле FT_WRITE, с буфером данных.
2. Из основной программы передавать этому потоку данные асинхронно, не дожидаясь окончания их обработки потоком.
3. Организовать механизм асинхронных сообщений потока в основную программу о своем состоянии ( передача закончена, буфер полный, буфер пустой и т.д)
PS. Задача довольно тривиальна, если знать и уметь пользоваться механизмами межпоточного взаимодействия в Windows.
Dmitriy_V
Цитата(Седой @ Sep 3 2006, 18:41) *
Если непрерывность и частота критичны, то правильное решение:

1. МК с USB ( USB на борту или внешний контроллер USB).
2. Программа в МK - буферизация данных.
3. Драйвер - буферизация данных.
PS. На FTDI и CP210x проблему не решить.


Какой дешевый микроконтроллер посоветуешь для этой цели?

Цитата(Седой @ Sep 3 2006, 18:41) *
Если непрерывность и частота не критичны, то можно и на FTDI:

1. Создание отдельного потока , в котором работает в цикле FT_WRITE, с буфером данных.
2. Из основной программы передавать этому потоку данные асинхронно, не дожидаясь окончания их обработки потоком.
3. Организовать механизм асинхронных сообщений потока в основную программу о своем состоянии ( передача закончена, буфер полный, буфер пустой и т.д)
PS. Задача довольно тривиальна, если знать и уметь пользоваться механизмами межпоточного взаимодействия в Windows.


Есть какие-нибудь дельные ссылки по данной тематике?
Седой
Цитата
Какой дешевый микроконтроллер посоветуешь для этой цели?

Сымые дешевые с USB на борту для такой задачи и большой серии - микроконтроллеры Holtek http://www.holtek.com/English/docum/uc/46xb50.htm

Еще есть PIC18 - http://www.microchip.com/ParamChartSearch/...n&pageId=74

Если брать внешний USB - то PDIUSBD12 от Филипса http://www.nxp.com/pip/PDIUSBD12.html плюс МК по желанию.

А самым оптимальным наверное взять С8051F326/7 от Silabs http://www.silabs.com/tgwWebApp/public/web...cumentation.htm


Цитата
Есть какие-нибудь дельные ссылки по данной тематике?

Советую почитать Рихтера http://club.shelek.com/download.php?id=239
Ну, а самая дельная ссылка http://msdn.microsoft.com/library/
раздел Win32 and COM Development->System Services-> DLL,Processes and Threads->SDK Documentation -> Synchonization
Dmitriy_V
Цитата(Седой @ Sep 4 2006, 16:00) *
А самым оптимальным наверное взять С8051F326/7 от Silabs http://www.silabs.com/tgwWebApp/public/web...cumentation.htm


А он работает с USBXpress или нет?
Есть какие-нибудь сайты с исходниками в Keil для программирования данного микроконтроллера или лучше С8051F320 там вроде буфер чтения/записи побольше?

Еще нашел USB осциллограф на микросхеме С8051F320 Березка эл. компоненты можно ли его использовать в качестве отладочной платы?
Седой
Цитата
А он работает с USBXpress или нет?
Есть какие-нибудь сайты с исходниками в Keil для программирования данного микроконтроллера или лучше С8051F320 там вроде буфер чтения/записи побольше?


Работает с версии 2.4. Только что скачал версию 2.42, там есть. Исходники есть на Silabe. Все, что поставляется вместе к Kit, есть на сайте (кроме железа).

Возможно 320 и лучше, но для вашей задачи достаточно и 326/327.
Для начала работы лучше купить кит C8051F326DK http://www.silabs.com/tgwWebApp/public/web...C8051F326DK.htm
(покупали в ЭФО http://www.efo.ru/doc/Silabs/price.pl#131 117 у.е.)
Dmitriy_V
Цитата(Седой @ Sep 8 2006, 18:34) *
Цитата
А он работает с USBXpress или нет?
Есть какие-нибудь сайты с исходниками в Keil для программирования данного микроконтроллера или лучше С8051F320 там вроде буфер чтения/записи побольше?


Работает с версии 2.4. Только что скачал версию 2.42, там есть. Исходники есть на Silabe. Все, что поставляется вместе к Kit, есть на сайте (кроме железа).

Возможно 320 и лучше, но для вашей задачи достаточно и 326/327.
Для начала работы лучше купить кит C8051F326DK http://www.silabs.com/tgwWebApp/public/web...C8051F326DK.htm
(покупали в ЭФО http://www.efo.ru/doc/Silabs/price.pl#131 117 у.е.)


А эта микросхема прошивается через USB или нет?
Седой
Прошивается, если написать загрузчик.

PS. Сейчас, в свободное время, занимаюсь разработкой загрузчиков для USB чипов Silabs и Atmel(AT90USB) c поддержкой DFU. Закончу, выложу в продолжение проекта http://projects.caxapa.ru/index.html?ID=45
Dmitriy_V
Цитата(Седой @ Sep 17 2006, 14:26) *
Прошивается, если написать загрузчик.

PS. Сейчас, в свободное время, занимаюсь разработкой загрузчиков для USB чипов Silabs и Atmel(AT90USB) c поддержкой DFU. Закончу, выложу в продолжение проекта http://projects.caxapa.ru/index.html?ID=45


Все равно если он через usb не прошивается его сначала надо через С2 прошивать.
Кстати, какая у C8051F32х разрядность 8, 16 или 32?
Dmitriy_V
Цитата(Dmitriy_V @ Sep 19 2006, 22:39) *
Все равно если он через usb не прошивается его сначала надо через С2 прошивать.
Кстати, какая у C8051F32х разрядность 8, 16 или 32?


Микросхема C8051F320 оправдала все мои ожидания. Мало понимая в работе микроконтроллеров в особенности, и в программировании USB в частности. Удалось по описаниям за два месяца при использовании USBXpress переложить пример TestPanel программы для компьютера с VC на Delphi и после этого доработать прошивку микросхемы под свои нужды. Для прошивки данных в микроконтроллер исползовал плату FlashBlaster2. В качестве тестовой платы купил USB-Осциллограф в котором использовалась данная микросхема. При этом получилось не вылезти за ограничения бесплатного Keil. Жалко только, что в моем проекте почти не используются остальные вкусности данного устройства, процентов на 80 прибор простаивает.
Еще большим плюсом оказалось наличие рускоязычного описания. Так что всем кто столкнулся с проблемой непрерывного ввода и вывода информации рекомендую данную микросхему, как наиболее просто реализующую связь и вывод информации по USB.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.