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

USB mass storage, хочется странного

Мы долго боролись с подобным сценарием, победить удалось только отключением диска. Без этого  все идет из кэша, сбросить его не удалось. А чем Вам сериальник не угодил?

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


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

эмулировать не флэшку, а кардридер, или сд-ром?

Или как в CMSIS-DAP сделать.

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

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


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

7 hours ago, Alex11 said:

Мы долго боролись с подобным сценарием, победить удалось только отключением диска. Без этого  все идет из кэша, сбросить его не удалось. А чем Вам сериальник не угодил?

да всем угодил, работает, драйверов не просит, но просто с файлом работать немного проще чем с последовательным портом, особенно из всяких mathematica, mathlab,... 

32 minutes ago, Immortal_Buka said:

эмулировать не флэшку, а кардридер, или сд-ром?

Или как в CMSIS-DAP сделать.

они не кэшируются?

а что именно в cmsis-dap сделано?

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


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

7 часов назад, _pv сказал:

они не кэшируются?

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

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


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

2 hours ago, mantech said:

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

безопасное извлечение это про кэш на запись, а мне мешает чтение.

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

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

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


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

Недавно практически такую-же тему создавал.

В результате пришел к тому, что написал обертку вокруг кейловских MDK USB и MDK FS.

Работает так: если нужен доступ к флешке, которая в данный момент используется как USB MSC - то ждем 5 сек с последнего обращения по MSC (на самом деле винда сбрасывает флаг "смонтировано" через полторы секунды после последней записи, т.ч. 5 - для пущей надежности), ставим MSC в паузу (переключаем владельца на FS), читаем/пишем на флешку. После этого если только читали - переключаем владельца назад на MSC. Если писали - делаем USB Disconnect/Connect.

 

 

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


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

передёргивать девайс connect/disconnect что-то совсем не хочется, 

мухлевать с "test unit ready (TUR) command response" никто не пробовал?

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


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

On 10/29/2020 at 10:53 AM, _pv said:

а что именно в cmsis-dap сделано?

как я понял, через SCSI команды

SCSI_START_STOP_UNIT            0x1B

SCSI_MEDIA_REMOVAL              0x1E

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


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

7 minutes ago, Immortal_Buka said:

SCSI_START_STOP_UNIT            0x1B

SCSI_MEDIA_REMOVAL              0x1E

Так это же команды хоста? А если винда не хочент осовободить флешку а надо писать? Тут скорее статус из sbc_sense_key    надо крутить, чтобы в ответ на IO команду уговорить винду подождать а потом перечитать кеши. Для TUR надо чтобы винда освободила флешку хотя бы на секунду, чтобы флешка симитировала что она заснула и ее надо будить.

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


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

13 minutes ago, khach said:

А если винда не хочент осовободить флешку а надо писать? Тут скорее статус из sbc_sense_key    надо крутить, чтобы в ответ на IO команду уговорить винду подождать а потом перечитать кеши. Для TUR надо чтобы винда освободила флешку хотя бы на секунду, чтобы флешка симитировала что она заснула и ее надо будить.

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

пожалуй ещё может помочь FILE_FLAG_NO_BUFFERING для CreateFile, но вот остальные программы файл открывать копировать будут сами без этого флага.

может ещё есть какие-нибудь рабочие костыли вроде [генератор бредовых идей=on] с расшариванием диска по сети обратным подключением этой же флэшки \\\\localhost\\F$, обратно уже как сетевого диска, при этом вдруг кэширование там где-нибудь по пути отвалится.

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


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

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


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

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

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

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

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

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

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

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

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

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