проинициализировал UDP, запускаю программу, втыкаю шнур USB, пока работаю не по прерываниям, в вайле проверяю флаг RXSETUP, после его установки считываю RXBYTECNT байт (8) из ФИФО, вот они 0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 считаю полученный фрейм запросом хоста дескриптора устройства, т.к. размер дескриптора больше макс. размера буфера для нулевой конечной точки, разбиваю дескриптор на 3 части (8 8 2 байта) , записываю первые 8 байт в ФИФО, устанавливаю флаг TXPKTRDY, сбрасываю TXCOMP, жду пока TXPKTRDY == 0, отправляю в ФИФО след. 8 байт, потом оставшиеся 2 байта , вот мой дескриптор : //! \brief Device descriptor #define USB_DEVICE_DESCRIPTOR 0x01 //! \brief Interface power descriptor #define USB_ENDPOINT0_MAXPACKETSIZE 8 //! idVendor - ATMEL Vendor ID #define USB_VENDOR_ATMEL 0x03EB //! bcdUSB field - USB 2.0 specification code #define USB2_00 0x0200 #define USB1_10 0x0110 static const S_usb_device_descriptor sDeviceDescriptor = {
sizeof(S_usb_device_descriptor), // Size of this descriptor in bytes USB_DEVICE_DESCRIPTOR, // DEVICE Descriptor Type USB1_10, // USB Specification 2.0 0x00, // Class is specified in the interface descriptor. 0x00, // Subclass is specified in the interface descriptor. 0x00, // Protocol is specified in the interface descriptor. USB_ENDPOINT0_MAXPACKETSIZE, // Maximum packet size for endpoint zero USB_VENDOR_ATMEL, // Vendor ID "ATMEL" 0x1234, // Product ID 0x0001, // Device release number 0x01, // Index 1: manufacturer string 0x02, // Index 2: product string 0x03, // Index 3: serial number string 0x01 // One possible configurations }; система пишет, что обнаружено неизвестное устройство, в диспетчере DEVid = 0000 VENDORid=0000? винды повторяют посылку запроса дескриптора еще 3 раза, т.е. принимаются пакеты правильно, проблема с отправкой. Намекните, чего я не так делаю ? Спасибо
Сообщение отредактировал Понедельник - Oct 3 2007, 11:27
|