Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Протокол Bulk-Only для Mass Storage
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
AlexBoss
Строю Embedded Host на базе Cypress SL811HS для доступа к USB Flash-кам на Full Speed.
Аппаратура в порядке. Все SetUp транзакции (те, что адресованы к 0-му EndPoin) завершаются успешно.
А вот с транспортным протоколом (это который "Bulk-Only") - какие-то непонятки.
Выполняется любая, есс-но из числа поддерживаемых классом, SCSI команда. Выполняестя
корректно и полностью - с корректным CSW. И после этого любая попытка обращения к BulkOut
EndPoint приводит к Time-Out!
Например, читаем сектор:
- посылаю в BulkOutEP CBW (31 байт с кодом операции 28h) - получаю ACK;
- посылаю 8 запросов чтения по 64 байта из BulkInEP - получаю NAK,NAK....ACK и
512 байт Boot сектора флэшки;
- посылаю запрос чтения 13-ти байт из BulkInEP - получаю ACK и коррктный CSW с
"Command Passed".
Все! Любые попытки повторить это, или послать любую другую SCSI команду в Bulk-Only
упаковке приводит к Time-Out в статусе пакета. Пробовал 5 разнотипных флэшек - результат
идентичный.
Может кто наступал на подобные грабли? java script:emoticon(':help:', 'smid_14')
AlexBoss
Глубокоуважаемые братья по разуму. Вопрос N2.
Кто-нить, где-нить встречал описание "vendor-specific", как это заявлено в "SCSI Block Commands", команды с кодом 23h??? Что-то я ее в упор везде не вижу, а Винда напорно использует на стадии
инициализации USB Mass Storage, в общем любой флэшки.
Может мои проблемы (см. пред. пост) как раз отсюда родом?

Если кто, что знает, свисните пожалуйста.
AlexBoss
Вопрос N2 снимается.
Оказалось, что это совершенно бесполезная (для сформатированной флэшки) MMC команда "Read Format Capacities". Мою проблему она не решает - как был только один "Bulk", так и остался.
Уже просто мозги плавятся!!!
kernel32ddl
Уточните пожалуйста каким образом вы "посылаете" команду на чтение блока? Каким образом вы определили что все выполняемые вами команды корректны? Какую программу используете для этого? Поподробней пожалуйста. Я тоже зимась аналогичной темой "TMS + flash = Mass Storage", может чем нибудь смогу помочь.
AlexBoss
Q1. Уточните пожалуйста каким образом вы "посылаете" команду на чтение блока?
Поскольку я Строю Embedded Host , см. первый пост, то не "посылаете", а именно ПОСЫЛАЮ, т.к. кто же еще пошлет если не HOST? Если Вас действительно интересует последовательность байт, которые я выдаю в OutEP и принимаю в ответ из InEP, то могу расписать, хотя они строго соответствуют спецификации "Universal Serial Bus Mass Storage Class Bulk-Only Transport" Revision 1.0.
Q2. Каким образом вы определили что все выполняемые вами команды корректны?
Команды выполняю не я, а обычная USB флэшка, которой я их посылаю. А корректность подтверждается тем, что, например, на команду чтения 0-го блока я получаю 512 байт BOOT-сектора флэшки, а затем корректный CSW с bCSWStatus = 0 (Command Passed).
Q3. Какую программу используете для этого?
У меня железка на базе промышленной IBM-совместимой материнки формата PC-104 + SL811HS в качестве HOSTa на той самой PC-104-й шине. BIOS - мой, операционная среда - моя, поэтому и все программы тоже мои (что хочу, то и ворочу).

Поэтому похоже Ваша тема "TMS + flash = Mass Storage" не совсем аналогична моей, скорее даже диаметрально противоположна, т.к. Вы строите Device, а я Host для доступа к Вашему (или другим аналогичным) Mass Storage Device.

Что же касается бяки, описанной в моем первом посте, то ее удалось таки победить. Меня сбило с понталыку заявление "... перед началом передачи массива триггер синхронизации данных должен быть сброшен в 0: при выполнении первой транзакции блок данных имеет идентификатор DATA0,...", см. стр.701, Владимир Кулаков, Программирование на аппаратном уровне, Специальный справочник.

Не верьте люди!!!

Как только я убрал принудительное обнуление Toggle битов для OutEP и InEP перед началом команды, все заработало как часики. Вывод: триггеры синхронизации данных для Bulk EndPoint-ов есть вещи глобальные (не зависящие от начала Bulk-Only команды). И обнулять их должно только после Reset и Clear_Feature STALL соответствующей EP.
Однако это не относится к триггеру канала управления (EndPoint0) - там свои законы!
kernel32ddl
Ясно, тема хостов действительно для меня диаметрально противоположна...
Но тем не менее поздравляю вас с успехом smile.gif !
AlexBoss
Большое спасибо или как говорят мэриканци "сенька беримяч". smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.