Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не определяется USB устройство
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
kolobochishe
Доброго дня!

Устройство должно определяться как Mass Storage Device. Контроллер Blackfin BF548. Драйвер родной от ADI.

Подключаю устройство к своему андроид-телефону через OTG кабель - все работает. Подключаю к своему компу с Win7 - в диспетчере устройств появляется 2 пункта (см. картинку), но новый том в Администрирование->Управление компьютером->Управление дисками не появляется и этот пункт при открытии "подвисает". Пробовал удалять драйвера USB, заменял дефолтными. Картина та же. При загрузке Windows в "Безопасном режиме" мой прибор определяется, можно читать/записывать, но не форматируется. На компе с WinXP у коллеги - все OK.

Чем мое устройство не угодило Win7 ?
kolobochishe
Код
[/code]Все. Разобрался, вроде. В драйвере было одно место, где обрабатывался запрос на описание устройства
[code]case SCSI_INQUIRY:
            if(pCommandBlock[1] == 0)
            {
                if (datalen  == sizeof (adi_msd_InquiryReport))
                {
                    memcpy(pBuffer, &adi_msd_InquiryReport, datalen);
                    return (true);
                }
            }
            else // Added for Windows Vista
            if(pCommandBlock[1] == 1)
            {
                memcpy(pBuffer, &adi_msd_InquiryReport_1, 36);
                *pActualBytesToReturn = 36;
                return(true);
            }
            break;


Когда хост запрашивал большее количество байт, чем было у драйвера MSD контроллера - он ( драйвер моего устройства) запрос игнорировал.

Исправил на следующее:
Код
case SCSI_INQUIRY:
            if(pCommandBlock[1] == 0)
            {
                size_t BytesToCopy;
                
                if (datalen >= SCSI_INQUIRY_REPORT_SIZE)
                {
                    BytesToCopy = SCSI_INQUIRY_REPORT_SIZE;
                }
                else
                {
                    BytesToCopy = datalen;
                }
                
                memcpy(pBuffer, &adi_msd_InquiryReport, BytesToCopy );
                
                *pActualBytesToReturn = BytesToCopy;
                    
                bResult = true;
                break;
            }
            else // Added for Windows Vista
            {
                if(pCommandBlock[1] == 1)
                {
                    memcpy(pBuffer, &adi_msd_InquiryReport_1, SCSI_INQUIRY_REPORT_SIZE );
                    *pActualBytesToReturn = SCSI_INQUIRY_REPORT_SIZE;
                
                    bResult = true;
                }
            }
            break;


т.е. запрос обрабатываю, но отправляю хосту только тот объем данных, который у меня фактически есть. Пока работает и форматируется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.