[an error occurred while processing this directive]
|
Что-то не могу добить 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=0xFFWindows сброс шины и опять "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: info@telesys.ru