реклама на сайте
подробности

 
 
> Не определяется USB устройство, Мое устройство на BF548 не определяется, как Mass Storage Device
kolobochishe
сообщение Jul 22 2015, 12:43
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Доброго дня!

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

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

Чем мое устройство не угодило Win7 ?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
kolobochishe
сообщение Jul 23 2015, 09:21
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Код
[/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;


т.е. запрос обрабатываю, но отправляю хосту только тот объем данных, который у меня фактически есть. Пока работает и форматируется.

Сообщение отредактировал kolobochishe - Jul 23 2015, 09:33
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016