На стороне хоста использую функцию UsbBuiltVendorRequest(&urb, URB_FUNCTION_VENDOR_DEVICE, sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST), 0, 0, 0x0C, 0, 0, &buf, NULL, 4, NULL)
для посылки устройству 4-х байтового значения. Устройство получает пакет SETUP в 8-байтный буфер (set-up token).
Никаких прерываний по EP0RX не получаю. Где должны находится отправленные данные? Как корректно обрабатывать SETUP запросы, содержащие данные (в направлении OUT).
galjoen
Mar 7 2009, 14:26
Цитата(ArkZel @ Mar 7 2009, 10:32)

...
Никаких прерываний по EP0RX не получаю. Где должны находится отправленные данные? Как корректно обрабатывать SETUP запросы, содержащие данные (в направлении OUT).
С ISP1583 не работал. Но по логике нужно сначала разобрать сетупный пакет, а затем приём данных разрешить. А м.б. в данном случае нужно не данные принимать, а STALL хосту послать. Микросхема откуда об этом знать может? Она пока вы не решите NAK-овать будет...
Не знаю, как для 1583, но у меня в 1581 сделано так (и все работает): считывается setup-пакет, затем в endpoint index ставится 0, далее дожидаемся, пока в регистре длины не окажется нужное число байт (пришедшее в setup'e или 64, что меньше). Затем считываем пришедшие данные. Если их было больше 64, остальное принимаем по прерываниям. Я уже не помню за давностию лет, почему так сделано, но работает.
PS. В драйвере запрос правильный. Единственно, я бы вместо URB_FUNCTION_VENDOR_DEVICE поставил URB_FUNCTION_VENDOR_INTERFACE и изменил, соответственно, разборку в устройстве.
Пробую передать данные на 0-ю конечную точку с помощью Driver Wizard. Эффект тот же. Принимаю setup:
bmRequestType = 0x40
bRequest = 0x0C
wValue = 0x0000
wIndex = 0x0000
wLength = 0x0004.
После этого пытаюсь забрать данные с EP0OUT. Однако длина принятых данных = 0, никакого прерывания я тоже не ловлю.
Как вообще забрать данные с контрольной нулевой точки.
Пробовал делать инициализацию Ep0Out, ни к чему не привело.
Все нашел ошибку!
Нужно было установить бит USB_ISP1583_regs->Control_Function.BITS.DSEN = 1; для приема данных.
Надо лучше читать документацию
Всем спасибо можно считать тему закрытой.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.