makc 229 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 21 минуту назад, haker_fox сказал: Вот что может произойти, если пользовать выбрал "извлечть", затем отключил кабель USB? Ну как там могут потеряться данные? Ума не приложу. Легко и спецификация SCSI это учитывает: в устройстве может быть собственный кэш для данных, который записывается на физический носитель (флэш или диск) в отложенном режиме. Типичный пример - внешний HDD-диск с USB-интерфейсом. Для решения этой проблемы ОС должна отправлять команду SBC_CMD_SYNCHRONIZE_CACHE_10, которая должна заставить устройство сбросить все свои кэши на носитель. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 58 minutes ago, haker_fox said: В нашем случае VBUS всегда заведён на разъём, поэтому, как я понимаю, проблемы нет?!))) Проблемы могут быть при наличии защитного диода D+/Vbus, при его наличии уровень Vbus придётся контролировать внешним компаратором, а не делителем на IO. 1 hour ago, makc said: Можно попробовать ориентироваться на косвенные признаки: после "извлечения" должны перестать приходить запросы TEST_UNIT_READY, которые в обычном режиме должны приходить где-то раз в секунду или около того. Для этого надо быть removable - иначе не придёт. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 229 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 5 минут назад, _4afc_ сказал: Для этого надо быть removable - иначе не придёт. Согласен, есть такой нюанс. Но если мы говорим, что операционка предлагает делать извлечение, то скорее всего это removable. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 11 minutes ago, makc said: Легко и спецификация SCSI это учитывает: в устройстве может быть собственный кэш для данных, который записывается на физический носитель Понятно. В моём случае диск MSC - это массив 2 Мб, расположенный SDRAM. После отключения устройства от USB не предполагается, что файл, записанный на "диск" должен быть доступен. 5 minutes ago, _4afc_ said: Проблемы могут быть при наличии защитного диода D+/Vbus, при его наличии уровень Vbus придётся контролировать внешним компаратором, а не делителем на IO. Понял, чисто схемотехнические проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 2 hours ago, makc said: после "извлечения" должны перестать приходить запросы TEST_UNIT_READY, Уф. При устной беседе (до этого всё происходило в переписке) выяснилось, что нужен сигнал, что "устройство можно извлечь". Т.е. отключить кабель USB. Т.е. просто вывести надпись на экран прибора. В свете этих новых событй не могли бы Вы что-то дополнительно порекомендовать?❤️ Другими словами: мы "извлекаем" диск из системы по команде, прибор узнаёт об этом, и пишет на экране сообщение пользователю "можете отключить прибор от USB хоста"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 229 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 2 минуты назад, haker_fox сказал: Уф. При устной беседе (до этого всё происходило в переписке) выяснилось, что нужен сигнал, что "устройство можно извлечь". Т.е. отключить кабель USB. Т.е. просто вывести надпись на экран прибора. В свете этих новых событй не могли бы Вы что-то дополнительно порекомендовать?❤️ Вам нужно сообщить ОС, что ваше устройство "removable" для обеспечения отправки SCSI START/STOP UNIT при нажатии кнопки извлечения. Сейчас у вас она не приходит, значит нужно менять содержимое SCSI дескриптора для обеспечения отправки этой команды и команды SCSI PREVENT ALLOW MEDIUM REMOVAL. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 1 hour ago, haker_fox said: Возможно, что я чего-то не понимаю. Но руководитель настаивает на том, что событие извлечения нужно ловить У меня есть девайс, который подключается к компу, но со своим питанием. Есть кэширование внутри, чтобы ускорить работу с FAT и вообще. Так вот чтобы кэш сбросить на флэшку, мониторю питание на линии Vbus. Прекрасно работает. Проблема будет с девайсами, у которых питание от компа, соотв. тут надо мониторить малейший просад питания (в мк обычно есть такие супервизоры или аналоговые вотчдоги) и ставить довольно внушительный кондер или типа того, чтобы успеть сбросить кэш на флэшку. Т.е. решение тут АППАРАТНО-ПРОГРАМНОЕ 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 3 часа назад, makc сказал: Гарантий это не даёт, т.к. при других настройках ОС или при другом патче драйвера в ОС поведение может быть другим. Но если хотя бы под виндовсом мы увидим, что в момент извлечения устройства в виндовсе по USB в устройство вообще ничего не посылается - будет ясно, что задача решения не имеет и ставить точки останова в обработчик прерывания USB бесполезно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 229 26 мая, 2023 Опубликовано 26 мая, 2023 · Жалоба 6 минут назад, Сергей Борщ сказал: Но если хотя бы под виндовсом мы увидим, что в момент извлечения устройства в виндовсе по USB в устройство вообще ничего не посылается - будет ясно, что задача решения не имеет и ставить точки останова в обработчик прерывания USB бесполезно. Нет, не так. Перечень отправляемых устройствам команд зависит от декларируемых устройствами в дескрипторах характеристик. Поэтому чисто эмпирически эта проблема не решается. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба On 5/26/2023 at 5:02 PM, makc said: Вам нужно сообщить ОС, что ваше устройство "removable" для обеспечения отправки SCSI START/STOP UNIT при нажатии кнопки извлечения. Сейчас у вас она не приходит, значит нужно менять содержимое SCSI дескриптора для обеспечения отправки этой команды и команды SCSI PREVENT ALLOW MEDIUM REMOVAL. Посмотрел сегодня функцию Inqury, там такой фрагмент: Получаю в wireshark что-то типа этого, из чего следует, что устройство REMOVABLE. В момент извлечения флешки получаю это (простите за скрин, мне так удобнее): Выше этого идут только Test Unit Response: Ниже уже ничего, относящегося к SCSI. На компьютере установлена Windows 10 Pro. Моих знаний на текущий момент не хватает, чтобы сделать дальнейшие выводы. Буду благодарен, если подскажете направление) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 229 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 1 час назад, haker_fox сказал: Моих знаний на текущий момент не хватает, чтобы сделать дальнейшие выводы. Буду благодарен, если подскажете направление) Выложите весь протокол захвата, от подключения, до быстрого извлечения. Пока же на первый взгляд можно ориентироваться только на прекращение прихода TEST UNIT READY, которые ОС перестаёт слать после извлечения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба Пожалуйста) usb_msc_log.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 229 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 1 час назад, haker_fox сказал: Пожалуйста) Судя по этому протоколу получается, что единственный возможный вариант - это таймер неактивности. Т.е. если у вас не приходит запросов более, чем (условно) 2 секунды, в т.ч. нет TEST UNIT READY, то устройство должно трактовать это как отключение со стороны ОС. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 23 минуты назад, makc сказал: Судя по этому протоколу получается, что единственный возможный вариант - это таймер неактивности. Ну в принципе логично, ОС, как хост не обязана какой-то командой информировать устройство, что оно ей больше не нужно. TEST UNIT READY как раз и передается, чтобы ОС "знала", что устройство еще онлайн и с ним можно проводить операции... 26 минут назад, makc сказал: если у вас не приходит запросов более, чем (условно) 2 секунды А вот тут возможен попадос, если это время не регламентировано, надо тестировать на разных ОС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 5 minutes ago, mantech said: Ну в принципе логично, ОС, как хост не обязана какой-то командой информировать устройство, что оно ей больше не нужно. Я, конечно, за несколько дней не стал экспертом в области USB MSC, но из беглого чтения документации понял, что всё же может. 6 minutes ago, mantech said: А вот тут возможен попадос, если это время не регламентировано, надо тестировать на разных ОС. Да тут вообще ничего не регламентировано((( Всё нужно тестировать и на разных ОС((((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться