Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.148.107.255] |
|
Страницы: (51) « Первая ... 4 5 [6] 7 8 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#76
,
|
|
|
GetMaxLUN работает корректно ( =1 ), карточки стоят в обеих LUN-ах. Команда Inquiry работает правильно с обеими LUN-ами, а вот Read capacity - ни с LUN0, ни с LUN1. C Флэшкой проблем нет.
|
Сообщ.
#77
,
|
|
|
Цитата PRT @ карточки стоят в обеих LUN-ах. Хмм... А ридер так умеет работать, когда стоят сразу 2 карточки? |
Сообщ.
#78
,
|
|
|
В Windows-e умеет, но я и по одному тоже пробовал.
Добавлено Люди, может кто нибудь посмотрит логи ваших флэшек при енумерации в Windows-е. Ребята из usb.org и t10.org, а также cppasm говорят, что мне нужен SCSI-2 протокол (команда READ CAPACITY-0x25, тобишь 25h), а мои глаза мне говорят, что 0x23. Может у меня галюцинации и я 23 от 25 не могу отличить. Я это дело уже на 3 компа, дюжине флэшек и на 2 кардридера попробовал, везде Windows после INQUIRY-0x12 вызывает загадочную для SCSI-2 команду 23h. А пока я перепишу свой проект на UHCI, все равно нужна универсальность и может чтото прояснится, а может еще более запутается. |
Сообщ.
#79
,
|
|
|
Цитата PRT @ Может у меня галюцинации и я 23 от 25 не могу отличить. Я это дело уже на 3 компа, дюжине флэшек и на 2 кардридера попробовал, везде Windows после INQUIRY-0x12 вызывает загадочную для SCSI-2 команду 23h. Тебе сто процентов нужна команда 25h - лично у меня всё с ней работает. А в чём проблема я кажется догадываюсь... После подключения карта не сразу конфигурируется. Посмотри в спецификации обработку состояния STALL и NAK для флэшки. С NAK не помню, а STALL обрабатывается примерно так (это для команды чтения данных, для других то же самое): bulk_out // команда if(STALL) ClearHaltFearture(bulk_out_endpoint) bulk_in // чтение данных if(STALL) ClearHaltFearture(bulk_in_endpoint) bulk_in // чтение статуса if(STALL) ClearHaltFearture(bulk_in_endpoint) Если хоть один раз происходил STALL - в пакете состояния статус будет не 0 (скорее всего 1) и данные будут не действительны и всю эту операцию надо повторить. Лично у меня STALL возникает один раз после подключения устройсва при первой же команде работы именно с накопителем (у меня Get Capacity). Т.е. контрольные передачи идут и Get Max Lun, а при первой команде работающей с flash получаю STALL. Который успешно обрабатывается приведённым выше алгоритмом и дальше всё Ок. Вчера как раз покопался, вспомнил. PS: ты не против потестировать мою прогу? Просто везде где я пробовал устройства детектились - а тут косяк Если не против - я добавлю запись логов и выложу тут. Добавлено PPS: логи USB Flash дома гляну - у меня сохранились ещё с тех времён когда сам разбирался. |
Сообщ.
#80
,
|
|
|
Цитата PRT @ Люди, может кто нибудь посмотрит логи ваших флэшек Отослал, смотри в личном ящике. |
Сообщ.
#81
,
|
|
|
Ты прав, CSW.Status=1. Попробую ClearFeature и команду повторю.
Добавлено vpm: Логи посмотрел, они стандартные, нечему придратся. А можешь кинуть эту програму которая эти логи создала? очень понравилась детализация пакетов. |
Сообщ.
#82
,
|
|
|
А как насчёт моей просьбы?
Цитата cppasm @ ты не против потестировать мою прогу? Просто везде где я пробовал устройства детектились - а тут косяк Если не против - я добавлю запись логов и выложу тут. Цитата PRT @ Попробую ClearFeature и команду повторю. ClearFeature надо делать именно после той транзакции которая STALL закончилась. Цитата PRT @ А можешь кинуть эту програму которая эти логи создала? очень понравилась детализация пакетов. Название проги в студию А если не секрет - где сейчас USB под DOS используют? Я так понимаю у тебя это не хобби... |
Сообщ.
#83
,
|
|
|
Конечно не против.
USB под DOS не хобби, это пульт управления для TV. Раньше я пользовался usbaspi.sys и aspidisk.sys и все было как в сказке, но по просьбе трудящихся понадобился hot swapping. DOS выбрал потому, что я в нем вырос, но со временем я пологаю придется подружится с пингвинами. |
Сообщ.
#84
,
|
|
|
Цитата PRT @ А можешь кинуть эту програму которая эти логи создала? очень понравилась детализация пакетов. Программу? Пожалуйста: USB Explorer 200 - Download. Только к ней ещё железка нужна: USB Explorer 200 - USB 2.0 Protocol Analyzer. |
Сообщ.
#85
,
|
|
|
Цитата PRT @ Раньше я пользовался usbaspi.sys и aspidisk.sys и все было как в сказке Сам ими пользуюсь А кстати они с кардридером работают? Цитата PRT @ DOS выбрал потому, что я в нем вырос, но со временем я пологаю придется подружится с пингвинами. Гы, я тоже ДОС за простоту люблю... Цитата PRT @ Конечно не против. Ну тогда я до завтра запись логов сделаю и выложу... Добавлено Кстати я тут спецификацию перечитал - я порядок действий чуть не правильный дал. Надо так: bulk_out // команда if(STALL) ResetRecovery bulk_in // чтение данных if(STALL) ClearHaltFearture(bulk_in_endpoint) bulk_in // чтение статуса if(STALL) ResetRecovery И в самом начале при подключении флэшки ресет делать не обязательно - от него многие флэшки дуреют... Можно просто ClearHaltFeature для обоих конечных точек, а ресет уже потом в случае необходимости... WinXP как раз так и делает - по крайней мере у меня в логах так. |
Сообщ.
#86
,
|
|
|
usbaspi и aspidisk с кардридером работают.
Добавлено Да кстати, у меня STALL не происходит. У меня csw.status=1 а данные равны 0-ю. |
Сообщ.
#87
,
|
|
|
Цитата PRT @ Да кстати, у меня STALL не происходит. У меня csw.status=1 а данные равны 0-ю. А при повторных попытках? Или это постоянное состояние? |
Сообщ.
#88
,
|
|
|
Я и повторял, и Reset massStorage вместе с ClearFeatureHalt делал,... Может священника привести (да простит меня Бог)?
|
Сообщ.
#89
,
|
|
|
Цитата PRT @ Может у меня галюцинации и я 23 от 25 не могу отличить. Сейчас посмотрел исходники примера реализации Mass Storage для CY7C68013A. Распознаются обе команды, причем они имеют один обработчик с разветвлением. Все отличия - в формате выдачи данных. case READ_FORMAT_CAPACITIES: case READ_CAPACITY: { BYTE num_bytes = 8; // relinquish control of the bulk buffer occupied by the CBW EP2BCL = 0x80; sensePtr = senseOk; checkForMedia(1); waitForInBuffer(); if (sensePtr == senseOk) { AUTOPTRL2 = LSB(EP6FIFOBUF); if(cmd == READ_FORMAT_CAPACITIES) // add 4 byte capacity list header { XAUTODAT2 = 0x0; XAUTODAT2 = 0x0; XAUTODAT2 = 0x0; XAUTODAT2 = 0x08; num_bytes = 12; } XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[0]; XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[1]; XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[2]; XAUTODAT2 = ((BYTE *) &ActiveLunConfigData.driveCapacity)[3]; if(cmd == READ_FORMAT_CAPACITIES) XAUTODAT2 = ((ATA_SECTOR_SIZE >> 24) & 0xff) | 2; // Report media type -- Formatted else XAUTODAT2 = (ATA_SECTOR_SIZE >> 24) & 0xff; XAUTODAT2 = (ATA_SECTOR_SIZE >> 16) & 0xff; XAUTODAT2 = (ATA_SECTOR_SIZE >> 8) & 0xff; XAUTODAT2 = (ATA_SECTOR_SIZE >> 0) & 0xff; loadEP6BC(num_bytes); return(USBS_PASSED); } else { failedIn(); return(USBS_FAILED); } } |
Сообщ.
#90
,
|
|
|
Вот, попробуй плз.
Сделал вывод логов. Запускай ohci.exe>log.txt log.txt потом лучше сюда в архиве прикрепи. Прикреплённый файлOHCI.zip (10.37 Кбайт, скачиваний: 156) |