| 
			| 
					
						| 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 | 
								|  | « Ответ #3 : 22-05-2011 13:33 »  |  | 
 
 Может надо отключить устройство от драйвера usbser на время заливки прошивки? |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| prottoss 
								Участник    Offline | 
								|  | « Ответ #4 : 22-05-2011 13:36 »  |  | 
 
 Может надо отключить устройство от драйвера usbser на время заливки прошивки?
 Не понял Вас    Как это? Передача данных от программы в устройство и обратно идет через драйвер устройства. Прошивка передается в устройство блоками.  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #5 : 22-05-2011 13:43 »  |  | 
 
 Понятия не имею, как. Но если устройство контролируется этим драйвером, то подключаться параллельно ему глупо. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| prottoss 
								Участник    Offline | 
								|  | « Ответ #6 : 22-05-2011 14:02 »  |  | 
 
 Понятия не имею, как. Но если устройство контролируется этим драйвером, то подключаться параллельно ему глупо. Оно и видно, что понятия не имеете    Извините. Я не могу параллельно драйверу подключится к устройству. Это аксиома операционных систем. Я работаю с устройством только, и только через драйвер.  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #7 : 22-05-2011 15:10 »  |  | 
 
 Умничаем? Тебе помощь или поспорить?Выгрузи драйвер и попробуй.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| prottoss 
								Участник    Offline | 
								|  | « Ответ #8 : 22-05-2011 15:16 »  |  | 
 
 Умничаем? Тебе помощь или поспорить? Выгрузи драйвер и попробуй.  Я и не спорю, и тем более не умничаю. Я не пойму как это? - "Выгрузи драйвер" |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #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 | 
								|  | « Ответ #11 : 22-05-2011 15:28 »  |  | 
 
 prottoss, в первом посте ты сказал, что утилита работает с USB-устройством, а не с последовательным портом... |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| prottoss 
								Участник    Offline | 
								|  | « Ответ #12 : 22-05-2011 15:42 »  |  | 
 
 Устройство общается с РС через USB-порт но в системе видится как СОМ-порт. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #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 посмотреть. вIRBURB пакетах вроде должны аппаратные счетчики времени лежать....в фреймах/микрофлеймах.
 
 других идей нет)
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 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 не угодил? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |