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

 
 
> Как установить драйвер на USB Device AT91RM9200?
junkl
сообщение Apr 20 2007, 13:58
Сообщение #1


Участник
*

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



Не могу установить драйвер на 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.

Подскажите, пожалуйста, в чем может быть проблема?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cebotor
сообщение Apr 20 2007, 14:41
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 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 , вашего дескриптора с теми , которые лежат в инф файле , либо есть кардинальное несоответствие интерфейсов указываемых ваши дескриптором с двайверами . у Вас какой вариант ?


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
junkl
сообщение Apr 24 2007, 16:04
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 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?

Спасибо.
Go to the top of the page
 
+Quote Post
cebotor
сообщение Apr 25 2007, 12:27
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 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?

Спасибо.

Вы не можете показать , где указанная функция применяется к дескриптору для передачи ? (хотелось бы в вашем исходном примере)
у меня вообще есть подозрение , что она вызывается где то циклически поэтому и отрабатывает только в пределах восьми байт .
Если не секрет , откуда пример ?


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
junkl
сообщение Apr 25 2007, 15:24
Сообщение #5


Участник
*

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



Цитата(cebotor @ Apr 25 2007, 13:27) *
Вы не можете показать , где указанная функция применяется к дескриптору для передачи ? (хотелось бы в вашем исходном примере)
у меня вообще есть подозрение , что она вызывается где то циклически поэтому и отрабатывает только в пределах восьми байт .
Если не секрет , откуда пример ?

Я тоже думала, может функция вызывается несколько раз, пока не передан полностью весь дескриптор?
Но не смогла найти этому подтверждение. Смотрела по DBGU, что он передает. Только 8 первых байт дескриптора.

Порядок вызова этой функции:
Прерывание по Ep0 =>
usbEp0.Handler =>
AT91F_SVC_USBCTL_Handler =>
распознавание пакета SETUP,
pSvcUdp->DisptachSetup(pSvcUdp) =>
AT91F_USB_DispatchRequest =>
распознавание STD_GET_DESCRIPTOR,
AT91F_USB_GetDescriptorDevice(pUSBCTL) =>
pUSBCTL->Write(pUSBCTL, deviceDescriptor, MIN(sizeof(deviceDescriptor), wLength),
(AT91PF_SVC_USBCTL_RWComplete) 0) =>
AT91F_SVC_USBCTL_DataIn(pSvcUdp, pSvcUdp->pUdp)


Исходный код - с atmel.com для среды ADS AT91RM9200-BasicUSB. (Переделан под IAR).
Пример могу прислать. Нужно? smile.gif

Спасибо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- junkl   Как установить драйвер на USB Device AT91RM9200?   Apr 20 2007, 13:58
|- - junkl   Цитата(cebotor @ Apr 20 2007, 15:41) если...   Apr 20 2007, 16:00
||- - cebotor   Цитата(junkl @ Apr 20 2007, 17:00) Видимо...   Apr 20 2007, 17:47
||- - junkl   Цитата(cebotor @ Apr 20 2007, 18:47) если...   Apr 20 2007, 21:12
||- - amw   Цитата(junkl @ Apr 20 2007, 21:12) А где ...   Apr 21 2007, 11:52
||- - junkl   Пытаюсь установить libusb, делаю все, как написано...   Apr 23 2007, 08:56
||- - PrSt   Цитата(junkl @ Apr 23 2007, 08:56) Пытаюс...   Apr 23 2007, 09:26
||- - cebotor   Цитата(junkl @ Apr 23 2007, 09:56) Пытаюс...   Apr 23 2007, 09:31
||- - junkl   Цитата(cebotor @ Apr 23 2007, 10:31) libu...   Apr 23 2007, 10:26
|- - amw   Цитата(junkl @ Apr 24 2007, 16:04) Теперь...   Apr 25 2007, 11:05
||- - junkl   Цитата(amw @ Apr 25 2007, 12:05) Размер к...   Apr 25 2007, 14:58
|- - amw   Цитата(junkl @ Apr 25 2007, 15:24) Я тоже...   Apr 25 2007, 15:50
|- - junkl   Цитата(amw @ Apr 25 2007, 16:50) Вот это:...   Apr 26 2007, 08:19
|- - amw   Цитата(junkl @ Apr 26 2007, 08:19) В исхо...   Apr 27 2007, 13:04
- - amw   Цитатапоправьте пожалуйста меня если Borland уже у...   Apr 23 2007, 14:29
- - amw   ЦитатаМожет быть перед передачей каждого куска над...   Apr 25 2007, 15:04


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

 


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


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