Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Таймаут ReadFile из USB-устройства на не-INTEL чипсетах  (Прочитано 54471 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
prottoss
Участник

ru
Offline Offline

« : 22-05-2011 05:48 » 

Привет всем.

Есть устройство выполненное на AT91SAM7S - подробнее на <реклама почикана>.
Для РС обозначено как СОМ-порт. Из драйверов только INF-файл, указывающий на штатный для Windows драйвер usbser.sys

В микроконтроллере инициализирован штатный внутренний загрузчик (SAM-BA). Этот загрузчик прошит на заводе (масочное ПЗУ) и я пытаюсь через свою программу с ним связаться и залить в МК свою прошивку.
Проблема в том что, при работе с SAM-BA, на некоторых материнских платах, с не-INTEL чипсетами обмен между ПО на РС и устройством может прерываться.
Т.е. первый запрос в устройство через WriteFile проходит (2 байта), далее чтение через ReadFile (2 байта) тоже отлично.
Далее новый запрос. Но функция ReadFile вылетает по таймауту.

Утилита работает с устройством не как с СОМ-портом, а как с USB устройством.
Т.е через "SetupDiEnumDeviceInterfaces" находится устройство с нужным VID/PID затем извлекается хэндл и, далее, уже стандартно, открывается через CreateFile. Далее все как обычно - ReadFile/WriteFile

Моя прошивка тоже работает через usbser.sys. Т.е. прошитое устройство видится программами как последовательный порт. И моя прошивка нормально функционирует на всех материнских платах с любыми чипсетами и процессорами.

В приложении функции ввода-вывода и реализованный протокол загрузчика SAM-BA

* Sources.rar (3.35 Кб - загружено 876 раз.)
« Последнее редактирование: 22-05-2011 09:22 от Джон » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 22-05-2011 06:02 » 

prottoss, интересные сведения.

Наверно эту тему нужно подвинуть куда-то поближе к железу и драйверам. И переименовать во что-нибудь вроде "Вот какие глюки бывают с устройствами на AT91SAM7S".
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
prottoss
Участник

ru
Offline Offline

« Ответ #2 : 22-05-2011 06:43 » 

Я думаю, все таки, это можно как-то решить методами Win32 API. По это и создал тему здесь.

Добавлено через 6 часов, 14 минут и 19 секунд:
Есть мысль, что как-то нужно передернуть драйвер после W/R обмена. как-то это можно сделать средствами WinAPI?
« Последнее редактирование: 22-05-2011 12:57 от prottoss » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 22-05-2011 13:33 » 

Может надо отключить устройство от драйвера usbser на время заливки прошивки?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
prottoss
Участник

ru
Offline Offline

« Ответ #4 : 22-05-2011 13:36 » 

Может надо отключить устройство от драйвера usbser на время заливки прошивки?
Не понял Вас Улыбаюсь Как это? Передача данных от программы в устройство и обратно идет через драйвер устройства. Прошивка передается в устройство блоками.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 22-05-2011 13:43 » 

Понятия не имею, как. Но если устройство контролируется этим драйвером, то подключаться параллельно ему глупо.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
prottoss
Участник

ru
Offline Offline

« Ответ #6 : 22-05-2011 14:02 » 

Понятия не имею, как. Но если устройство контролируется этим драйвером, то подключаться параллельно ему глупо.
Оно и видно, что понятия не имеете Улыбаюсь Извините.
Я не могу параллельно драйверу подключится к устройству. Это аксиома операционных систем. Я работаю с устройством только, и только через драйвер.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 22-05-2011 15:10 » 

Умничаем? Тебе помощь или поспорить?
Выгрузи драйвер и попробуй.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
prottoss
Участник

ru
Offline Offline

« Ответ #8 : 22-05-2011 15:16 » new

Умничаем? Тебе помощь или поспорить? Выгрузи драйвер и попробуй.
Я и не спорю, и тем более не умничаю. Я не пойму как это? - "Выгрузи драйвер"
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 22-05-2011 15:23 » 

Я тоже. Потому и написал, что не знаю как. Но есть факт, что драйвера могут динамически загружаться и выгружаться. Лучше об этом спросить в разделе драйверов. Перенести туда тему?

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

К примеру, поиск дает:
https://forum.shelek.ru/index.php/topic,15073.msg176967.html
http://exelab.ru/f/index.php?action=vthread&forum=5&topic=9160
http://forum.sources.ru/index.php?showtopic=246564&hl=

Есть еще такая идея: зайди в device manager и удали там COM-порт данного устройства.
« Последнее редактирование: 22-05-2011 15:27 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
prottoss
Участник

ru
Offline Offline

« Ответ #10 : 22-05-2011 15:26 » 

Но ведь, когда я заливаю в МК свою прошивку, она тоже работает через этот же usbser.sys и проблем таких совершенно не возникает...

Если считаете, что тема больше относится к проблеме драйверов, то перенесите тему.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 22-05-2011 15:28 » 

prottoss, в первом посте ты сказал, что утилита работает с USB-устройством, а не с последовательным портом...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
prottoss
Участник

ru
Offline Offline

« Ответ #12 : 22-05-2011 15:42 » 

Устройство общается с РС через USB-порт но в системе видится как СОМ-порт.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 22-05-2011 15:53 » 

А через CreateFile что ты открываешь? Выше писал, что USB-устройство.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
prottoss
Участник

ru
Offline Offline

« Ответ #14 : 22-05-2011 16:02 » 

Так и есть - открываю как USB устройтсво. Потому что я знаю, что реально это НЕ СОМ-порт, поэтому ищу устройство через VID и PID. Нахожу его путь, прибавляю к строке \\PIPE00 и открываю через CreateFile.

Так же пробовал открывать и как СОМ-порт, т.е типа CreateFile("\\\\.\\COM4", Ничего абсолютно не меняется.

На INTEL работает, на не-INTEL нет...

Добавлено через 1 минуту и 42 секунды:
Главное что интересно - один обмен данными то проходит! Т.е. я отсылаю первые два байта, и получаю от устройства ответ в виде двух байт.

Добавлено через 8 минут и 53 секунды:
Провел эксперимент.
Заслал в устройство 256 байт, которые оно не понимает - символы '?'
За тем по протоколу команду инициализации - 2 байта - ответ есть
За тем по протоколу команду дать версию загрузчика - ответа нет.
Можно сделать вывод что операция посылки данных в устройство работает нормально.
А вот с чтением данных какие то проблемы...
« Последнее редактирование: 22-05-2011 16:12 от prottoss » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 22-05-2011 17:28 » 

2 байта... а порядок следования младших и старших байтов во всех случаях одинаков?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
prottoss
Участник

ru
Offline Offline

« Ответ #16 : 22-05-2011 17:47 » 

Да.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 22-05-2011 18:33 » 

понаписали)))))
ну вы блин даете! попробую обобщить.
1. имеется AT91SAM7S с бутовым загрузчиком.
2. эмулятора нет.
3. необходимо залить во flash свою прошивку. пардон программу.
 теперь вопросы:
1. существует утилита SAM-BA которая в принципе все это должна делать - она вообще работает? на интеле, на не интеле? чем она не устраивает?
2. вы хотите повторить ее функционал в своем коде?
3. что это за куски вашей программы я почти не понял)
4. вылетает по таймауту - а сам таймаут задан - сколько? что за CFG_IO_TIMEOUT в коде встречается? где оно определено?
6. вы какой таймаут в настройках com-порта  выставляли?  хм. вижу... хотя неплохо бы остальные поля структуры определить.

PS протокол программирования видимо описан?
PPS больше секунды ставили? (на всякий случай)
PPЗS и наконец, на родном сайте http://www.at91.com/ не спрашивали?
« Последнее редактирование: 22-05-2011 18:37 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
prottoss
Участник

ru
Offline Offline

« Ответ #18 : 22-05-2011 18:53 » 

понаписали)))))
Вы почти все правильно поняли Улыбаюсь
SAM-BA лично меня устраивает всем. Утилита же написана для того, чтобы не парится с SAM-BA.
Утилита содержит в теле прошивку и сама ее и заливает в контроллер.
CFG_IO_TIMEOUT описан в другом хедере - равен 10000 миллисекундам.
Исходники ввода-вывода выложены мною в начале темы. Таймауты с помощью SetCommTimeouts я не устанавливаю. Хотя, пробовал и ими играться - безтолку.
Первый обмен данными проходит. Далее все - затык.

Самое хреновое, что я не могу проверить, получает ли их контроллер Жаль

Но все же склоняюсь к мысли, что проблема где то между драйвером и железом материнской платы.
Повторюсь. На INTEL все летает как и задумано. При чем тестировалось на разных ОС, как 32, так и 64 бит.

Еще по поводу SAM-BA - у нее обмен данными тоже обрывается. И точно так же - после первой транзакции.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 23-05-2011 09:11 » 

так может дело не в бобине?)
а в том что таймауты в бутовой прошивке SAM-BA некорректно выставлены?\
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
prottoss
Участник

ru
Offline Offline

« Ответ #20 : 23-05-2011 09:16 » 

так может дело не в бобине?)
а в том что таймауты в бутовой прошивке SAM-BA некорректно выставлены?\
В прошивке ни каких таймаутов нет. Программа ждет команду, и, если команда корректная, выполняет и выдает ответ в виде двух символов \r\n.

И почему на всех INTEL работает???

Добавлено через 51 секунду:
Имеется ввиду чипсетах. Потому как связка ATOM + nForce тоже отказывается работать
« Последнее редактирование: 23-05-2011 09:16 от prottoss » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 23-05-2011 09:21 » 

я бы вот что попробовал.... сильноне поможет, но может прояснить насчет таймаутов.
установить на две машины с Intel и НЕ-intel что нибудь на вроде HHD USB monitor.
на сайте раньше была полнофункциональная демка на 30 дней.
и помоему она выводила тайминг всех запросов/ответов.
можно попробовать сравнить - нет ли где больших пауз...
но это если других идей нет.

второй вариант - я бы все таки написал на форум службы поддержки. потому что если родная утилита не работает - то это баг.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
prottoss
Участник

ru
Offline Offline

« Ответ #22 : 23-05-2011 09:25 » 

я бы вот что попробовал.... сильноне поможет, но может прояснить насчет таймаутов.
установить на две машины с Intel и НЕ-intel что нибудь на вроде HHD USB monitor.
на сайте раньше была полнофункциональная демка на 30 дней.
и помоему она выводила тайминг всех запросов/ответов.
можно попробовать сравнить - нет ли где больших пауз...
но это если других идей нет.
Я пользуюсь USB сниффером SnoopyPro

второй вариант - я бы все таки написал на форум службы поддержки. потому что если родная утилита не работает - то это баг.
Не думаю, что это проблема ATMEL. Написал в техподдержку мелкософтам.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 23-05-2011 15:20 » 

майкрософту... это вряд ли))))))

откуда вы протокол SAM-BA взяли? не вижу его на офф-сайте.
посмотрел список 2.7 bugfix sam-ba на сайте
"- Fixed Usb/com timeout problem on some 8-Bit Nand flash."
"- Fixed DataFlash init problem on AT91SAM7A3." и т.д. наводит на размышления)
не думаю что тут драйвер CDC виноват. ему уже более десяти лет фактически..

"по протоколу команду инициализации - 2 байта - ответ есть"
и
"по протоколу команду дать версию загрузчика - ответа нет."
попробуйте паузу  вставить  между этими командами?...  или какую нибудь другую команду...

и попробуйте поспрашивать  на електрониксе  - все таки это более профильный форум в данном случае.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
prottoss
Участник

ru
Offline Offline

« Ответ #24 : 23-05-2011 15:51 » 

майкрософту... это вряд ли))))))
Посмотрим Улыбаюсь

откуда вы протокол SAM-BA взяли? не вижу его на офф-сайте.
Протокол на SAM-BA описан в любом даташите на МК серии ATMEL AT91. Он там, правда, не совсем полный. Но на это есть сниффер, с помощью которого нужное можно подглядеть Улыбаюсь

посмотрел список 2.7 bugfix sam-ba на сайте
"- Fixed Usb/com timeout problem on some 8-Bit Nand flash."
"- Fixed DataFlash init problem on AT91SAM7A3." и т.д. наводит на размышления)
не думаю что тут драйвер CDC виноват. ему уже более десяти лет фактически..
С драйвером usbser.sys общаюсь достаточно продолжительное время - примерно со времен появления Windows 2000 Улыбаюсь Одни баги исчезают, другие появляются... В принципе как и во всей ОС Улыбаюсь

Смотрел дескриптор загрузчика SAM-BA AT91 - проблем не обнаружил - нормальный такой дескриптор USB CDC-устройства.

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


и попробуйте поспрашивать  на електрониксе  - все таки это более профильный форум в данном случае.
Там я давно обитаю. И тему там прежде и создал, но чего то внятного, увы, не дождался.
http://electronix.ru/forum/index.php?showtopic=90229
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 23-05-2011 16:14 » 

не знаю не знаю) usbser в XPsp3 - 2008го года выпуска а последние багфиксы утилиты датированы 2010тым))
тут уж, нечего сказать)
так что, сказать честно, чтоб не разводить флуд на десять страниц: к сожалению не знаю, чем помочь....
и даже не знаю, что в данном случае от  драйвера надо требовать.
IRB то - идентичные, по монитору? время отправки/приема IRB  пакетов похожи, в рабочей/нерабочей конфигурации?
времянку прохождения пакетов вроде можно по IRBURB посмотреть. в IRB URB пакетах вроде должны аппаратные счетчики времени лежать....
в фреймах/микрофлеймах.

других идей нет)
« Последнее редактирование: 24-05-2011 07:46 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
prottoss
Участник

ru
Offline Offline

« Ответ #26 : 23-05-2011 16:19 » 

С драйверами я, к сожалению, не дружу... Но вод ведь еще какой парадокс. МОЕ устройство, с уже залитой прошивкой, функционирует нормально. Конфигурационные дескрипторы загрузчика SAM-BA и моей прошивки ПОЧТИ одинаковы...

В общем, разобрал взятую у знакомого проблемную систему. Пока откладываю проблему в долгий ящик. Как будут какие то новости - обязательно отпишусь.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 23-05-2011 21:55 » 

Ochkarik, IRB этож вроде на 1394, а на усб URB (ну я так думал).

prottoss, драйверу абсолютно по барабану интелловский чипсет или нет. А уж юзермодному софту тем более. Касательно таймаутов - что если попробовать синхронный ввод/вывод?

ЗЫ макрос VALIDATE повеселил - мощный (посвящается всем кто смотрел этот сорец).
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 24-05-2011 07:46 » 

resource, ну да)))) зарапортовался) URB конечно)
VALIDATE - меня тоже порадовал)))))))
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
prottoss
Участник

ru
Offline Offline

« Ответ #29 : 24-05-2011 11:19 » 

Чем это вам VALIDATE не угодил?
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines