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

 
 
13 страниц V  « < 9 10 11 12 13 >  
Reply to this topicStart new topic
> ARM. Энкодеры и акселерометры, Помогите решить задачу
Zliva
сообщение Oct 18 2009, 17:23
Сообщение #151


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



На CDC реализации драйвер CYUSB заработал после редактирования INFа к драйверу.
Есть ли у кого нормальная реализация дескрипторов для этого драйвера? Не хочется использовать CDC, и все его вспомогательные дескрипторы.


--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 18 2009, 17:38
Сообщение #152


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Zliva @ Oct 18 2009, 21:23) *
Есть ли у кого нормальная реализация дескрипторов для этого драйвера?

Напишите самостоятельно. Всего-то нужно Device, Configuration (Interface, Endpoint * N) и опционально String'и.
Go to the top of the page
 
+Quote Post
Zliva
сообщение Oct 22 2009, 19:17
Сообщение #153


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



Не знаю в чем конкретная проблема, попробую описать. Пришел от хоста запрос, я его обработал. Отсылаю дескриптор, а мне в терминале следующая запись:
Код
USB_Init
DisconnectUSB
END
USBD_STATE_POWERED
Don't do anything
EndBusResProcessing
AT91C_UDP_RXSUSP =
USBD_STATE_SUSPENDED =
USBD_STATE_POWERED
Don't do anything
EndBusResProcessing
REQUEST_TYPE_STANDARD=256
devDescriptor

Где проблема? Код додаю.
Прикрепленные файлы
Прикрепленный файл  Code.rar ( 7.65 килобайт ) Кол-во скачиваний: 16
 


--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 22 2009, 19:24
Сообщение #154


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Лучше изложите проблему конкретно - что просит хост, что отправляете, и что получается в результате. Запись в терминале вряд ли понятна кому-нибудь, кроме вас самих.
Go to the top of the page
 
+Quote Post
Zliva
сообщение Oct 22 2009, 20:41
Сообщение #155


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



Цитата(aaarrr @ Oct 22 2009, 22:24) *
Лучше изложите проблему конкретно - что просит хост, что отправляете, и что получается в результате. Запись в терминале вряд ли понятна кому-нибудь, кроме вас самих.

Инициализировал USB. При подключение устройства к шины, происходят прерывания. Обрабатываю их функцией USBD_InterruptHandler. При появлении прерывания от конечной точки обрабатываю его функцией ControlCommandProcessing. Пришел первый стандартный USB Request. Из него получаю getDescriptor, CurrentUSBRequest.wValue = 256. Отправляю дескриптор AT91F_USB_SendData (Тут вопрос, как определить, получил ли хост его?). Дальше не пойму, что следующий запрос CurrentUSBRequest.wValue = 1 хочет. То есть, дескриптор отправил, дальше следует EndBusResProcessing, и снова запрос CurrentUSBRequest.wValue = 256. Несколько раз повторяется, а затем функция AT91F_USB_SendStall, и прощаемся USBD_STATE_SUSPENDED


--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 22 2009, 20:50
Сообщение #156


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вы не смотрите запрашиваемую хостом длину (wLength), а пытаетесь сразу закинуть ему все 18 байт, на что, естественно, получаете сброс. В первый раз он просит 8.
Go to the top of the page
 
+Quote Post
Zliva
сообщение Oct 22 2009, 20:55
Сообщение #157


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



И что делать? Не могу въехать. Он запрашивает getConfiguration?


--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 22 2009, 20:58
Сообщение #158


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Zliva @ Oct 23 2009, 00:55) *
И что делать? Не могу въехать.

Отправить не более того, сколько разрешают.

Цитата(Zliva @ Oct 23 2009, 00:55) *
Он запрашивает getConfiguration?

Нет.
Go to the top of the page
 
+Quote Post
Zliva
сообщение Oct 23 2009, 18:42
Сообщение #159


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



Цитата(aaarrr @ Oct 22 2009, 23:50) *
Вы не смотрите запрашиваемую хостом длину (wLength), а пытаетесь сразу закинуть ему все 18 байт, на что, естественно, получаете сброс. В первый раз он просит 8.

Как Вы определили, что там такое значение?
Как обработать эти запросы? Что здесь вообще туго.

Сообщение отредактировал Zliva - Oct 23 2009, 18:46


--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2009, 19:53
Сообщение #160


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Zliva @ Oct 23 2009, 22:42) *
Как Вы определили, что там такое значение?

Опыт-с.

Цитата(Zliva @ Oct 23 2009, 22:42) *
Как обработать эти запросы? Что здесь вообще туго.

В запросе есть поле wLength, вот что говорит о нем спецификация USB 1.1:
Цитата
On an input request, a device must never return more data than is indicated by the wLength value; it may return less.

Т.е. если ваш дескриптор имеет длину 18 байт, а хост просит 8, то вернуть ему нужно 8. Остальные он спросит потом - сделает запрос device descriptor'а с wLength = 18.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Oct 23 2009, 21:41
Сообщение #161


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

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



господа не сочтите за флуд, но думаю что для понимания данной темы будет очень полезна презентация от ST по ссылке ниже:
memsgyroscopes


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
Zliva
сообщение Oct 24 2009, 19:23
Сообщение #162


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



У меня получается размер запроса не 8, а 64. Как быть?


--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 24 2009, 21:20
Сообщение #163


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну а это зачем "исправили":
Код
0x40,//0x08,   // bMaxPacketSize0

Максимальный размер пакета для нулевой точки в случае SAM7 - 8 байт.

Цитата(Zliva @ Oct 24 2009, 23:23) *
Как быть?

Еще раз прочитать процитированный мной отрывок из спецификации.
Go to the top of the page
 
+Quote Post
Zliva
сообщение Oct 25 2009, 21:33
Сообщение #164


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

Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318



Прочитал пост с нуля, понял что я тоже нуль. Страшно представить что можно задавать такие глупые вопросы.
Огромное СПАСИБО aaarrrr за терпение.

И так, дескриптор устройства отправил. Получил 8, передал 8 получил 18, передал 18. С этим понятно. Потом пришел запрос USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE. Обработал и отправил. Все дескрипторы переписываю из примера от Cypress. Затем пришел запрос конфигурации. Спрашивает 9, отвечаю тем же. Потом спрашивает 73, отвечаю. Затем стринг запрос, отвечаю. Но USBVIEW не видит дескриптора конфигурации. Видит только дескриптор устройства. Что делать?

Вот привожу объявление дескрипторов:
CODE

static const USB_DEVICE_DESCRIPTOR f_DeviceDescriptor =
{
sizeof(USB_DEVICE_DESCRIPTOR), //bLength
USB_DEVICE_DESCRIPTOR_TYPE, //bDescriptorType
0x0110, //bcdUSB - 1.
0x00, //bDeviceClass
0x00, //bDeviceSubClass
0x00, //bDeviceProtocol
0x08, //bMaxPacketSize0 - для нулевой точки
DEVICE_VID, //idVendor - LCARD
DEVICE_PID, //idProduct
1, //bcdDevice
0x01, //iManufacturer
0x02, //iProduct
0x00, //iSerialNumber -- могло бы быть 3
0x01 //bNumConfigurations
};

static const USB_DEVICE_QUALIFIER_DESCRIPTOR f_QalifierDescriptor=
{
sizeof(USB_DEVICE_QUALIFIER_DESCRIPTOR), //bLength
USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE,
0x0110, // bcdUSB;
0x00, // bDeviceClass;
0x00, // bDeviceSubClass;
0x00, // bDeviceProtocol;
0x08, // bMaxPacketSize0;
0x01, // bNumConfigurations;
0x00 // bReserved;
};

static const FULL_CONFIG_DESCRIPTOR f_ConfigurationDescriptor_Full=
{
// USB_CONFIGURATION_DESCRIPTOR g_ConfigurationDescriptor =
{
sizeof(USB_CONFIGURATION_DESCRIPTOR), //bLength
USB_CONFIGURATION_DESCRIPTOR_TYPE, //bDescriptorType

sizeof(USB_CONFIGURATION_DESCRIPTOR) +
sizeof(USB_INTERFACE_DESCRIPTOR) +
sizeof(USB_ENDPOINT_DESCRIPTOR) +
sizeof(USB_INTERFACE_DESCRIPTOR) +
sizeof(USB_ENDPOINT_DESCRIPTOR) +
sizeof(USB_INTERFACE_DESCRIPTOR) +
sizeof(USB_ENDPOINT_DESCRIPTOR) +
sizeof(USB_INTERFACE_DESCRIPTOR) +
sizeof(USB_ENDPOINT_DESCRIPTOR), //wTotalLength
0x01, //bNumInterfaces
0x01, //bConfigurationValue
0x00, //iConfiguration
/*1*/ USB_CONFIG_BUS_NOWAKEUP, // 0xA0 // attribute : Bus-powered, no wakeup
/*1*/ CURRENT_CONSUMPTION_MA/2 // Maximum power consumption (in 2mA unit, so 0x64 =100= 200mA)
},

//Interface Descriptor**********************************************************
{
sizeof(USB_INTERFACE_DESCRIPTOR), //bLength
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType
0x00, //bInterfaceNumber
0x00, //bAlternateSetting
0x01,//ENDPOINT_COUNT, //bNumEndpoints
0xFF, //bInterfaceClass
0x00, //bInterfaceSubClass
0x00, //bInterfaceProtocol нет протокола
0x00 //iInterface
},
//Endpoint Descriptor***********************************************************
{
sizeof(USB_ENDPOINT_DESCRIPTOR), //bLength
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType,
0x82, //bEndpointAddress - LTR 10
USB_ENDPOINT_TYPE_BULK, //bmAttributes
0x0040, //wMaxPacketSize
0x01 //bInterval
},

//Interface Descriptor 1 *******************************************************
{
sizeof(USB_INTERFACE_DESCRIPTOR), //bLength
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType
0x00, //bInterfaceNumber
0x01, //bAlternateSetting
0x01, //ENDPOINT_COUNT, //bNumEndpoints
0xFF, //bInterfaceClass
0x00, //bInterfaceSubClass
0x00, //bInterfaceProtocol нет протокола
0x00 //iInterface
},
//Endpoint Descriptor 1 ********************************************************
{
sizeof(USB_ENDPOINT_DESCRIPTOR), //bLength
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType,
0x02, //bEndpointAddress - LTR 10
USB_ENDPOINT_TYPE_BULK, //bmAttributes
0x0040, //wMaxPacketSize
0x01 //bInterval
},
//Interface Descriptor 2 *******************************************************
{
sizeof(USB_INTERFACE_DESCRIPTOR), //bLength
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType
0x00, //bInterfaceNumber
0x02, //bAlternateSetting
0x01, //ENDPOINT_COUNT, //bNumEndpoints
0xFF, //bInterfaceClass
0x00, //bInterfaceSubClass
0x00, //bInterfaceProtocol нет протокола
0x00 //iInterface
},
//Endpoint Descriptor 2 ********************************************************
{
sizeof(USB_ENDPOINT_DESCRIPTOR), //bLength
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType,
0x82, //bEndpointAddress - LTR 10
USB_ENDPOINT_TYPE_ISOCHRONOUS, //bmAttributes
0x0040, //wMaxPacketSize
0x01 //bInterval
},
//Interface Descriptor 3 *******************************************************
{
sizeof(USB_INTERFACE_DESCRIPTOR), //bLength
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType
0x00, //bInterfaceNumber
0x03, //bAlternateSetting
0x01, //ENDPOINT_COUNT, //bNumEndpoints
0xFF, //bInterfaceClass
0x00, //bInterfaceSubClass
0x00, //bInterfaceProtocol нет протокола
0x00 //iInterface
},
//Endpoint Descriptor 3 ********************************************************
{
sizeof(USB_ENDPOINT_DESCRIPTOR), //bLength
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType,
0x02, //bEndpointAddress - LTR 10
USB_ENDPOINT_TYPE_ISOCHRONOUS, //bmAttributes
0x0040, //wMaxPacketSize
0x01 //bInterval
}
};




--------------------
If the person is successful, he is successful in any sphere.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 25 2009, 21:55
Сообщение #165


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Zliva @ Oct 26 2009, 00:33) *
Потом пришел запрос USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE. Обработал и отправил.

Для USB 1.1 он необязателен. И запрашиваться не должен, если в device descriptor не стоит версия 2. Это подозрительно.

Цитата(Zliva @ Oct 26 2009, 00:33) *
USBVIEW не видит дескриптора конфигурации. Видит только дескриптор устройства. Что делать?

Судя по тому, что хост "проглотил" конфигурацию и попросил стринг, его все устроило. По USBVIEW, к сожалению, ничего не подскажу, т.к. не использовал.
Go to the top of the page
 
+Quote Post

13 страниц V  « < 9 10 11 12 13 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:53
Рейтинг@Mail.ru


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