AlexRayne 7 9 марта, 2017 Опубликовано 9 марта, 2017 (изменено) · Жалоба Поднимаю 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/ Изменено 9 марта, 2017 пользователем AlexRayne Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 10 марта, 2017 Опубликовано 10 марта, 2017 · Жалоба А где наблюдаете дублированные команды: в программе анализатора USB на компьютере (типа BusHound, и т.п.), или на стороне отладочной платы? Если в компьютере, то программа анализатора может просто показывать запросы на разных уровнях: на уровне SCSI-запросов операционки, и на уровне запросов USB-драйвера. Поэтому и CBW-тэг один и тот-же в дублях, хотя он выбирается случайно для каждой команды. В BusHound точно есть такой эффект, если в настройках выставить слишком много галочек. Если смОтрите на стороне отладочной платы, то там дубли приходят тоже, но другие. Не такие где один и тот-же CBW-тэг два раза (с этим всё в порядке - повторных тэгов нет), а просто в некоторых случаях многократные чтения сектора (обычно это сектор 0), и команды: SCSI_MODE_SENSE_6, Request Sense, SCSI_TEST_UNIT_READY, Read Format Capacity и т.п служебные. Записей каждого сектора по два раза, одними и теми же данными (до последнего байта) не встречал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 13 марта, 2017 Опубликовано 13 марта, 2017 (изменено) · Жалоба А где наблюдаете дублированные команды: в программе анализатора 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 есть у Вас какието замечания? понятно что это можно проигнорить, о сама особеность намекает на галюны какието Изменено 13 марта, 2017 пользователем AlexRayne Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 13 марта, 2017 Опубликовано 13 марта, 2017 · Жалоба Про возможность работы без ZLP не знаю. Я когда-то писал "движок" MSD для контроллера, и по началу ZLP не довёл до ума - так устройство не проходило до конца инициализацию. Операционка видела флешку, но читать-писать её отказывалась. По пункту 3. Точно не помню что делает эта команда (занимался MSD лет 5 назад :laughing: ). Кажется она выдаётся "по делу" только перед безопасным извлечением флешки из разъёма USB. А в начале работы с флешкой - как бы для инициализации устройства: по запрету завершили все операции с носителем, а по разрешению приготовились к выполнению новых команд. Сейчас бегло посмотрел текст своего "движка", и там против команды (1E) PREVENT_ALLOW_MEDIUM_REMOVAL - стоит программная "заглушка", которая рапортует об успешном выполнении, но ничего более не делает. В моём устройстве батарейное питание, внезапного отключения от USB оно не боится, и потому эта команда игнорируется. А вообще её можно принять к сведению, чтоб устройство знало о готовящемся отключении от компа. Но вы проверьте наверняка, что эта команда именно так работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться