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

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 оно не боится, и потому эта команда игнорируется. А вообще её можно принять к сведению, чтоб устройство знало о готовящемся отключении от компа.

 

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...