На главную Наши проекты:
Журнал   ·   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) « Первая ... 47 48 [49] 50 51   ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    При работе с UHCI абсолютно нет нужды использовать "нереальный" режим. Вполне можно обойтись памятью в пределах 1-го мегабайта (даже 640К), доступной в 16-битной ДОС без каких-либо дополнений. Физический адрес "нижней" памяти вычисляется как (segment<<4)+offset, надеюсь, об этом все помнят. Главное, чтобы нужные нам массивы не пересекали границу физической страницы (4 Кб). Поэтому не надо ломать голову над использованием 32-битных регистров (и сегментных тоже) - пиши, как привык.

    Счетчик кадров контроллера может стоять в 0, если контроллер не запущен (остановлен). Надо сделать всю предварительную работу - проинициализировать его и запустить.
    Сообщение отредактировано: zakharo -
      zakharo отписал в ЛС
        Цитата Krom @
        0й КТ - это что имеется ввиду?

        Нулевая конечная точка.
        Цитата Krom @
        И каким образом можно определить истинный размер?

        В дескрипторе устройства в первых 8ми байтах (емнип, последний байт). Т. е. сперва вычитываешь первые 8 байт дескритора устройства (размер кт принять равным 8ми) и мз этих данных уже получить реальный размер кт и вычитать уже дескриптор целиком.
          Цитата Krom @
          0й КТ - это что имеется ввиду?

          Нулевая контрольная точка.

          Цитата Krom @
          И каким образом можно определить истинный размер?

          Реальный размер пакета для нулевой контрольной точки есть в Device Descriptor и он находится в пределах первых 8 байт.
          Для того чтобы узнать этот размер ставишь размер нулевой контрольной точки равной 8 и запрашиваешь не весь Device Descriptor, а только 8 байт.
          Из них извлекаешь реальный размер нулевой контрольной точки и потом везде используешь это значение.
            Дескриптор устройства также не могу получить по той же проблеме - зацикливание, но уже в функции StatusIN_Transaction, хотя и на томже месте.

            ; Ожидать завершения операции
            @@Wait_OpComplete:
            ; Проверить номер кадра
            in AX,DX
            sub AX,[StartFrame]
            and AX,7FFh ;выделить младшие 11 разрядов
            cmp AX,500 ;ожидать не более 500 кадров
            ja @@TimeOut ;превышен интервал ожидания
            ; Проверить слово состояния
            cmp [dword ptr GS:ESI],1b
            jne @@Wait_OpComplete
            popad
            ret

            Что имеет смысл проверить, дабы найти ошибку?
              Господа, не пут(г)айте человека - у него до транзакций дело вообще не доходит, взаимодействия с устройством нет, а значит, размер 0-й КТ ни при чем. Скорее всего, проблема в неправильном задании (и/или заполнении) FrameList. Или в неправильном определении адреса порта контроллера.
              Кстати, про размер 0-й КТ - если помните, по спецификации USB непронумерованное устройство может (и обязано!) принимать/передавать пакеты ТОЛЬКО по 8 байт. Больший размер пакетов возможен только после присвоения адреса. Так что это здесь пока вообще ни при чем.
                Цитата zakharo @
                Вполне можно обойтись памятью в пределах 1-го мегабайта (даже 640К)

                Это не совсем так. В мире большое количество мостов без поддержки DMA операций в базовой памяти, мне такие попадались, классический пример PIIX4, там об этом сказано черным по белому в спецификации.

                Добавлено
                Цитата zakharo @
                ак что это здесь пока вообще ни при чем.

                Это тут при том, что эту ошибку я помнил, когда разбирал когда-то пример Кулакова. Там есть еще ошибки, их вспомнить, увы, уже не могу.

                Добавлено
                Цитата zakharo @
                Скорее всего, проблема в неправильном задании (и/или заполнении) FrameList. Или в неправильном определении адреса порта контроллера.

                Ну сейчас в спокойной обстановке посмотрел - похоже на то. Надо начинать с самого низу - смотреть дамп всех регистров.
                Сообщение отредактировано: shm -
                  Со сбросом порта там ещё косяки могут быть.
                    Вчера по советам zakharo налаживал программу. Но в итоге столкнулся со следующими непонятками:

                    При запуске программы (определение, инициализация и запуск контроллера)кадры не бегут. Как был регистр ax 0 при чтении из порта, так и остается нулевым.
                    Если же запустить сначала резидентный драйвер USB, то при запуске моей программы кадры отлично бегут. Но как только выгружаю резиденту все прекращается.

                    Получается я не корректно запускаю контроллер?

                    И вторая не понятка:

                    Если теперь вынуть мышку из компа, то на запуке контроллера машина просто повисает.
                    Мышь PS/2 подключена вместе с клавиатурой через разветвитель в гнездо клава/мышь. Т.е. один вход и разветвитель на два выхода для мыши и клавы.

                    Приведу скрипт работы:

                    mov DX,[USB_BaseAddr]
                    mov AX,100b ;установить сигнал сброса
                    out DX,AX
                    ; Ожидать не менее 10 мс
                    call Wait05s
                    ; Снять сигнал сброса
                    mov AX,0
                    out DX,AX
                    ; Ожидать не менее 10 мс
                    call Wait05s
                    ; Обнулить счетчик номеров
                    mov [USB_Device_Number],0

                    ; Загрузить указатель на список кадров в регистр
                    ; адреса списка кадров
                    mov DX,[USB_BaseAddr]
                    add dx,4
                    mov ax,0
                    out dx,ax

                    add DX,2
                    mov AX,0
                    out DX,AX

                    add DX,2
                    mov EAX,FrameListBaseAddr
                    out DX,EAX
                    ; Активизировать хост-контроллер
                    mov DX,[USB_BaseAddr]
                    mov AX,1
                    out DX,AX

                    на последней команде при отключенной мыше повисает все.


                    Подскажите:
                    1) По какой возможной причине я не могу запустить контроллер пока не запущенна сторонняя программа-резидента. Что упустил?
                    2) КАк мышка может влиять на работу контроллера USB? и что нужно сделать дабы не было такого влияния?
                      Цитата Krom @
                      Получается я не корректно запускаю контроллер?

                      Скорее всего некорректно инициализируешь.
                      Цитата Krom @
                      Мышь PS/2

                      Не очень понимаю какое отношение мышь PS/2 имеет к данной проблеме. Там переходник что ли стои USB<->PS/2? Если это так то всему виной такая штука как keyboard and mouse legasy support. Как это отключить написано в последней главе официальной спецификации на UHCI. Это нужно делать до сброса.
                      Цитата Krom @
                      2) КАк мышка может влиять на работу контроллера USB? и что нужно сделать дабы не было такого влияния?

                      Описал выше. Там возникает не обрабатываемое прерывание SMI, которое душит всю систему.

                      Добавлено
                      Цитата Krom @
                      1) По какой возможной причине я не могу запустить контроллер пока не запущенна сторонняя программа-резидента. Что упустил?

                      Реши хотя бы проблему с мышкой и пойдем дальше.
                      Сообщение отредактировано: shm -
                        В БИОСЕ:

                        USB Controller Enabled
                        USB 2.0 Controller Disabled
                        USB Mouse Suport Disabled

                        Про keyboard and mouse legasy support понял. Прочту.
                          Цитата Krom @
                          В БИОСЕ:

                          Все равно попробуй.
                            shm
                            @For implementations in a PCI device, the legacy support register is located at offset C0-C1h, in function 2 PCI
                            configuration space.@

                            по legasy regist понял, что нужно прочитать данные по смещению C0-C1 из этого регистра, но не понял каким образом.

                            т.е мне нужно вызывать вторую функцию а потом читать данные из регистра по нужному смещению?

                            не совсем понимаю как правильно прочитать данные
                              Цитата Krom @
                              не совсем понимаю как правильно прочитать данные

                              Это регистры конфигурационного пространства PCI. В той же книге Кулакова описается как работать c PCI. Собственно в его примерах это и используется для поиска устройств, тебе нужно просто вычитать и записать по этому адресу значения.
                                Да, так и предполагал, но смущает упоминание о 2рой функции.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 47 48 [49] 50 51 


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1340 ]   [ 16 queries used ]   [ Generated: 18.04.24, 04:31 GMT ]