|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Apr 20 2007, 14:41
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(junkl @ Apr 20 2007, 14:58)  Не могу установить драйвер на USB Device AT91RM9200. При подключении устройства к компу Windows обнаруживает Неизвестное устройство. Любые попытки переустановить драйвер (указать путь к atm6124.inf или atm6124ser.inf) бесполезны. В отладчике вижу, что мой девайс получает запрос GET_DEVICE_DESCRIPTOR и отсылает хосту этот дескриптор. Но ничего не происходит. Неизвестное устройство остается неизвестным. В папочке Windows/system32 у меня лежат usbser.sys и atm6124.sys, а в папочке Windows/inf и atm6124.inf, и atm6124ser.inf, и atm6119.inf.
Подскажите, пожалуйста, в чем может быть проблема? если Винда не дает выбрать инф файл для устройства , говоря о том , что в нем подходящих данных нет , то это означтать может только два варианта - либо не совпадают VID и PID , вашего дескриптора с теми , которые лежат в инф файле , либо есть кардинальное несоответствие интерфейсов указываемых ваши дескриптором с двайверами . у Вас какой вариант ?
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 20 2007, 16:00
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Цитата(cebotor @ Apr 20 2007, 15:41)  если Винда не дает выбрать инф файл для устройства , говоря о том , что в нем подходящих данных нет , то это означтать может только два варианта - либо не совпадают VID и PID , вашего дескриптора с теми , которые лежат в инф файле , либо есть кардинальное несоответствие интерфейсов указываемых ваши дескриптором с двайверами . у Вас какой вариант ? Видимо, у меня второй вариант.  Спасибо, буду разбираться.
|
|
|
|
|
Apr 20 2007, 17:47
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(junkl @ Apr 20 2007, 17:00)  Видимо, у меня второй вариант.  Спасибо, буду разбираться. если хотите увидеть то , что в самом деле фидит винда получая Ваши дескрипторы - то можно воспользоваться утилитой библиотеки libusb
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 20 2007, 21:12
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Цитата(cebotor @ Apr 20 2007, 18:47)  если хотите увидеть то , что в самом деле фидит винда получая Ваши дескрипторы - то можно воспользоваться утилитой библиотеки libusb А где ее взять?
|
|
|
|
|
Apr 23 2007, 08:56
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Пытаюсь установить libusb, делаю все, как написано в INSTALL.libusb ( % gzip -cd libusb-0.1.12.tar.gz | tar xvf - # unpack the sources % cd libusb-0.1.12 # change to the toplevel directory % ./configure # run the `configure' script % make # build libusb [ Become root if necessary ] % make install )
Распаковать-то я, конечно, распаковала и в папочку libusb-0.1.12 зашла. Но у меня не получается запустить скрипт 'configure'
В ответ на './configure' я получаю: "." не является внутренней или внешней командой, испольн-ой программой или пакетным файлом.
В ответ на 'make' получаю: MAKE Version 5.2 Copiright <c> 1987, 2000 Borland
В ответ на 'make install' получаю: MAKE Version 5.2 Copiright <c> 1987, 2000 Borland Fatal: 'install' does not exist - don't know how to make it ----------------------------------------------------------- Чего-то не хватает? Может надо что-нибудь предварительно установить? Спасибо.
|
|
|
|
|
Apr 23 2007, 09:26
|

http://uschema.com
   
Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394

|
Цитата(junkl @ Apr 23 2007, 08:56)  Пытаюсь установить libusb, делаю все, как написано в INSTALL.libusb ( % gzip -cd libusb-0.1.12.tar.gz | tar xvf - # unpack the sources % cd libusb-0.1.12 # change to the toplevel directory % ./configure # run the `configure' script % make # build libusb [ Become root if necessary ] % make install )
Распаковать-то я, конечно, распаковала и в папочку libusb-0.1.12 зашла. Но у меня не получается запустить скрипт 'configure'
В ответ на './configure' я получаю: "." не является внутренней или внешней командой, испольн-ой программой или пакетным файлом.
В ответ на 'make' получаю: MAKE Version 5.2 Copiright <c> 1987, 2000 Borland
В ответ на 'make install' получаю: MAKE Version 5.2 Copiright <c> 1987, 2000 Borland Fatal: 'install' does not exist - don't know how to make it ----------------------------------------------------------- Чего-то не хватает? Может надо что-нибудь предварительно установить? Спасибо. Стоп.... Погодите ка.... может я что-то не догоняю(не решал еще эту задачу), однако хочу хотя-бы для себя понять... причем тут Borland? Вы что это делаете в виндовс? Вам привели ссылочку, и.... там ведь черным по белому написано Operating System support Linux FreeBSD NetBSD OpenBSD Darwin MacOS Xот куда вы решили что Borland сможет собрать это хозяйство? не удевительно Вы получаете вот это Код В ответ на 'make install' получаю: MAKE Version 5.2 Copiright <c> 1987, 2000 Borland Fatal: 'install' does not exist - don't know how to make it поправьте пожалуйста меня если Borland уже умеет работать с утилитой make... Если я все верно понял - то, Вам наверно это надо запускать со стороны "USB Device AT91RM9200" c Linux...
--------------------
|
|
|
|
|
Apr 23 2007, 09:31
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(junkl @ Apr 23 2007, 09:56)  Пытаюсь установить libusb, делаю все, как написано в INSTALL.libusb libusb есть и виндовый и линуксовый , если Вам нужен виндовый , то ссылку могу дать , там ничего вобще собирать не надо. то что Вы скачали , можно собрать под виндой , но работать будет под линуксом. виндовый лежит тут http://libusb-win32.sourceforge.net так подо что Вам ?
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 23 2007, 10:26
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Цитата(cebotor @ Apr 23 2007, 10:31)  libusb есть и виндовый и линуксовый , если Вам нужен виндовый , то ссылку могу дать , там ничего вобще собирать не надо. то что Вы скачали , можно собрать под виндой , но работать будет под линуксом. виндовый лежит тут http://libusb-win32.sourceforge.net так подо что Вам ? Мне под Windows надо. Спасибо.
|
|
|
|
|
Apr 23 2007, 14:29
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата поправьте пожалуйста меня если Borland уже умеет работать с утилитой make... Borland-овские инструменты (компиляторы, IDE ...) имею свой make. Цитата Если я все верно понял - то, Вам наверно это надо запускать со стороны "USB Device AT91RM9200" c Linux... Нет, на хосте. Но использовать Windows версию. Хотя и на RM9200 под Linux тоже можно, я думаю. Тогда использовать Linux версию, если там Linux.
Сообщение отредактировал amw - Apr 23 2007, 14:34
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 24 2007, 16:04
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Цитата(cebotor @ Apr 20 2007, 15:41)  если Винда не дает выбрать инф файл для устройства , говоря о том , что в нем подходящих данных нет , то это означтать может только два варианта - либо не совпадают VID и PID , вашего дескриптора с теми , которые лежат в инф файле , либо есть кардинальное несоответствие интерфейсов указываемых ваши дескриптором с двайверами . у Вас какой вариант ? Теперь я поняла, что у меня как раз первый вариант: мое Неизвестное устройство отображается в Диспетчере устройств с PID и VID = 0. Смотрю в отладчике передачу дескриптора устройства по запросу от хоста. Может быть код моей функции неверен? Код void AT91F_SVC_USBCTL_DataIn( AT91PS_SVC_USBCTL pSvcUdp, // \arg Pointer to an USBCTL service AT91PS_UDP pUdp) // \arg Pointer to UDP registers { char *pBuffer; unsigned int i; // If bufferSize == 0 Send a Zero length packet if (pSvcUdp->bufferSize == 0) AT91F_UDP_EpEndOfWr(pUdp, 0); // pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY; - data in FIFI is ready to be sent // else initialize DPR else { printf ("-I- In %d \r", pSvcUdp->bufferSize ); pBuffer = pSvcUdp->pBuffer;
do{// while (pSvcUdp->bufferSize){ if (pSvcUdp->bufferSize >= 8) { // bank 0 = 8 byte ? AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); pSvcUdp->bufferSize -= 8; } else { for (i=0;i<pSvcUdp->bufferSize;i++) AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
pSvcUdp->bufferSize = 0; }
pSvcUdp->pBuffer = pBuffer; AT91F_UDP_EpEndOfWr(pUdp, 0); // pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY; - data in FIFI is ready to be sent } while (pSvcUdp->bufferSize); }
pSvcUdp->eot = !(pSvcUdp->bufferSize); } В исходном примере код был такой: Код ... // If bufferSize == 0 Send a Zero length packet if (pSvcUdp->bufferSize == 0) AT91F_UDP_EpEndOfWr(pUdp, 0);
// else initialize DPR else { pBuffer = pSvcUdp->pBuffer; if (pSvcUdp->bufferSize >= 8) { AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); pSvcUdp->bufferSize -= 8; } else while (pSvcUdp->bufferSize--) AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++); pSvcUdp->pBuffer = pBuffer; AT91F_UDP_EpEndOfWr(pUdp, 0); } pSvcUdp->eot = !(pSvcUdp->bufferSize); ... Но только вот я не понимаю, как с помощью этой функции можно передать 18-байтный дескриптор, если реально передается только 8? Спасибо.
|
|
|
|
|
Apr 25 2007, 11:05
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(junkl @ Apr 24 2007, 16:04)  Теперь я поняла, что у меня как раз первый вариант: мое Неизвестное устройство отображается в Диспетчере устройств с PID и VID = 0. Смотрю в отладчике передачу дескриптора устройства по запросу от хоста.
Но только вот я не понимаю, как с помощью этой функции можно передать 18-байтный дескриптор, если реально передается только 8?
Спасибо. Размер конечной точки ноль равен восьми байтам? Я не знаю, как у RM9200 с этим размером. Если да, то нужно слать дескриптор устройства (который 18 байт длиной) порциями по восемь или меньше для последней порции байт. А точнее тремя порциями 8, 8, 2 байт. Проверте сам дескриптор. Если там VID и PID равны нулю (что очень вероятно для примера) то укажите там правильные значения, которые прописаны в inf файле. VID и PID равные нулю быть не могут. Смотрите спецификацию USB.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 25 2007, 12:27
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(junkl @ Apr 24 2007, 17:04)  void AT91F_SVC_USBCTL_DataIn( AT91PS_SVC_USBCTL pSvcUdp, // \arg Pointer to an USBCTL service AT91PS_UDP pUdp) // \arg Pointer to UDP registers {
Но только вот я не понимаю, как с помощью этой функции можно передать 18-байтный дескриптор, если реально передается только 8?
Спасибо. Вы не можете показать , где указанная функция применяется к дескриптору для передачи ? (хотелось бы в вашем исходном примере) у меня вообще есть подозрение , что она вызывается где то циклически поэтому и отрабатывает только в пределах восьми байт . Если не секрет , откуда пример ?
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 25 2007, 14:58
|
Участник

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539

|
Цитата(amw @ Apr 25 2007, 12:05)  Размер конечной точки ноль равен восьми байтам? Я не знаю, как у RM9200 с этим размером. Если да, то нужно слать дескриптор устройства (который 18 байт длиной) порциями по восемь или меньше для последней порции байт. А точнее тремя порциями 8, 8, 2 байт. Проверте сам дескриптор. Если там VID и PID равны нулю (что очень вероятно для примера) то укажите там правильные значения, которые прописаны в inf файле. VID и PID равные нулю быть не могут. Смотрите спецификацию USB. Да, размер Ep0 = 8. VID и PID ненулевые, совпадают со значениями в файле inf. В своей функции я и передаю по 8 и меньше байт (8, 8, 2). Но устройство не распознается. Я вот думаю, может я некорректно заканчиваю передачу каждых 8 байт? Я вызываю функцию после передачи каждых 8, 8 и 2 байт: AT91F_UDP_EpEndOfWr(pUdp, 0); // pUDP->UDP_CSR[endpoint] |= AT91C_UDP_TXPKTRDY; - data in FIFI is ready to be sent, чтобы показать, что данные готовы к передаче. Может быть перед передачей каждого куска надо еще ждать установки флага TX_COMP, чтобы удостовериться, что данные получены хостом? Хотя я пробовала другой пример, и там этот флаг у меня не устанавливается. И почему тогда в примере нет анализа этого флага? Как проверить, что хост вообще получает мои данные?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|