AlexBoss
Jun 30 2006, 13:35
Строю 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
Jul 4 2006, 09:44
Глубокоуважаемые братья по разуму. Вопрос N2.
Кто-нить, где-нить встречал описание "vendor-specific", как это заявлено в "SCSI Block Commands", команды с кодом 23h??? Что-то я ее в упор везде не вижу, а Винда напорно использует на стадии
инициализации USB Mass Storage, в общем любой флэшки.
Может мои проблемы (см. пред. пост) как раз отсюда родом?
Если кто, что знает, свисните пожалуйста.
AlexBoss
Jul 5 2006, 17:37
Вопрос N2 снимается.
Оказалось, что это совершенно бесполезная (для сформатированной флэшки) MMC команда "Read Format Capacities". Мою проблему она не решает - как был только один "Bulk", так и остался.
Уже просто мозги плавятся!!!
kernel32ddl
Jul 20 2006, 07:57
Уточните пожалуйста каким образом вы "посылаете" команду на чтение блока? Каким образом вы определили что все выполняемые вами команды корректны? Какую программу используете для этого? Поподробней пожалуйста. Я тоже зимась аналогичной темой "TMS + flash = Mass Storage", может чем нибудь смогу помочь.
AlexBoss
Jul 20 2006, 12:40
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
Jul 20 2006, 12:52
Ясно, тема хостов действительно для меня диаметрально противоположна...
Но тем не менее поздравляю вас с успехом

!
AlexBoss
Jul 20 2006, 13:08
Большое спасибо или как говорят мэриканци "сенька беримяч".
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.