Пришла пора подключить USB в AVR32, написал тестовое приложение на основе примера из SF 1.7, для примерной оценки скорости при передачи данных на хост при работе без прерываний и DMA. Приложение тестирую в RealTerm, устройство CDC с драйвером usbser.
Скорость передачи получилась ровно 64 Кб/с, что означает, что происходит одна транзакция передачи данных на хост за фрейм.
Проверил не приходит ли NAK от хоста - нет не приходит.
Прилагаю код:
Код
while(1)
{
// Проверяем не пришел ли NAK от хоста
if (Is_usb_nak_in(TX_EP))
PORT0->ovrc = 0x00000100;
// Ждем освобождения буфера
PORT0->ovrs = 0x00000010;
while( !Is_usb_in_ready(TX_EP) );
PORT0->ovrc = 0x00000010;
Usb_reset_endpoint_fifo_access(TX_EP);
// Сбрасываем TXINI
Usb_ack_in_ready(TX_EP);
// Записываем данные в буфер - 64 байта, равно размеру конечной точки
Usb_write_endpoint_data(TX_EP, 16, Data[0]);
Usb_write_endpoint_data(TX_EP, 16, Data[1]);
Usb_write_endpoint_data(TX_EP, 16, Data[2]);
Usb_write_endpoint_data(TX_EP, 16, Data[3]);
// Отсылаем данные из буфера
Usb_ack_fifocon(TX_EP);
}
Конечная точка с двойным буфферизированием, по после сброса FIFOCON на второй банк не переключаемся, так TXINI не устанавливается..
Уважаемые знатоки AVR32 и USB, подскажите, что я делаю не так, может подтверждение приёма данных от хоста обрабатывать нужно?
Или может вообще проблема в драйвере usbser, читал на форму, что он очень медленный и его надо нагружать заранее, чтобы хост планировал больше bulk транзакций....сам с USB работаю совсем недавно, поэтому наверное много еще не понимаю.