опытным путем установленно путем закоментирования части обработки запроса SET_CONTROL_LINE_STATE (контроллер его отклоняет)
Код
/*case SET_CONTROL_LINE_STATE:
{
//AT91C_BASE_US0 -> US_CR = AT91C_US_RXDIS | AT91C_US_TXDIS;
ZERO_PACKET();
break;
}*/
что какой то косяк в обработке этого запроса... по умолчанию отправлял нулевой пакет на AT91SAM7A3 это срабатывало...
После закомента пытался открыть порт... Посыпались спецефические запросы (в принципе это очень хорошо, так как раньше они при открытии порта запросы не сыпались)...
Оказалось что обработка запроса SET_CONTROL_LINE_STATE тут не при чем!... Почему то косяк в конечных точках!
Еще кое что выяснилось... Косяк именно в точке BULK_IN!!! На этапе конфигурации конечную точку с этой конфигурацией закоментировал и порт начал корректно открываться!
Еще где бы я ни ставил дескриптор конечной точки BULK_IN, менял номера конечной точки BULK_IN и соответственно в дескрипторе менял все равно! Драйвер почему то не любит именно BULK_IN конечную точку...

Проблема оказалась в конечной точке с атрибутами BULK_IN. Комп упорно отказывался работать с этой конфигурацией. Поменял атрибут на ISO_IN все заработало!!!...
По спецификации CDC конечные точки могут быть либо изохорными либо BULK точки.
С изохорной точкой не работает прием (передача данных в хост).
Менял все булк точки на изохорные и передача в девайс отвалилась...
С изохорными точками нифига не работает, а с BULK_IN точкой порт не открывается. что за хрень...
Дескриптор устройства
CODE
static const USB_DEVICE_DESCRIPTOR Device_Descriptor =
{
sizeof(Device_Descriptor),
DEVICE_DESCRIPTOR,
DEVICE_USB1_1,
2,
0,
0,
8,
0x03EB,
0x0110,
0x0110,
INDEX_MANUFACTURE,
INDEX_PRODUCTID,
INDEX_SERIAL_NUMBER,
1,
};
Дескриптор конфигурации
CODE
static const USB_Configuration Configuration =
{
{
sizeof(USB_CONFIGURATION_DESCRIPTOR),
CONFIGURATION_DESCRIPTOR,
sizeof(Configuration),
2,
1,
0,
0x80,
0xFA,
},
{
sizeof(USB_INTERFACE_DESCRIPTOR),
INTERFACE_DESCRIPTOR,
2,
0,
1,
2,
2,
0,
0x00
},
{
0x05, 0x24, 0x00, 0x10, 0x01,
0x04, 0x24, 0x02, 0x00,
0x05, 0x24, 0x06, 0x00, 0x01,
0x05, 0x24, 0x01, 0x03, 0x01,
},
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
ENDPOINT_DESCRIPTOR,
ENDPOINT_IN | 3,
ENDPOINT_INTERRUPT,
8,
10,
},
{
sizeof(USB_INTERFACE_DESCRIPTOR),
INTERFACE_DESCRIPTOR,
3,
0,
2,
0xA,
0,
0,
0x00
},
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
ENDPOINT_DESCRIPTOR,
0x02,
0x02,
64,
0,
},
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
ENDPOINT_DESCRIPTOR,
0x81,
0x02,
64,
0,
},
};
Все варианты исчерпал...
АААААААААААААА!!!! ПОБЕДИЛ!!!!!!
Все на выходных надо напиться....
Вся соль была в...
CODE
#define AT91C_UDP_EP0 ((unsigned int) 0x1 << 0) // (UDP) Reset Endpoint 0
#define AT91C_UDP_EP1 ((unsigned int) 0x1 << 1) // (UDP) Reset Endpoint 1
#define AT91C_UDP_EP2 ((unsigned int) 0x1 << 2) // (UDP) Reset Endpoint 2
#define AT91C_UDP_EP3 ((unsigned int) 0x1 << 3) // (UDP) Reset Endpoint 3
#define AT91C_UDP_EP4 ((unsigned int) 0x1 << 4) // (UDP) Reset Endpoint 4
#define AT91C_UDP_EP5 ((unsigned int) 0x1 << 5) // (UDP) Reset Endpoint 5
#define AT91C_UDP_EP0 ((unsigned int) 0) // (UDP) Endpoint 0
#define AT91C_UDP_EP1 ((unsigned int) 1) // (UDP) Endpoint 1
#define AT91C_UDP_EP2 ((unsigned int) 2) // (UDP) Endpoint 2
#define AT91C_UDP_EP3 ((unsigned int) 3) // (UDP) Endpoint 3
#define AT91C_UDP_EP4 ((unsigned int) 4) // (UDP) Endpoint 4
#define AT91C_UDP_EP5 ((unsigned int) 5) // (UDP) Endpoint 5
Библиотеках на AT91SAM7A3 и AT91SAM7X512. Первую я собственно и подковырял немного)))