На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 4 5 [6] 7 8 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    GetMaxLUN работает корректно ( =1 ), карточки стоят в обеих LUN-ах. Команда Inquiry работает правильно с обеими LUN-ами, а вот Read capacity - ни с LUN0, ни с LUN1. C Флэшкой проблем нет.
      Цитата PRT @
      карточки стоят в обеих LUN-ах.

      Хмм... А ридер так умеет работать, когда стоят сразу 2 карточки?
        В 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, все равно нужна универсальность и может чтото прояснится,
        а может еще более запутается.
          Цитата PRT @
          Может у меня галюцинации и я 23 от 25 не могу отличить. Я это дело
          уже на 3 компа, дюжине флэшек и на 2 кардридера попробовал, везде Windows после
          INQUIRY-0x12 вызывает загадочную для SCSI-2 команду 23h.

          Тебе сто процентов нужна команда 25h - лично у меня всё с ней работает.
          А в чём проблема я кажется догадываюсь...
          После подключения карта не сразу конфигурируется.
          Посмотри в спецификации обработку состояния STALL и NAK для флэшки.
          С NAK не помню, а STALL обрабатывается примерно так (это для команды чтения данных, для других то же самое):
          ExpandedWrap disabled
            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 дома гляну - у меня сохранились ещё с тех времён когда сам разбирался.
            Цитата PRT @
            Люди, может кто нибудь посмотрит логи ваших флэшек

            Отослал, смотри в личном ящике.
              Ты прав, CSW.Status=1. Попробую ClearFeature и команду повторю.

              Добавлено
              vpm: Логи посмотрел, они стандартные, нечему придратся. А можешь кинуть эту програму которая эти логи создала? очень понравилась детализация пакетов.
                А как насчёт моей просьбы?
                Цитата cppasm @
                ты не против потестировать мою прогу? Просто везде где я пробовал устройства детектились - а тут косяк :(
                Если не против - я добавлю запись логов и выложу тут.

                Цитата PRT @
                Попробую ClearFeature и команду повторю.

                ClearFeature надо делать именно после той транзакции которая STALL закончилась.
                Цитата PRT @
                А можешь кинуть эту програму которая эти логи создала? очень понравилась детализация пакетов.

                Название проги в студию :)
                А если не секрет - где сейчас USB под DOS используют?
                Я так понимаю у тебя это не хобби...
                  Конечно не против.
                  USB под DOS не хобби, это пульт управления для TV. Раньше я пользовался usbaspi.sys и aspidisk.sys и все было как в сказке, но по просьбе трудящихся понадобился hot swapping. DOS выбрал потому, что я в нем вырос, но со временем я пологаю придется подружится с пингвинами.
                    Цитата PRT @
                    А можешь кинуть эту програму которая эти логи создала? очень понравилась детализация пакетов.

                    Программу? Пожалуйста: USB Explorer 200 - Download.
                    Только к ней ещё железка нужна:
                    user posted image
                    USB Explorer 200 - USB 2.0 Protocol Analyzer.
                      Цитата PRT @
                      Раньше я пользовался usbaspi.sys и aspidisk.sys и все было как в сказке

                      Сам ими пользуюсь :)
                      А кстати они с кардридером работают?
                      Цитата PRT @
                      DOS выбрал потому, что я в нем вырос, но со временем я пологаю придется подружится с пингвинами.

                      Гы, я тоже ДОС за простоту люблю...
                      Цитата PRT @
                      Конечно не против.

                      Ну тогда я до завтра запись логов сделаю и выложу...

                      Добавлено
                      Кстати я тут спецификацию перечитал - я порядок действий чуть не правильный дал.
                      Надо так:

                      ExpandedWrap disabled
                        bulk_out         // команда
                        if(STALL) ResetRecovery
                        bulk_in          // чтение данных
                        if(STALL) ClearHaltFearture(bulk_in_endpoint)
                        bulk_in          // чтение статуса
                        if(STALL) ResetRecovery


                      И в самом начале при подключении флэшки ресет делать не обязательно - от него многие флэшки дуреют...
                      Можно просто ClearHaltFeature для обоих конечных точек, а ресет уже потом в случае необходимости...
                      WinXP как раз так и делает - по крайней мере у меня в логах так.
                        usbaspi и aspidisk с кардридером работают.

                        Добавлено
                        Да кстати, у меня STALL не происходит. У меня csw.status=1 а данные равны 0-ю.
                          Цитата PRT @
                          Да кстати, у меня STALL не происходит. У меня csw.status=1 а данные равны 0-ю.

                          А при повторных попытках?
                          Или это постоянное состояние?
                            Я и повторял, и Reset massStorage вместе с ClearFeatureHalt делал,... Может священника привести (да простит меня Бог)?
                              Цитата PRT @
                              Может у меня галюцинации и я 23 от 25 не могу отличить.

                              Сейчас посмотрел исходники примера реализации Mass Storage для CY7C68013A. Распознаются обе команды, причем они имеют один обработчик с разветвлением. Все отличия - в формате выдачи данных.
                              ExpandedWrap disabled
                                      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);
                                         }
                                      }
                                Вот, попробуй плз.
                                Сделал вывод логов.
                                Запускай ohci.exe>log.txt
                                log.txt потом лучше сюда в архиве прикрепи.
                                Прикреплённый файлПрикреплённый файлOHCI.zip (10.37 Кбайт, скачиваний: 156)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 4 5 [6] 7 8 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0557 ]   [ 14 queries used ]   [ Generated: 19.05.24, 03:12 GMT ]