Застопорился уже четвертый день на этапе установки адреса USB ( запрос SET_ADDRESS )
Сразу после получения OUT Status пакета от хоста нулевой длины прога зависает ( т.е. не приходит запрос ), хотя следом должен быть запрос SETUP на установку адреса ( SET_ADDRESS )
Конечная нулевая точка настроена на 64 байта ( соответствует аппаратному размеру )
Код: Выделить всё
unsigned char arr[8];
unsigned char arr2[18] = { // Дескриптор устройства
0x12,
0x01,
0x10, 0x01,
0x00,
0x00,
0x00,
0x40,
0xEB, 0x03,
0x13, 0x20,
0x00, 0x01,
0x01,
0x02,
0x03,
0x01
};
int main(void)
{
Инициализация PLL, Конечной точки и Включение подтяг. резистора в режим Full Speed, Bus Reset
///--------------------------------
while( (UEINTX & (1 << RXSTPI)) == 0) // Ожидание первого запроса Setup GET_DESCRIPTOR
{}
for ( int i=0; i<=7; i++)
arr[i] = UEDATX;
UEINTX &= ~(1 << RXSTPI); // сброс флага - ACK ответ
///------ DATA IN --------
UECFG0X |= (1 << EPDIR); // Смена направления на IN
while( (UEINTX & (1 << TXINI)) == 0 ) // Ожидание пакета IN от хоста
{}
for (unsigned int i=0; i<=17; i++)
UEDATX = arr2[i];
UEINTX &= ~(1 << TXINI); // Отправка 18 байт дескриптора устройства
///------ DATA IN --------
UECFG0X &= ~(1 << EPDIR); // снова напрваление OUT
///----- Status OUT ---------
while ( (UEINTX & (1 << NAKOUTI)) == 0)
{}
UEINTX &= ~(1 << NAKOUTI); // Отправка NAK на первый OUT пакет Status
while( (UEINTX & (1 << RXOUTI)) == 0)
{}
UEINTX &= ~(1 << RXOUTI); // Сброс флага - ACK ответ
while( (UEINTX & (1 << RXSTPI)) == 0) // Ожидание следующего запроса Setup SET_ADDRESS
{}
while (1)
{}
}
Пробовал и 8-байтный режим конечной точки.
И никак не придет этот запрос.
Что может мешать ? Ведь от хоста OUTы приходят
Windows 7 SP1 x64
------
С уважением, Антон.

