|
FTDI FT232R BitBangMode, Непрерывная запись в порт и считывание |
|
|
|
Aug 30 2006, 20:45
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Необходимо осуществить непрерывный вывод информации с определенной частотой. Для этой цели использовался BitBangMode микросхемы FT232R. Однако после вызова процедуры FT_WRITE программа зависает до полного вывода данных. При этом возникают две серьезные проблемы: 1. невозможно проводить промежуточные вычисления с полученными данными. 2. после полного вывода данных возникает промежуток между окончанием предыдущего и началом следующего вызова функции FT_WRITE.
Можно ли для данной микросхемы решить эти проблемы?
Сообщение отредактировал Dmitriy_V - Aug 30 2006, 20:46
|
|
|
|
|
Aug 31 2006, 08:05
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Dmitriy_V @ Aug 31 2006, 00:45)  Необходимо осуществить непрерывный вывод информации с определенной частотой. Для этой цели использовался BitBangMode микросхемы FT232R. Однако после вызова процедуры FT_WRITE программа зависает до полного вывода данных. Этот вопрос меня тоже интересует. Я еще не пробовал этот режим, поэтому у меня вот такой вопрос - если управлять битами, то на переключение каждого бита пойдет отделтная посылка по USB или это будет уложено в какие то пакеты? И как я вижу, концом работы с битами является выход из процедуры. Что при этом происходит? Программа ждет ответа от микросхемы? Сколько времени идет переключение одним битом, и сколько, допустим, восемью?
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 31 2006, 20:33
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(Alexsys @ Aug 31 2006, 11:45)  Если я правильно понял, тут нужно функцию обмена выносить в отдельный поток. Тогда основная программа подвисать не будет. Возможно, это сможет помочь с зависанием программы, однако проблему непрерывной выдачи информации, к сожалению не решает. Остается промежуток времени между окончанием обработки последнего вызова процедуры и началом следующего. К тому же появляется проблема с определением окончания действия вызываемой процедуры.
|
|
|
|
|
Aug 31 2006, 20:52
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата Этот вопрос меня тоже интересует. Я еще не пробовал этот режим, поэтому у меня вот такой вопрос - если управлять битами, то на переключение каждого бита пойдет отделтная посылка по USB или это будет уложено в какие то пакеты? Вся информация посылается пакетами в буфер микросхемы. Каждый пакет состоит из байтов, номер бита в байте соответствует номеру вывода, а значение требуемому состоянию. При этом выводы микросхемы настроенные на прием данных автоматически игнорируют информацию на передачу. Цитата И как я вижу, концом работы с битами является выход из процедуры. Что при этом происходит? Программа ждет ответа от микросхемы? Программа ждет окончание передачи и выводит какое количество байтов было передано. В связи с этим и мучаюсь. По описанию я понял ,что процедура WRITE просто переписывает данные из буфера программы в буфер драйвера, который в свою очередь пересылает данные небольшими пакетами в устройство. Однако поскольку для завершения процедуры требуется вывести количество переданных байтов, то драйвер ждет окончания передачи. Цитата Сколько времени идет переключение одним битом, и сколько, допустим, восемью? Данные пересылаются байтами, поэтому одинаковое. (могу ошибаться)
Сообщение отредактировал Dmitriy_V - Aug 31 2006, 20:56
|
|
|
|
|
Sep 1 2006, 06:44
|

Участник

Группа: Новичок
Сообщений: 47
Регистрация: 8-08-06
Из: Москва
Пользователь №: 19 398

|
Цитата(Dmitriy_V @ Sep 1 2006, 00:33)  Остается промежуток времени между окончанием обработки последнего вызова процедуры и началом следующего. К тому же появляется проблема с определением окончания действия вызываемой процедуры. Мне кажется в многозадачной ОС этот промежуток времени полностью устранить не удастся. А момент окончания процедуры можно отслеживать с помощью глобальной переменной или события.
|
|
|
|
|
Sep 1 2006, 10:11
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата Мне кажется в многозадачной ОС этот промежуток времени полностью устранить не удастся. А момент окончания процедуры можно отслеживать с помощью глобальной переменной или события. Поскольку в самом устройстве есть буфер передачи, то оно будет некоторое время посылать данные из него до тех пор, пока не придет следующая порция или не закончится предыдущая. Поэтому сами данные не обязательно записывать в порт непрерывно, они все равно будут передаваться пакетами, а вот выводится постоянно. Т.к. обмен между программой и устройством происходит через драйвер, то в случае, когда программа записывает данные, они должны добавляться в конец очереди на передачу. При этом переключение между отдельными задачами не влияет на равномерность вывода. К сожалению, данная логика не работает с FT232R Цитата(KRS @ Sep 1 2006, 12:00)  у FTDI есть еще одна серьезная проблема с bit bang!!! дело в том что между выводами бит у них бывает пауза до нескольких ms!! причем это не связано с задержками в USB данные уходят в одном пакете! и даже внутри 2 выводов бывают задержки для теста выводил в USB по 2 байта что бы получать одиночный импульс и задержка на 500 ms! данные всегда уходили в одном USB пакете! прроверял так вот длина этого импульса часто бывала несколько ms! хотя бауд рейт стоял что бы импульс был 1 микросекунда! Второй этап делал на максимальном баудрейте вывод как обычный UART так вот там эти два байта выдвигались всегда без задержки!!! Так что у них где то в логике пробелмы! наблюдал это и в FT232BM и в FT232RL  Спасибо, попробую посмотреть данные баги на своем устройстве. Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался для параллельного вывода данных. И еще, при сбоях в выдаче сигналы #WR на выходе микросхемы тоже сбоит или выводится с постоянной частотой?
Сообщение отредактировал Dmitriy_V - Sep 1 2006, 10:11
|
|
|
|
|
Sep 1 2006, 11:32
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Dmitriy_V @ Sep 1 2006, 14:11)  Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался для параллельного вывода данных. Так она тоже может работать в обычном режиме (просто там не сдвиговый регистр, а парралельный выход и от баудрейта кстати не зависит, весь пакет можно быстро считать! RXF появляется через каждые 80ns пока есть данные. Мы использовали и FT245BM и FT245RL с атмлом! А вот в битбанг режиме у FT245RL те же проблемы (просто сделана возможность апгрейда атмела через нее и на ней делается spi! так вот там те же задержки иногда возникают! хотя данные 100% в одной посылке по USB идут. Я вот думал С2 интерфейс для силабсов сделать на FT232RL (там получатеся и UART и SPI можно) а вот С2 никак из за этой задержки там клоки нельзя вниз опускать на милисекунды
|
|
|
|
|
Sep 1 2006, 23:40
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(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 никак из за этой задержки там клоки нельзя вниз опускать на милисекунды  Для Bit Bang можно выводить сигналы RDn и WRn как для параллельного порта. При этом они идут с частотой битрейта или нет?
|
|
|
|
|
Sep 3 2006, 14:41
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата Необходимо осуществить непрерывный вывод информации с определенной частотой. Для этой цели использовался BitBangMode микросхемы FT232R. Если непрерывность и частота критичны, то правильное решение: 1. МК с USB ( USB на борту или внешний контроллер USB). 2. Программа в МK - буферизация данных. 3. Драйвер - буферизация данных. PS. На FTDI и CP210x проблему не решить. Если непрерывность и частота не критичны, то можно и на FTDI: 1. Создание отдельного потока , в котором работает в цикле FT_WRITE, с буфером данных. 2. Из основной программы передавать этому потоку данные асинхронно, не дожидаясь окончания их обработки потоком. 3. Организовать механизм асинхронных сообщений потока в основную программу о своем состоянии ( передача закончена, буфер полный, буфер пустой и т.д) PS. Задача довольно тривиальна, если знать и уметь пользоваться механизмами межпоточного взаимодействия в Windows.
|
|
|
|
|
Sep 4 2006, 09:54
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(Седой @ 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. Есть какие-нибудь дельные ссылки по данной тематике?
|
|
|
|
|
Sep 8 2006, 10:25
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(Седой @ Sep 4 2006, 16:00)  А он работает с USBXpress или нет? Есть какие-нибудь сайты с исходниками в Keil для программирования данного микроконтроллера или лучше С8051F320 там вроде буфер чтения/записи побольше? Еще нашел USB осциллограф на микросхеме С8051F320 Березка эл. компоненты можно ли его использовать в качестве отладочной платы?
|
|
|
|
|
Sep 8 2006, 14:34
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата А он работает с 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 у.е.)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|