|
|
 |
Ответов
|
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 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, 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, 15:24
|
Участник

Группа: Новичок
Сообщений: 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). Пример могу прислать. Нужно? Спасибо.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|