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

USB MSC найти и прочитать один файл без FAT внутри устройства

21 минуту назад, haker_fox сказал:

Вот что может произойти, если пользовать выбрал "извлечть", затем отключил кабель USB? Ну как там могут потеряться данные? Ума не приложу.

Легко и спецификация SCSI это учитывает: в устройстве может быть собственный кэш для данных, который записывается на физический носитель (флэш или диск) в отложенном режиме. Типичный пример - внешний HDD-диск с USB-интерфейсом. Для решения этой проблемы ОС должна отправлять команду SBC_CMD_SYNCHRONIZE_CACHE_10, которая должна заставить устройство сбросить все свои кэши на носитель.

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


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

58 minutes ago, haker_fox said:

В нашем случае VBUS всегда заведён на разъём, поэтому, как я понимаю, проблемы нет?!)))

Проблемы могут быть при наличии защитного диода D+/Vbus, при его наличии уровень Vbus придётся контролировать внешним компаратором, а не делителем на IO.

1 hour ago, makc said:

Можно попробовать ориентироваться на косвенные признаки: после "извлечения" должны перестать приходить запросы TEST_UNIT_READY, которые в обычном режиме должны приходить где-то раз в секунду или около того.

Для этого надо быть removable - иначе не придёт.

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


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

5 минут назад, _4afc_ сказал:

Для этого надо быть removable - иначе не придёт.

Согласен, есть такой нюанс. Но если мы говорим, что операционка предлагает делать извлечение, то скорее всего это removable.

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


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

11 minutes ago, makc said:

Легко и спецификация SCSI это учитывает: в устройстве может быть собственный кэш для данных, который записывается на физический носитель

Понятно. В моём случае диск MSC - это массив 2 Мб, расположенный SDRAM. После отключения устройства от USB не предполагается, что файл, записанный на "диск" должен быть доступен.

5 minutes ago, _4afc_ said:

Проблемы могут быть при наличии защитного диода D+/Vbus, при его наличии уровень Vbus придётся контролировать внешним компаратором, а не делителем на IO.

Понял, чисто схемотехнические проблемы.

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


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

2 hours ago, makc said:

после "извлечения" должны перестать приходить запросы TEST_UNIT_READY,

Уф. При устной беседе (до этого всё происходило в переписке) выяснилось, что нужен сигнал, что "устройство можно извлечь". Т.е. отключить кабель USB. Т.е. просто вывести надпись на экран прибора. В свете этих новых событй не могли бы Вы что-то дополнительно порекомендовать?❤️

Другими словами: мы "извлекаем" диск из системы по команде, прибор узнаёт об этом, и пишет на экране сообщение пользователю "можете отключить прибор от USB хоста"...

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


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

2 минуты назад, haker_fox сказал:

Уф. При устной беседе (до этого всё происходило в переписке) выяснилось, что нужен сигнал, что "устройство можно извлечь". Т.е. отключить кабель USB. Т.е. просто вывести надпись на экран прибора. В свете этих новых событй не могли бы Вы что-то дополнительно порекомендовать?❤️

Вам нужно сообщить ОС, что ваше устройство "removable" для обеспечения отправки SCSI START/STOP UNIT при нажатии кнопки извлечения. Сейчас у вас она не приходит, значит нужно менять содержимое SCSI дескриптора для обеспечения отправки этой команды и команды SCSI PREVENT ALLOW MEDIUM REMOVAL.

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


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

1 hour ago, haker_fox said:

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

У меня есть девайс, который подключается к компу, но со своим питанием. Есть кэширование внутри, чтобы ускорить работу с FAT и вообще.

Так вот чтобы кэш сбросить на флэшку, мониторю питание на линии Vbus. Прекрасно работает.

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

и ставить довольно внушительный кондер или типа того, чтобы успеть сбросить кэш на флэшку.

Т.е. решение тут АППАРАТНО-ПРОГРАМНОЕ

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


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

3 часа назад, makc сказал:

Гарантий это не даёт, т.к. при других настройках ОС или при другом патче драйвера в ОС поведение может быть другим.

Но если хотя бы под виндовсом мы увидим, что в момент извлечения устройства в виндовсе по USB в устройство вообще ничего не посылается - будет ясно, что задача решения не имеет и ставить точки останова в обработчик прерывания USB бесполезно.

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


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

6 минут назад, Сергей Борщ сказал:

Но если хотя бы под виндовсом мы увидим, что в момент извлечения устройства в виндовсе по USB в устройство вообще ничего не посылается - будет ясно, что задача решения не имеет и ставить точки останова в обработчик прерывания USB бесполезно.

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

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


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

On 5/26/2023 at 5:02 PM, makc said:

Вам нужно сообщить ОС, что ваше устройство "removable" для обеспечения отправки SCSI START/STOP UNIT при нажатии кнопки извлечения. Сейчас у вас она не приходит, значит нужно менять содержимое SCSI дескриптора для обеспечения отправки этой команды и команды SCSI PREVENT ALLOW MEDIUM REMOVAL.

Посмотрел сегодня функцию Inqury, там такой фрагмент:

image.thumb.png.1e7585579deab4eaf0549c3478458f77.png

Получаю в wireshark что-то типа этого, из чего следует, что устройство REMOVABLE.

image.thumb.png.4d098b5786ff70cbda94d6b18cea0157.png

В момент извлечения флешки получаю это (простите за скрин, мне так удобнее):

image.thumb.png.e49d602ca5f975909b4f6202995355c6.png

Выше этого идут только Test Unit Response:

image.thumb.png.5f8fc8595e7020a6ebb2642496e08a55.png

Ниже уже ничего, относящегося к SCSI.

На компьютере установлена Windows 10 Pro.

Моих знаний на текущий момент не хватает, чтобы сделать дальнейшие выводы. Буду благодарен, если подскажете направление)

 

 

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


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

1 час назад, haker_fox сказал:

Моих знаний на текущий момент не хватает, чтобы сделать дальнейшие выводы. Буду благодарен, если подскажете направление)

Выложите весь протокол захвата, от подключения, до быстрого извлечения. Пока же на первый взгляд можно ориентироваться только на прекращение прихода TEST UNIT READY, которые ОС перестаёт слать после извлечения.

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


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

1 час назад, haker_fox сказал:

Пожалуйста)

Судя по этому протоколу получается, что единственный возможный вариант - это таймер неактивности. Т.е. если у вас не приходит запросов более, чем (условно) 2 секунды, в т.ч. нет TEST UNIT READY, то устройство должно трактовать это как отключение со стороны ОС.

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


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

23 минуты назад, makc сказал:

Судя по этому протоколу получается, что единственный возможный вариант - это таймер неактивности.

Ну в принципе логично, ОС, как хост не обязана какой-то командой информировать устройство, что оно ей больше не нужно. 

TEST UNIT READY как раз и передается, чтобы ОС "знала", что устройство еще онлайн и с ним можно проводить операции...

26 минут назад, makc сказал:

если у вас не приходит запросов более, чем (условно) 2 секунды

А вот тут возможен попадос, если это время не регламентировано, надо тестировать на разных ОС.

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


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

5 minutes ago, mantech said:

Ну в принципе логично, ОС, как хост не обязана какой-то командой информировать устройство, что оно ей больше не нужно. 

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

6 minutes ago, mantech said:

А вот тут возможен попадос, если это время не регламентировано, надо тестировать на разных ОС.

Да тут вообще ничего не регламентировано((( Всё нужно тестировать и на разных ОС(((((

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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