реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> FT232R - как передать большой пакет
Alt.F4
сообщение Mar 10 2012, 19:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Добрый день.
Столкнулся с проблемой передачи пакета 250КБ при помощи терминальной программы и FT232R на скорости 115200.
1) Программа RS232pro v3.30 виснет и шлет байты с огромными паузами, хотя с реальным СОМ-портом вопросов нет.
2) Программа Advanced Serial Port вроде как шлет, но на выходе FT232R теряется половина байтов.
Думаю, что переполянется внутренний буфер FT232R.
Как решить проблему?
Спасибо.

Сообщение отредактировал Alt.F4 - Mar 10 2012, 19:15
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 10 2012, 19:46
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Управление потоком включено ?
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Mar 11 2012, 04:15
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Отключено, на другой стороне юзаю только RXD и TXD (UART МК).
Да и он по большому счету там не нужен, работаю только в одну сторону (от ПК) и МК все успевает.

Сообщение отредактировал Alt.F4 - Mar 11 2012, 04:17
Go to the top of the page
 
+Quote Post
Andreymai
сообщение Mar 11 2012, 04:51
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 137
Регистрация: 29-06-11
Пользователь №: 65 964



1. я сперва использовал PL-2303, но потом у него нашелся "косячек" - эта микруха иногда какие то лишние нули в поток добавляет (выявляется только на больших объемах данных - 200 кБ) потом перешел на CP2103 и проблема пропала.
2. еще надо проверить выводы RTS/CTS - не висят ли в воздухе
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Mar 11 2012, 07:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
еще надо проверить выводы RTS/CTS - не висят ли в воздухе
по мануалу они могут висеть.
Вся проблема, как я думаю, в тупом переполении буфера микрухи, т.е. по юсб пакет быстро передается на фт232, которая начинает его передавать на скорости много меньшей.
Верна ли эта версия? Если да, то осталось узнать размер буфера и передавать пакет частями.

Сообщение отредактировал Alt.F4 - Mar 11 2012, 07:38
Go to the top of the page
 
+Quote Post
Vasily_
сообщение Mar 11 2012, 09:58
Сообщение #6


Знающий
****

Группа: Модераторы
Сообщений: 925
Регистрация: 25-01-09
Из: Рига
Пользователь №: 43 909



Попробуйте в настройках порта FTDI поменять латенци таймер, по умолчанию стоит 16 поставьте например 2.
Go to the top of the page
 
+Quote Post
-SANYCH-
сообщение Mar 11 2012, 10:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 6-12-05
Пользователь №: 11 864



Когда работал с FT232 тоже столкнулся с проблемой. Когда читал с устройства переданные данные на скорости 115200 то получал в конце пакета ноли или отфонарные символы. Решить эту проблему удалась использовав библиотеку FTDI.
Прикрепленные файлы
Прикрепленный файл  D2XXAPP.ZIP ( 30.73 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 11 2012, 11:03
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Alt.F4 @ Mar 11 2012, 11:37) *
Вся проблема, как я думаю, в тупом переполении буфера микрухи, т.е. по юсб пакет быстро передается на фт232, которая начинает его передавать на скорости много меньшей.
Верна ли эта версия? Если да, то осталось узнать размер буфера и передавать пакет частями.

Крайне сомнительная версия. Буфера там маленькие (256/128 байтов), обмен по USB гораздо быстрее, чем типичный обмен по UART. Я подобного эффекта (потерь данных и замедления передачи) не наблюдал, используя и управление потоком (при 921600), и без управления (230400), правда, блоки не 250 кило, но десятки килобайтов лил. По простой "copy" и терминалом (teraterm).

Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 11 2012, 11:56
Сообщение #9


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Alt.F4 @ Mar 11 2012, 05:44) *
Столкнулся с проблемой передачи пакета 250КБ при помощи терминальной программы и FT232R на скорости 115200.


У винды наличествует баг в USB драйвере класса CDC. При попытке передать через виртуальный COM порт файл размером более 8 кбайт, Винда начинает глючить именно так, как вы описали. Я это проверял на Вынь 7 путем замены CDC драйвера на драйвер некой немецкой фирмы. Названия фирмы не помню, но не в этом суть: немецкий драйвер работал как часы, он без малейших глюков передавал файлы любого размера. Однако демо версия, котороую я гонял, имела ограничения по времени на 30 дней, а покупать рабочую версию за несколько тысяч евро меня жаба задушила. Поэтому я просто стал резать свои файлы на куски размером не более 8 кБайт и передавать файл кусками, что и вам советую.

Магическое число 8 кБайт - это размер буфера в USB драйвере. После заполнении буфера виндовский драйвер глючит, очевидно, по той причине, что мелкософтовские программисты опять облажались с указателями.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 11 2012, 12:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(=AK= @ Mar 11 2012, 15:56) *
У винды наличествует баг в USB драйвере класса CDC.

А какая связь между CDC и FT232R, у которого свои драйверы?
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 11 2012, 12:06
Сообщение #11


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(aaarrr @ Mar 11 2012, 22:30) *
А какая связь между CDC и FT232R, у которого свои драйверы?


У FT232R есть выбор: или использовать их собственные драйверы D2XX, или работать с виртуальным СОМ портом (VCP). Поскольку ТС явственно озвучил, что работает с СОМ портом, то, очевидно, в конечном счете речь идет именно о виндовом драйвере класса CDC.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 11 2012, 12:15
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(=AK= @ Mar 11 2012, 16:06) *
Поскольку ТС явственно озвучил, что работает с СОМ портом, то, очевидно, в конечном счете речь идет именно о виндовом драйвере класса CDC.

VCP - это тоже их собственные драйверы, к виндовому usbser.sys ни малейшего отношения они не имеют.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 11 2012, 12:36
Сообщение #13


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(aaarrr @ Mar 11 2012, 22:45) *
VCP - это тоже их собственные драйверы, к виндовому usbser.sys ни малейшего отношения они не имеют.

Я полагаю, что VCP - это прослойка, которая в конечном счете все равно опирается на виндовые CDC драйвера. Вот, кстати, у ТС будет хорошая возможность это косвенно проверить: если после нарезки файла на куски по 8 кбайт глюки исчезнут, то это будет изрядным свидетельством, что глюки возникали именно в CDC драйверах, поскольку маловероятно, что программисты FTDI наступили точно на те же грабли, что мелкософтовские.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 11 2012, 13:01
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(=AK= @ Mar 11 2012, 16:36) *
Я полагаю, что VCP - это прослойка, которая в конечном счете все равно опирается на виндовые CDC драйвера.

Нет там ничего общего с CDC - собственный закрытый протокол и свои драйверы, которым отнюдь не нужно ни на что опираться.

Цитата(=AK= @ Mar 11 2012, 16:36) *
если после нарезки файла на куски по 8 кбайт глюки исчезнут, то это будет изрядным свидетельством, что глюки возникали именно в CDC драйверах.

Едва ли в каком-либо из использованных ТС терминалов данные отправляются столь экстравагантным способом (кусками более 8кБайт).
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 11 2012, 13:27
Сообщение #15


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(aaarrr @ Mar 11 2012, 23:31) *
Нет там ничего общего с CDC - собственный закрытый протокол и свои драйверы, которым отнюдь не нужно ни на что опираться.

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

Цитата(aaarrr @ Mar 11 2012, 23:31) *
Едва ли в каком-либо из использованных ТС терминалов данные отправляются столь экстравагантным способом (кусками более 8кБайт).

Как они сейчас передаются - не представляет большого интереса. Интерес представляет то, как их надо передавать, чтобы не было глюков. Мое предложение - передавать блоками не более чем по 8 кБайт. Это гарантирует, что буфер виндового CDC драйвера никогда не переполнится, поскольку микрософтовский баг состоит именно в ошибочной обработке указателей буфера в ситуации, когда надо его "зациклить", т.е. перейти из конца буфера в начало. У немцев с этим проблем нет, они организовали FIFO при помощи кольцевого буфера корректно. А у мелкомягких с этим проблемы, поэтому до тех пор, пока буфер не заполнился, все работает, а после 8 кБайт - глюки.

Передача блоками по 8 кБайт гарантирует, что буфер никогда не переполнится. Окончание блока означает, что транзакция завершилась, поэтому для следующего блока драйвер перейдет в исходное состояние и начнет укладывать данные с начала буфера. А в случае передачи массива рамерами более 8 кБ без разбивки на блоки драйвер вынужден переходить из конца 8-килобайтного буфера в начало, а там у мелкомягких баг.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016