Добрый день.
Продолжаю свою эпопею.
Собрал в DriverStudio драйвер под свой девайс. Драйвер ставится, но выдает код 10 (невозможно запустить устройство). В микроконтроллере приходит SET_CONFIGURATION с номером конфигурации 0.
Видимо дело в драйвере.
У отсылаю такой общий дескриптор:
CODE
const DriverConfigurationDescriptors driverConfigurationDescriptor =
{
{
sizeof(USBConfigurationDescriptor),
USBGenericDescriptor_CONFIGURATION,
sizeof(DriverConfigurationDescriptors),
0, // No interface in this configuration
1, // This is configuration #1
0, // No string descriptor for this configuration
0,
USBConfigurationDescriptor_POWER(100)
},
{
sizeof(USBInterfaceDescriptor),
USBGenericDescriptor_INTERFACE,
0, // This is interface #0
0, // This is setting #0 for interface
2, // Interface has 2 endpoint
0, // No interface class code
0, // No interface subclass code
0, // No interface protocol code
0, // No string descriptor
},
{
sizeof(USBEndpointDescriptor),
USBGenericDescriptor_ENDPOINT,
(((0 & 0x01) << 7) | (1 & 0xF)),
2,
0x01,
0x00 // Does not apply to Bulk endpoints
},
// Bulk-IN endpoint descriptor
{
sizeof(USBEndpointDescriptor),
USBGenericDescriptor_ENDPOINT,
(((1 & 0x01) << 7) | (2 & 0xF)),
2,
0x01,
0x00 // Does not apply to Bulk endpoints
}
} ;
То есть хочу две точки, на вход и на выход.
Точки настроил так:
CODE
//------------------------------------------------------------------------------
/// Конфигурирование конечной точки
//------------------------------------------------------------------------------
static void ConfigureEndpoint0(void)
{
const int EndpointNum = 0;
AT91C_BASE_UDP->UDP_RSTEP = AT91C_UDP_EP0;
AT91C_BASE_UDP->UDP_RSTEP = 0;
Endpoint[EndpointNum].size=8;
SET_CSR(0,(unsigned int)AT91C_UDP_EPEDS | (0 << 8) | (0 << 7));
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
AT91C_BASE_UDP->UDP_IER = (1 << EndpointNum);
}
//------------------------------------------------------------------------------
/// Конфигурирование конечной точки
//------------------------------------------------------------------------------
static void ConfigureEndpoint1(void)
{
const int EndpointNum = 1;
AT91C_BASE_UDP->UDP_RSTEP = AT91C_UDP_EP1;
AT91C_BASE_UDP->UDP_RSTEP = 0;
Endpoint[EndpointNum].size=64;
SET_CSR(1,(unsigned int)AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT | (1<<7));
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
}
//------------------------------------------------------------------------------
/// Конфигурирование конечной точки
//------------------------------------------------------------------------------
static void ConfigureEndpoint2(void)
{
const int EndpointNum = 2;
AT91C_BASE_UDP->UDP_RSTEP = AT91C_UDP_EP2;
AT91C_BASE_UDP->UDP_RSTEP = 0;
Endpoint[EndpointNum].size=64;
SET_CSR(1,(unsigned int)AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN | (0<<7));
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
}
Из за чего вообще такое может происходить? Укажите направление раскопок

PS Раскопал. В конфигурационном дескрипторе сказал, что для данной конфигурации нет интерфейса....
Сообщение отредактировал Shaienn - Dec 9 2009, 16:02