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

 
 
8 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> FT245R работает со сбоями
koluna
сообщение Feb 6 2009, 18:43
Сообщение #1


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Здравствуйте!

Наконец-то дело дошло и у меня до практики и сразу столкнулся с трудностями sad.gif

Собрал устройство с FT245 включенной по самой простой схеме с питанием от шины.
Использую VCP (скачал с сайта CDM 2.04.14.zip).
Обмен данными с портом программирую на API (Delphi 7) под WinXP.
На кабеле написано следующее: "28 AWG/IP 28AWG/2C HIGH SPEED USB REVISION 2.0 MD".
4 жилы в фольге + провод экрана.
Длина 1.8 м.

"Бусинки" ферритовой на цепь +5 В не нашлось sad.gif

Сбои следующего рода.
Работает, работает, потом начинаются сбои при записи в порт со стороны ПК... возникает исключение. Далее с портом работать не получается до тех пор, пока не передёрнешь шнур USB... Как я понял, подвисает FT245R.
Сбои возникают спонтанно...

Читал конференцию. Сделал, как советовали:
1. Со стороны устройства экран кабеля повесил на общую цепь через RC-цепочку 1 МОм, 0.1 мкФ.
2. На линии данных USB - конденсаторы 33 пФ на общую цепь (47 пФ не нашлось).

Ситуация не изменилась...
Почему возникают сбои?
Как их можно устранить?

Попутно несколько вопросов.

1. FT245R гарантирует безошибочную доставку данных? Т. е., в пакетах абсолютно точно не будет испорченных, пропущенных и лишних байтов? Читал, что режим BULK USB гарантирует безошибочную доставку данных, а ISOHRONOUS - не гарантирует. Только вот в каком режиме работает данная микросхема?

2. Как при подсоединении к ПК устройства с FT245 запустить своё приложение?


Спасибо заранее!


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
stoker
сообщение Feb 6 2009, 19:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469



Цитата(n_bogoyavlensky @ Feb 6 2009, 21:43) *
Здравствуйте!

Наконец-то дело дошло и у меня до практики и сразу столкнулся с трудностями sad.gif

Собрал устройство с FT245 включенной по самой простой схеме с питанием от шины.
Использую VCP (скачал с сайта CDM 2.04.14.zip).
Обмен данными с портом программирую на API (Delphi 7) под WinXP.
На кабеле написано следующее: "28 AWG/IP 28AWG/2C HIGH SPEED USB REVISION 2.0 MD".
4 жилы в фольге + провод экрана.
Длина 1.8 м.

"Бусинки" ферритовой на цепь +5 В не нашлось sad.gif

Сбои следующего рода.
Работает, работает, потом начинаются сбои при записи в порт со стороны ПК... возникает исключение. Далее с портом работать не получается до тех пор, пока не передёрнешь шнур USB... Как я понял, подвисает FT245R.
Сбои возникают спонтанно...

Читал конференцию. Сделал, как советовали:
1. Со стороны устройства экран кабеля повесил на общую цепь через RC-цепочку 1 МОм, 0.1 мкФ.
2. На линии данных USB - конденсаторы 33 пФ на общую цепь (47 пФ не нашлось).

Ситуация не изменилась...
Почему возникают сбои?
Как их можно устранить?

Попутно несколько вопросов.

1. FT245R гарантирует безошибочную доставку данных? Т. е., в пакетах абсолютно точно не будет испорченных, пропущенных и лишних байтов? Читал, что режим BULK USB гарантирует безошибочную доставку данных, а ISOHRONOUS - не гарантирует. Только вот в каком режиме работает данная микросхема?

2. Как при подсоединении к ПК устройства с FT245 запустить своё приложение?


Спасибо заранее!

Кабель не причем. У меня кабель 3 метра купленный в АШАНе за 40 рублей, там вообще экрана нету и все равно работает как часы.
По моему у вас кто-то со стороны устройства данные забывает принимать.
1. Данные приходят без ошибки, режим bulk
2. Не совсем понял, о каком приложении идёт речь?
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 6 2009, 19:42
Сообщение #3


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(stoker @ Feb 6 2009, 22:12) *
Кабель не причем. У меня кабель 3 метра купленный в АШАНе за 40 рублей, там вообще экрана нету и все равно работает как часы.
По моему у вас кто-то со стороны устройства данные забывает принимать.
1. Данные приходят без ошибки, режим bulk
2. Не совсем понял, о каком приложении идёт речь?



Читал, что кабель может быть очень даже виноват... FT плохо работает в условии помех...
Обмен идёт между ПК и устройством пакетами по 62 байта.
Это просто тест пока... ПК шлёт 62 байта. Устройство принимает и шлёт обратно эти 62 байта. Пока ПК не получит байты, высланные устройством, новые байты он не пошлёт smile.gif

1. Понятно.

2. Любое своё, вообще любое. Хоть калькулятор smile.gif


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
stoker
сообщение Feb 6 2009, 20:17
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 28-11-05
Из: Москва
Пользователь №: 11 469



Цитата(n_bogoyavlensky @ Feb 6 2009, 22:42) *
Читал, что кабель может быть очень даже виноват... FT плохо работает в условии помех...
Обмен идёт между ПК и устройством пакетами по 62 байта.
Это просто тест пока... ПК шлёт 62 байта. Устройство принимает и шлёт обратно эти 62 байта. Пока ПК не получит байты, высланные устройством, новые байты он не пошлёт smile.gif

1. Понятно.

2. Любое своё, вообще любое. Хоть калькулятор smile.gif


В таком случае советую проверить в каком состоянии находятся WR, RD,TXE, RXF когда устройство "висит".
Что управляет FT?
...
2. Первое вчто приходит на ум, использовать резидентный процесс, который проверяет подключено ли устройство и запускает калькулятор.
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 6 2009, 20:27
Сообщение #5


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата
В таком случае советую проверить в каком состоянии находятся WR, RD,TXE, RXF когда устройство "висит".
Что управляет FT?


Обязательно проверю, что на этих линиях
при сбое.
Управляет ATmega88.

Цитата
2. Первое вчто приходит на ум, использовать резидентный процесс, который проверяет подключено ли устройство и запускает калькулятор.


Это само собой. Но хочется стандартными средствами Windows.


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 7 2009, 16:17
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 6 2009, 23:43) *
Работает, работает, потом начинаются сбои при записи в порт со стороны ПК... возникает исключение ...


Что за исключение? ( exeption)
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 7 2009, 17:04
Сообщение #7


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(Седой @ Feb 7 2009, 19:17) *
Что за исключение? ( exeption)


Ну про исключение, я зря сказал smile.gif
Я его сам генерирую в классе работы с COM-портом.

Просто возникает ошибка при записи в порт...
Программа останавливается. Порт заново не открывается, пока устройство не переткнёшь...
Даже если софт перезагрузить полностью, то устройство работать не начнёт - порт не откроется, пока не переткнёшь устройство...


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 7 2009, 18:50
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 7 2009, 22:04) *
Ну про исключение, я зря сказал smile.gif
Я его сам генерирую в классе работы с COM-портом.

Просто возникает ошибка при записи в порт...
Программа останавливается. Порт заново не открывается, пока устройство не переткнёшь...
Даже если софт перезагрузить полностью, то устройство работать не начнёт - порт не откроется, пока не переткнёшь устройство...


Симптомы понятны, нет нормального вызова CloseHandle. Работаете скорее всего с BC или Delphi.
Ошибка в программе, а не в железе.
Go to the top of the page
 
+Quote Post
bill_vs
сообщение Feb 7 2009, 20:03
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 16-04-05
Из: СПб
Пользователь №: 4 208



Цитата(Седой @ Feb 7 2009, 21:50) *
Симптомы понятны, нет нормального вызова CloseHandle. Работаете скорее всего с BC или Delphi.
Ошибка в программе, а не в железе.

Не могли бы Вы пояснить подробно?
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 7 2009, 20:55
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(bill_vs @ Feb 8 2009, 01:03) *
Не могли бы Вы пояснить подробно?


Если не сильно вдаваться в детали вызов функции CloseHandle обрабатывается нормальным драйвером следующим образом

1. Драйвер должен отменить все операции ввода/вывода.
2. Освободить ресурсы (память и т.д.), захваченные при обработке CreateFile.
3. ...

Если этого не сделать, последующий вызов CreateFile вернет ошибку. Поэтому и приходиться освобождать ресурсы жестким образом - "передергивать шнур USB".

Почему BC и Delphi - в определенных ситуациях RTL вызвает TerminateThread, что приводит к тому, что ранее запрошенный
потоком I/O запрос в драйвер продолжает работать, он не отменяется, как при нормальном завершении потока вызовом ExitThread - и опять приходится "передергивать шнур USB".

Я сейчас точно не помню, где мне приходилось править RTL в D5, это было году в 2000, c тех пор ее и пользуюсь для написания dll для железа.
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 7 2009, 21:16
Сообщение #11


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(Седой @ Feb 7 2009, 21:50) *
Симптомы понятны, нет нормального вызова CloseHandle. Работаете скорее всего с BC или Delphi.
Ошибка в программе, а не в железе.


В Delphi.
У меня алгоритм следующий.
1. Подключаем устройство.
2. Запускаем приложение.
3. Открываем порт.
4. Передаём-принимаем в цикле до нажатия "Стоп". Причём передаём снова только после того как примем ответ. Т. е., Handshake такой получается smile.gif
5. Закрываем порт.

При ЗАПИСИ В ПОРТ спонтанно возникает ошибка и FT (или драйвера) перестаёт правильно работать.
После переподключения устройства всё начинает работать нормально вновь...

Какая может быть ошибка в программе?

Цитата
Если этого не сделать, последующий вызов CreateFile вернет ошибку. Поэтому и приходиться освобождать ресурсы жестким образом - "передергивать шнур USB".


Но меня интересует другое! Почему при записи N в порт произошла ошибка, когда запись N - 1 в порт была сделана успешно (шнур мы не дёргали и программу не останавливали)?

Как можно локализовать ошибку?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 7 2009, 21:16
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 8 2009, 02:09) *
При ЗАПИСИ В ПОРТ спонтанно возникает ошибка и FT (или драйвера) перестаёт правильно работать.
После переподключения устройства всё начинает работать нормально вновь...

Какая может быть ошибка в программе?


Давайте все-таки код посмотрим, а то может быть глюк и в драйвере.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Feb 7 2009, 21:26
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Я очень давно использовал FT245. Действительно, в условиях помех связь отъезжает с примерно указанными выше симптомами. Программа при этом была на MS VC. Из рекомендаций - посадите оплетку кабеля на землю устройства толстым проводом. Будет существенно лучше. В моем случае, т.к. помех было очень много и мощных окончательно помог только watchdog, от которого срабатывал полевик, отключающий подтяжку D+ к 3.3В. Устройство отваливалось, после чего его можно было переоткрыть и восстановить работоспособность не выдергивая кабель руками.
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 8 2009, 08:30
Сообщение #14


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата
Я очень давно использовал FT245. Действительно, в условиях помех связь отъезжает с примерно указанными выше симптомами. Программа при этом была на MS VC. Из рекомендаций - посадите оплетку кабеля на землю устройства толстым проводом.


Компьютер не заземлён. Это не ухудшит ситуацию? Сейчас, как я писал, оплётка у меня через RC-цепь к земле устройства подключена.

Цитата
Будет существенно лучше. В моем случае, т.к. помех было очень много и мощных окончательно помог только watchdog, от которого срабатывал полевик, отключающий подтяжку D+ к 3.3В. Устройство отваливалось, после чего его можно было переоткрыть и восстановить работоспособность не выдергивая кабель руками.


А почему не RESET использовать? Ведь будет тоже самое или нет?

Цитата(Седой @ Feb 8 2009, 00:16) *
Давайте все-таки код посмотрим, а то может быть глюк и в драйвере.


USBThread.pas - модуль потока работы с FT245.
COMPort.pas - модуль класса COM-порта.
Прикрепленные файлы
Прикрепленный файл  Soft.rar ( 3.08 килобайт ) Кол-во скачиваний: 52
 


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 8 2009, 10:40
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 8 2009, 13:30) *
USBThread.pas - модуль потока работы с FT245.
COMPort.pas - модуль класса COM-порта.



На первый взгляд все нормально.
Давайте попробуем отловить ошибку, для этого переделайте немного
вызов генераторов исключений
Вместо XXX_ComPort_Error.Create("Сообщение об ошибке")

Вызывать
XXX_ComPort_Error.CreateFmt("Сообщение об ошибке %x",[GetLastError])

И сообщите значение GetLastError.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 18:12
Рейтинг@Mail.ru


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