Jump to content

    

Mass Storage Usb Flash Disk

По ходу дела возник такой вопрос: какую файловую систему лучше использовать для флэшены? Гворят что ФАТ32 не очень хороша для нее...

Share this post


Link to post
Share on other sites

Уважаемый kernel32ddl!

Большое спасибо за подробный ответ, по-больше бы таких постов :)

 

Пользуетесь ли Вы каким-нибудь тулкитом или все приходится делать руками? Слышал и частично видел USBIO, что нашлось даже в наших сусеках, но к сожалению не нашел там раздела Firmware, только Drivers.

 

Интересно мнение спецов на счет этой тулсы, знающих толк в этом деле, уже реализовавших на своих машинках Mass Storage USB Disk

 

И еще чайниковский вопрос.

У меня машинка на х86, на борту CompactFlash, USB организован через последовательный порт машинки на FTDI FT232BM. Сейчас пользуюсь на РС виртуальным СОМ-портом, в машинке реализован FAT16 и протокол файлового обмена. Чтобы это чудо обслужить на РС, пришлось делать свою прогу под тот реализованный протокол. Хочется услышать от знатоков следующее. Если использовать USB Firmware Library от Thesycon (или его подобие), то какие грабли или непреодолимые препятствия ожидают.

Share this post


Link to post
Share on other sites

one_man_show, спасибо за столь лесную похвалу :) .

 

Что такое USBIO к сожалению понятия не имею :( , лично я делаю своё детище на TMS5509a, в Code Composer Studio от Texas Instrument. Очень помог пример реализации USB устройства на сайте c5000.spectrumdigital.com. Практически 70% всего кода, необходимого для реалиции устройства уже есть в этом примере, оставалось только надстроить его до необходимого класса (добавить нужные команды и т.п.). Вообще разработчики TI сделали хорошую абстракцию от аппаратной части (CSL библиотека USB), никаких портов программировать не надо, берешь функцию, указаваешь ей буфер с данными, номер конечной точки и вперед - данные передаются! Все очень просто.

Для снятия протоколов обмена пользуюсь USB Monitor и SnoopyPro.

На последний ваш вопрос, ответить не могу - ничего в этом не смыслю :smile3046:.

Share this post


Link to post
Share on other sites

Забыл добавить еще одну важную ссылку, при описании документации www.rs232.ru. Там есть спецификация на USB по русски.

Share this post


Link to post
Share on other sites

Не знаю как для флешей, но для обычных жестких дисков самый первый сектор на диске - MBR. В нем содержится таблица разделов диска. Далее в начале каждого раздела находится BOOT. Так как MBR в вашем случае имеет неправильную структуру, поскольку он BOOT по формату, то винда и не хочет с ним корректно работать и пытается найти MBR на следующей дорожке. Для проверки данного утверждения необходимо все снести с флешки (забить ее нулями) и попытаться выполнить все операции по разметке средствами самой винды. Если запись/чтение реализованы корректно, то проблем быть не должно.

Share this post


Link to post
Share on other sites

На флэшках, структуру которых мне удалось посмотреть MBR и таблицы нет. Идет сразу раздел со своей загрузочной областью. Объясняется это наверно тем, что в ней просто нет неоходимости - раздел-то на флэшке только один.

Наконец-то удалось раздобыть флэшину на 128 мб :cheers: , обнаружил много несоответствий. Как только исправлю все, сообщу о результатах.

Share this post


Link to post
Share on other sites

Итак... Первым делом пришлось фарматировать флэш средствами винды под ФАТ16. Винда создала там таблицу разделов, мбр и собственно сам раздел. Но тут меня ожидал БАЛЬШОООЙ облом. После полного копирования всего вышеописанного на флэшь.... НИЧЕГО НЕ ИЗМЕНИЛОСЬ!!! Как не работало, так и не стало работать. И тут я обратил внимание на одну проблему, значение которой я поначалу не придал. Ответ винде от моего устройства приходол только тогда, когда винда повторно отправляла команду! А все из-за того, что после передачи ей данных я не отправлят пустые пакеты (SEND_ACK и GET_ACK). Но на этом проблемы не закончились... Некоторые ответы на команды иногда все равно отправлялись только со второго раза. И возникла некая несогласованность.

Объясняю(пример):

Приходит команда(25), в ответ на команду должны передаться данные (data25), затем ответ на команду. Данные сразу не передаются и команда принимается еще раз и данные со второго раза передаются. Затем приходит другая команда и data25 опять передаются.

Вобщем бардак.

ЗНАЮЩИЕ ЛЮДИ БОЛЬШАЯ ПРОСЬБА! ОБЪЯНИТЕ МНЕ ДУРАКУ В КАКИХ СЛУЧАЯХ НАДО ОТПРЯВЛЯТЬ SEND_AKC и GET_ACK?

Share this post


Link to post
Share on other sites

Что такое пустые пакеты SEND_ACK и GET_ACK? Просто usb пакеты нулевой длины (ZLP)?

Какая стоит win? Для первых экспериментов лучше отключить кеширование. Правильно ли контролируешь отработку этапов CBW-DATAIN-CSW? Даже если предположить что размер данных совпадает с размером bulkin, то это не согласуется с командой RBC_READ_CAPACITY_10=0x25, для которой формат данных READ_CAPACITY_DATA равен 8 байт, а размер CSW 13 байт.

 

Лучше отлаживать все команды по отдельности, например через usbio.

Я делал так: подключал обычную usb флешку и с помощью сниффера записывал все команды, котрые использует винда. А уж потом из программы usbio отправлял бинарные файлы с командами и данными.

Тогда сразу видно будет кто виноват.

Share this post


Link to post
Share on other sites
Лучше отлаживать все команды по отдельности, например через usbio.

уважаемый jhoo не подскажите что это за программа и где ее можно взять?

Share this post


Link to post
Share on other sites
На флэшках, структуру которых мне удалось посмотреть MBR и таблицы нет. Идет сразу раздел со своей загрузочной областью. Объясняется это наверно тем, что в ней просто нет неоходимости - раздел-то на флэшке только один.

Наконец-то удалось раздобыть флэшину на 128 мб :cheers: , обнаружил много несоответствий. Как только исправлю все, сообщу о результатах.

 

Voobsheto nikto ne zapreshaet sdelat' neskol'ko razdelov, po krayney mere na CF ya delal bez problem.

Share this post


Link to post
Share on other sites
one_man_show, спасибо за столь лесную похвалу :) .

 

Что такое USBIO к сожалению понятия не имею :( , лично я делаю своё детище на TMS5509a, в Code Composer Studio от Texas Instrument. Очень помог пример реализации USB устройства на сайте c5000.spectrumdigital.com. Практически 70% всего кода, необходимого для реалиции устройства уже есть в этом примере, оставалось только надстроить его до необходимого класса (добавить нужные команды и т.п.). Вообще разработчики TI сделали хорошую абстракцию от аппаратной части (CSL библиотека USB), никаких портов программировать не надо, берешь функцию, указаваешь ей буфер с данными, номер конечной точки и вперед - данные передаются! Все очень просто.

Для снятия протоколов обмена пользуюсь USB Monitor и SnoopyPro.

На последний ваш вопрос, ответить не могу - ничего в этом не смыслю :smile3046:.

 

Еще парочку USB аналайзеров (Виндовые, хотя и USBmon тоже виндовый, использовал его ранее, хорошая прога, но лично мне понравились эти благодаря удобному интерфейсу) - USB Data Logger (http://www.eltima.com/products/usb-data-logger/) и USB Port Sniffer (http://www.eltima.com/products/usb-port-monitor/)

Share this post


Link to post
Share on other sites
С набором команд как раз-таки все впорядки данные передаются и принимаются без ошибок. Ответы на команды тоже коррекные, формируются согласно спецификации SCSI. Логическую адресацию устройство поддерживает, вопрос в том почему ни одна программа не хочет ее форматировать..

 

ФАТ тут ни при чем, как уже объяснили, устройство должно только отвечать на команды, выдавать данные по емкости, кол-ву секторов и работать с блоками непосредственно данных, и ей должно быть без разницы, какой кто сектор запрашивает, запрашивает 64й, значит системе виднее, зачем ей это, флешка должна просто предоставить данные из этого сектора.

Если не идет форматирование, значит какая-то служебная инфа не получена.

Edited by mantech

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this