prottoss
Участник
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
|
|
« Последнее редактирование: 22-05-2011 09:22 от Джон »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 22-05-2011 06:02 » |
|
prottoss, интересные сведения.
Наверно эту тему нужно подвинуть куда-то поближе к железу и драйверам. И переименовать во что-нибудь вроде "Вот какие глюки бывают с устройствами на AT91SAM7S".
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #2 : 22-05-2011 06:43 » |
|
Я думаю, все таки, это можно как-то решить методами Win32 API. По это и создал тему здесь.
Добавлено через 6 часов, 14 минут и 19 секунд: Есть мысль, что как-то нужно передернуть драйвер после W/R обмена. как-то это можно сделать средствами WinAPI?
|
|
« Последнее редактирование: 22-05-2011 12:57 от prottoss »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #3 : 22-05-2011 13:33 » |
|
Может надо отключить устройство от драйвера usbser на время заливки прошивки?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #4 : 22-05-2011 13:36 » |
|
Может надо отключить устройство от драйвера usbser на время заливки прошивки?
Не понял Вас Как это? Передача данных от программы в устройство и обратно идет через драйвер устройства. Прошивка передается в устройство блоками.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #5 : 22-05-2011 13:43 » |
|
Понятия не имею, как. Но если устройство контролируется этим драйвером, то подключаться параллельно ему глупо.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #6 : 22-05-2011 14:02 » |
|
Понятия не имею, как. Но если устройство контролируется этим драйвером, то подключаться параллельно ему глупо. Оно и видно, что понятия не имеете Извините. Я не могу параллельно драйверу подключится к устройству. Это аксиома операционных систем. Я работаю с устройством только, и только через драйвер.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #7 : 22-05-2011 15:10 » |
|
Умничаем? Тебе помощь или поспорить? Выгрузи драйвер и попробуй.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #8 : 22-05-2011 15:16 » |
|
Умничаем? Тебе помощь или поспорить? Выгрузи драйвер и попробуй. Я и не спорю, и тем более не умничаю. Я не пойму как это? - "Выгрузи драйвер"
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #9 : 22-05-2011 15:23 » |
|
Я тоже. Потому и написал, что не знаю как. Но есть факт, что драйвера могут динамически загружаться и выгружаться. Лучше об этом спросить в разделе драйверов. Перенести туда тему? Суть в том, что над драйвером USB, обслуживающим хаб, стоит драйвер последовательного порта. Последний и нужно либо выгрузить, либо как-то заставить отключиться от данного устройства. Полагаю, что он конфликтует с прямым доступом через пользовательское API. К примеру, поиск дает: https://forum.shelek.ru/index.php/topic,15073.msg176967.htmlhttp://exelab.ru/f/index.php?action=vthread&forum=5&topic=9160http://forum.sources.ru/index.php?showtopic=246564&hl=Есть еще такая идея: зайди в device manager и удали там COM-порт данного устройства.
|
|
« Последнее редактирование: 22-05-2011 15:27 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #10 : 22-05-2011 15:26 » |
|
Но ведь, когда я заливаю в МК свою прошивку, она тоже работает через этот же usbser.sys и проблем таких совершенно не возникает...
Если считаете, что тема больше относится к проблеме драйверов, то перенесите тему.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #11 : 22-05-2011 15:28 » |
|
prottoss, в первом посте ты сказал, что утилита работает с USB-устройством, а не с последовательным портом...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #12 : 22-05-2011 15:42 » |
|
Устройство общается с РС через USB-порт но в системе видится как СОМ-порт.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 22-05-2011 15:53 » |
|
А через CreateFile что ты открываешь? Выше писал, что USB-устройство.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
prottoss
Участник
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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #15 : 22-05-2011 17:28 » |
|
2 байта... а порядок следования младших и старших байтов во всех случаях одинаков?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #16 : 22-05-2011 17:47 » |
|
Да.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #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 уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #18 : 22-05-2011 18:53 » |
|
понаписали))))) Вы почти все правильно поняли SAM-BA лично меня устраивает всем. Утилита же написана для того, чтобы не парится с SAM-BA. Утилита содержит в теле прошивку и сама ее и заливает в контроллер. CFG_IO_TIMEOUT описан в другом хедере - равен 10000 миллисекундам. Исходники ввода-вывода выложены мною в начале темы. Таймауты с помощью SetCommTimeouts я не устанавливаю. Хотя, пробовал и ими играться - безтолку. Первый обмен данными проходит. Далее все - затык. Самое хреновое, что я не могу проверить, получает ли их контроллер Но все же склоняюсь к мысли, что проблема где то между драйвером и железом материнской платы. Повторюсь. На INTEL все летает как и задумано. При чем тестировалось на разных ОС, как 32, так и 64 бит. Еще по поводу SAM-BA - у нее обмен данными тоже обрывается. И точно так же - после первой транзакции.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #19 : 23-05-2011 09:11 » |
|
так может дело не в бобине?) а в том что таймауты в бутовой прошивке SAM-BA некорректно выставлены?\
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #20 : 23-05-2011 09:16 » |
|
так может дело не в бобине?) а в том что таймауты в бутовой прошивке SAM-BA некорректно выставлены?\
В прошивке ни каких таймаутов нет. Программа ждет команду, и, если команда корректная, выполняет и выдает ответ в виде двух символов \r\n. И почему на всех INTEL работает??? Добавлено через 51 секунду:Имеется ввиду чипсетах. Потому как связка ATOM + nForce тоже отказывается работать
|
|
« Последнее редактирование: 23-05-2011 09:16 от prottoss »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #21 : 23-05-2011 09:21 » |
|
я бы вот что попробовал.... сильноне поможет, но может прояснить насчет таймаутов. установить на две машины с Intel и НЕ-intel что нибудь на вроде HHD USB monitor. на сайте раньше была полнофункциональная демка на 30 дней. и помоему она выводила тайминг всех запросов/ответов. можно попробовать сравнить - нет ли где больших пауз... но это если других идей нет.
второй вариант - я бы все таки написал на форум службы поддержки. потому что если родная утилита не работает - то это баг.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #22 : 23-05-2011 09:25 » |
|
я бы вот что попробовал.... сильноне поможет, но может прояснить насчет таймаутов. установить на две машины с Intel и НЕ-intel что нибудь на вроде HHD USB monitor. на сайте раньше была полнофункциональная демка на 30 дней. и помоему она выводила тайминг всех запросов/ответов. можно попробовать сравнить - нет ли где больших пауз... но это если других идей нет. Я пользуюсь USB сниффером SnoopyPro второй вариант - я бы все таки написал на форум службы поддержки. потому что если родная утилита не работает - то это баг.
Не думаю, что это проблема ATMEL. Написал в техподдержку мелкософтам.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #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 уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
prottoss
Участник
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
|
|
« Ответ #25 : 23-05-2011 16:14 » |
|
не знаю не знаю) usbser в XPsp3 - 2008го года выпуска а последние багфиксы утилиты датированы 2010тым)) тут уж, нечего сказать) так что, сказать честно, чтоб не разводить флуд на десять страниц: к сожалению не знаю, чем помочь.... и даже не знаю, что в данном случае от драйвера надо требовать. IRB то - идентичные, по монитору? время отправки/приема IRB пакетов похожи, в рабочей/нерабочей конфигурации? времянку прохождения пакетов вроде можно по IRBURB посмотреть. в IRB URB пакетах вроде должны аппаратные счетчики времени лежать.... в фреймах/микрофлеймах.
других идей нет)
|
|
« Последнее редактирование: 24-05-2011 07:46 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #26 : 23-05-2011 16:19 » |
|
С драйверами я, к сожалению, не дружу... Но вод ведь еще какой парадокс. МОЕ устройство, с уже залитой прошивкой, функционирует нормально. Конфигурационные дескрипторы загрузчика SAM-BA и моей прошивки ПОЧТИ одинаковы...
В общем, разобрал взятую у знакомого проблемную систему. Пока откладываю проблему в долгий ящик. Как будут какие то новости - обязательно отпишусь.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #27 : 23-05-2011 21:55 » |
|
Ochkarik, IRB этож вроде на 1394, а на усб URB (ну я так думал).
prottoss, драйверу абсолютно по барабану интелловский чипсет или нет. А уж юзермодному софту тем более. Касательно таймаутов - что если попробовать синхронный ввод/вывод?
ЗЫ макрос VALIDATE повеселил - мощный (посвящается всем кто смотрел этот сорец).
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #28 : 24-05-2011 07:46 » |
|
resource, ну да)))) зарапортовался) URB конечно) VALIDATE - меня тоже порадовал)))))))
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #29 : 24-05-2011 11:19 » |
|
Чем это вам VALIDATE не угодил?
|
|
|
Записан
|
|
|
|
|