[an error occurred while processing this directive]
Что-то не могу добить USB в VC5509.(+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено misyachniy 23 марта 2006 г. 17:16


Что-то не могу добить USB в VC5509.
Промучился как-то с TUSB3210 довольно долго и
здесь тоже самое, не могу выловить где загвоздка.

Вот моя идеология обработки прерывания от USB:
1)По приходу Setup запроса сразу выставляю флаг запрещающий
прием следующего пакета USBCTL|=USBCTL_SETUP;

2)Потом в зависимости от Типа передачи (OUT/IN)
устанавливаю направления передачи
pport=&Setup;
if (*pport & 0x80) USBCTL|=USBCTL_DIR;
else USBCTL&= ~USBCTL_DIR;

Теперь по теории ничто не может помешать разобрать Setup пакет и ответить

3) Определяю что пришел запрос "Get Descriptor Device"
// Разрешаю USBICNF0, в буфер данные дескриптора и в счетчик байт
прописываю требуемое число:

USBICNF0=(USBEPCNF_UBME | USBEPCNF_USBIE);
CopyMemToControlIn (&StrDescriptorDevice[0],&ControlIn, 0x12);
if ((wLengthLo & 0xFF)<0x12) USBICT0=(wLengthLo & 0xFF);
else USBICT0=0x12;
fprintf(my_file, "Get Descriptor Device =%X\n", USBICT0);

4) Снимаю разрешаю прием следующих Setup пакетов USBCTL&=~USBCTL_SETUP;
5) Очищаю флаги прерывания

tmp =USBINTSRC;
while (tmp)
{
fprintf(my_file, "USBINTSRC=%X\n",tmp);
tmp =USBINTSRC;
}
USBIF=0xFF;

Но что-то не так

Windows детектирует подключение, формирует 3 сброса и присылает запрос
"Get Descriptor Device"

После отправки дескриптора вызывается прерывание от Endpoint IN0
USBINTSRC=4
Переключаю DIR и жду прерываний дальше.
USBCTL&= ~USBCTL_DIR;
USBIEPIF=0xFF

Windows сброс шины и опять "Get Descriptor Device" два раза.
Такое впечетление что ей не нравиться дескриптор.
Я его передрал у SM с mass storage.

Типичный затык как у USB чайника ;-)

Я то знаю, что при первом запросе после получения 8 байт
дескриптора Windows формирует сброс шины.

По этому схитрил, при запросе дескриптора
первый раз отдаю только 8 байт

if (wLengthLo == 0x12) USBICT0=0x12;
else USBICT0=8;

Стало лучше:

SetupPacket= 80 6 0 1 0 0 40 0 // "Get Descriptor Device"

USBINTSRC=4 // дескриптор отослан

USBINTSRC=6 // USB Reset сформированый драйвером

SetupPacket= 0 5 1 0 0 0 0 0 // Получил и установил адрес

SetupPacket= 80 6 0 1 0 0 12 0 // "Get Descriptor Device" уже с адресом 1

USBINTSRC=4 // дескриптор отослан

Потом опять сброс запрос и две попытки проинициализировать с начала.

Чего-то я упустил не могу понять. :-(
Есть ли желающие отделить мухи от котлет?



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru