Перейти к содержанию

    

MSD - все запросы дублированные?

Поднимаю MSD на stm32f4.

1) Хостом используется Win XP / 8 машины. при отладке наблюдаю изумительные дела - множественные запросы чтения одних и техже секторов, READ_CAPACITY, READ_FORMAT_CAPACITIES, MODE_SELECT_6 - есть в этом какойто великий смысл?

 

2) помимо постоянного чтения ранее читаных секторов, почти все запросы SUB идут дублированно с одним и тем же тегом, а может и более 2х раз повторяться - тоесть так тупо и читает READ10 lba0 - два раза подряд. и запись так же - идут две команды записи в один сектор! как с этим правильно обходиться?

 

3) команда PREVENT_ALLOW_MEDIUM_REMOVAL - выполняется странно - идет пара команд друг за другом, одна запрещает, за ней сразу снятие запрета. Вот это о чем? и как правильно должно быть?

 

Это же самое поведение наблюдаю с нормальной флешкой под вынь8. 8/

Изменено пользователем AlexRayne

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где наблюдаете дублированные команды: в программе анализатора USB на компьютере (типа BusHound, и т.п.), или на стороне отладочной платы?

 

Если в компьютере, то программа анализатора может просто показывать запросы на разных уровнях: на уровне SCSI-запросов операционки, и на уровне запросов USB-драйвера. Поэтому и CBW-тэг один и тот-же в дублях, хотя он выбирается случайно для каждой команды.

В BusHound точно есть такой эффект, если в настройках выставить слишком много галочек.

 

Если смОтрите на стороне отладочной платы, то там дубли приходят тоже, но другие. Не такие где один и тот-же CBW-тэг два раза (с этим всё в порядке - повторных тэгов нет), а просто в некоторых случаях многократные чтения сектора (обычно это сектор 0), и команды: SCSI_MODE_SENSE_6, Request Sense, SCSI_TEST_UNIT_READY, Read Format Capacity и т.п служебные.

Записей каждого сектора по два раза, одними и теми же данными (до последнего байта) не встречал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А где наблюдаете дублированные команды: в программе анализатора USB на компьютере (типа BusHound, и т.п.), или на стороне отладочной платы?

 

Если в компьютере, то программа анализатора может просто показывать запросы на разных уровнях: на уровне SCSI-запросов операционки, и на уровне запросов USB-драйвера. Поэтому и CBW-тэг один и тот-же в дублях, хотя он выбирается случайно для каждой команды.

В BusHound точно есть такой эффект, если в настройках выставить слишком много галочек.

 

Если смОтрите на стороне отладочной платы, то там дубли приходят тоже, но другие. Не такие где один и тот-же CBW-тэг два раза (с этим всё в порядке - повторных тэгов нет), а просто в некоторых случаях многократные чтения сектора (обычно это сектор 0), и команды: SCSI_MODE_SENSE_6, Request Sense, SCSI_TEST_UNIT_READY, Read Format Capacity и т.п служебные.

Записей каждого сектора по два раза, одними и теми же данными (до последнего байта) не встречал.

С записью сектора разобрался - это галюн моей либы не умеющей корректно работать с ZLP.

но вот дубли других команд - обычное дело. Я пользуюсь ваершарком - у него сыпется портянка обмена УСБ драйвера, и невидно где к какому уровню запрос он видит.

на стороне платы обнаружил особенность венды - интенсивное использование ZLP, сбивающее с толку. Может ли быть отсутствие ZLP в ответах хосту причиной дублирования команд?

постоянное перечитывание сектора 0, boot сектора, корня - вот это и смущает, ощущение что кеш файловой системы не действует на флешках?

 

по пункту 3 есть у Вас какието замечания? понятно что это можно проигнорить, о сама особеность намекает на галюны какието

Изменено пользователем AlexRayne

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про возможность работы без ZLP не знаю. Я когда-то писал "движок" MSD для контроллера, и по началу ZLP не довёл до ума - так устройство не проходило до конца инициализацию. Операционка видела флешку, но читать-писать её отказывалась.

 

По пункту 3. Точно не помню что делает эта команда (занимался MSD лет 5 назад :laughing: ). Кажется она выдаётся "по делу" только перед безопасным извлечением флешки из разъёма USB. А в начале работы с флешкой - как бы для инициализации устройства: по запрету завершили все операции с носителем, а по разрешению приготовились к выполнению новых команд.

Сейчас бегло посмотрел текст своего "движка", и там против команды (1E) PREVENT_ALLOW_MEDIUM_REMOVAL - стоит программная "заглушка", которая рапортует об успешном выполнении, но ничего более не делает.

В моём устройстве батарейное питание, внезапного отключения от USB оно не боится, и потому эта команда игнорируется. А вообще её можно принять к сведению, чтоб устройство знало о готовящемся отключении от компа.

 

Но вы проверьте наверняка, что эта команда именно так работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация