Чтение секторов SATA HDD

Тема в разделе "WASM.ASSEMBLER", создана пользователем dess, 14 окт 2008.

  1. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Rodin
    Работая под Виндой, вы используете ее драйвера, в которых уже это учтено. Но, чтоб дело до Винды дошло, должен и БИОС матери/контроллера поработать (начать загружать систему). Так и здесь есть заточка на 30 сек. Проверить легко. Загрузились в ДОС, запустили отладчик, набрали команды Int 13h и Int3, записали параметры в регистры и по шагам прогнали код (только терпеливый осилит это). Как правило, будут 2 фрагмента кода, где фигурирует 30 сек.
     
  2. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Я пишу свой драйвер работающий асинхронно со стандартным виндовым. И у меня ничего не "учтено" :)
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Memphis
    Какразтаки конфликтый по этому адрессу лежит Биос. А вообще методика сработает. Допустим что бит 0 очищен это унас регистр памяти. Тогда 4бита нужнобудет обнулить. Тогда записав FFFFFFFF получим что железо сбросит до FFFFFFF0 инвертируем получаем 0000000F складываем получаем FFFFFFFF. Как видно тут ограничение по точности в 16
    Если бит 0 выставлен то это регистр портов в/в тогда нужно 2 бита обнулить. А железка может потребовать себе от 4 до 8 портов.

    К примеру у нас есть B401 бит0=1- порты в/в пишем FFFFFFFF читаем система вернет FFFFFFF1 тогд обнуляем первые 2 бита получим FFFFFFF0 инвертируем Fh складываем B400+F=B40F.
    Если при чтении будет FFFFFFFD обнуляем два бита FFFFFFFС инвертирум 3 складваем с B400+3=B403
    B400 - это B401 с обнуленными 2 битами. Просто это опустил.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Rodin
    Будет. Лучше переходить на UDMA. Програмируешь режим бусмастер. Там все просто одно удовольствие. И скорость выше.

    Проще вбить константу FFFF чем делать по правилам. Что касается времени, то нужно делать по правилам по стандарту.

    Memphis
    По стандарту для определения наличия харда нужно делать тайм аут на 60 секундах. Биусы это время снижают до 30. В некоторых биосах это задается. Вообщем на IXBT писали были проблемы с определением жестких дисков пришлось увеличивать таймаут.

    Но это для определения жесткого, а для готовности выполнения команды там меньше. В стандарте ATA/ATAPI это все расписанно. Раздел B протокол посылки команды. Там надо читать и смотреть.
     
  5. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Pavia
    Элементрно Ватсон.Читаешь из регистра сохроняешь значение во временную переменную. Записываешь в этот регист FFFFFFFF и смотришь сколько бит обнулилось - что-то я сбился с курса. Начнем сначала. Разговор идет о портах ввода/вывода. Значит, это 16-ти битка. Тогда поясни - почему надо писать в ПЦИ-регистры 32 бита и столько по ширине читать (да, регистры широки, но диапазон адресов ввода/вывода 0000...FFFFh). Т.е. на адреса БИОС матери при таком раскладе мы не попадем (выше постом я сразу и не сообразил). Скажи, твоя метода реально работает или это только теория ?
     
  6. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Pavia
    А железка может потребовать себе от 4 до 8 портов - ну вот я по памяти назову порты моего Виашного 6421 - 6400 (САТА0), 6500 (САТА1), 6600 (ПАТА2), 6700 (ПАТА3 - блокирован), 6800 - БусМастер. Так вот, у него диапазон будет 8 байт*4 канала=32 адреса, проверено (это при том, что 6700 блокирован !!!). Есть еще 6900 - толком не разобрался, что-то для САТА. Но ведь изюминка в другом - я ручками могу все эти адреса переназначить на другие, неконфликтные, и все заработает (не через БИОС контроллера, конечно, а напрямую, через порты). И что, твоя метода всегда отдаст мне правильный диапазон адресов ?

    А нужно ли вообще программеру знать диапазон адресов при детерминированном железе ? Применительно к хардоконтроллеру мне надо знать только базы I/O, BusMaster & Control Register (ну и количество каналов). Все это есть в даташите на него (каналы и организация регистра управления), а собственно базы я прочту из железа. Главное, чтоб БИОС правильно назначил адреса.
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Memphis
    Согласно спецификации PCI BAR регистр 32 бита.Ты можешь прочитать только 32бита и записать их же. Нужно писать именно 32 согласно спецификации PCI. Вот при чтении нужно делать обрезку до 16бит если это порты ввода/вывода (VmWare муссор пишет в верхнии адресса бяка).
    Работает. Разве что надо знать это просто диапозон и он может не весь использоваться.

    Это не моя методика, а официально за документированная.

    Из PCI 3.0 но и в ранних версиях тоже описанно.

    А то, что адресс ты поменяешь. То это ничуть не повлияет. Эта методика вычисляет размер и после мы прибовляем к записанному значению.

    Это лишь нужно биосу что бы правельно расположить адресса. А дальше их перемещать тебе не нужно. Вот если захочется тогда понадобиться. А так реальное число задействованых адрессов нужно брать из спецификаци.
     
  8. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Скажите пожалуйста если мне ПЦИ выдает, что у моего САТА есть проекция в памяти!
    Что в этом случае можно делать и как использовать?
    У меня светится два ИДЕ контроллера один с адресами портов САТА1-4,
    а второй всего лиш адрес портов 8420-842F непонятно для чего он и как с ним работать?
     
  9. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Короче как я понял то в ВАР5 хранится порты БусМастера? И они используются для ДМА/УДМА, я прав? И если я работаю в ПИО то на ВАР5 можно забить?
     
  10. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    И еще я не понял в какой регист нужно слать FFFFFFFCh для определения диапазона портов? Т.е. Я записываю в 0CFСh по адресу нужного регистра маску и сразу же его читаю и получаю маску максимального адреса порта? Так что ли?
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    fireman
    ДА. Только БусМастера используется для УДМА. А ДМА реализуется подругому, через контроллер DMA 8237.

    Странно. Это если только у тебя ACHI включен, но там все подругому.

    Первый SATA с соответствующими портами, а второй IDE с портами 170 1f0 и бус мастером 8420.

    fireman
    В BAR регистр диапозон которого хочешь определить.
     
  12. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Эт1 выдает моя прога:
    Device ID: 4380 Vendor ID: 1002 Base Class: 0001
    Sub Class: 0001 PI: 008F BAR1: 00008439 BAR2: 00008445 BAR3: 00008431 BAR4: 00008441 BAR5: 00008401 BAR6: D0509000
    Вроде как и порты для двух каналов и Диапазон памяти!
    A про ACHI - где можно почитать? :)
     
  13. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Pavia
    Спасибо за подсказку по ПСИ. Попробую на своих железках. Да, про AHCI ничего не знаю - как программировать, какие порты и за что отвечают, какие команды, как происходит трансфер. Если хорошо знаешь, растолкуй, желательно кодом, бо нет железки, где можно тренироваться - исполнять/осмысливать код придется в голове.
     
  14. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Например мой винт поддерживает УДМА 0-5. Предполагаю, при чтении в УДМА я буду читать со скоростью УДМА5. Могу ли я сменить текущий режим чтения например на УДМА0? Тот же вопрос и про PIO 0-4.
     
  15. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Rodin
    Если хард САТА, игра с УДМА-модами ничего не дает. Я пробовал своему выставить и 0, и 6 - скорость трансфера не меняется и всегда по максимуму. А для ПАТА все существенно. Моду самому харду вбивал (точнее, ограничивал максимум) через DCO, также пробовал от 0 до 6 - скорость трансфера меняется. Есть одна тонкость - если изменил УДМА-моду харду, необходимо перезагрузиться. Для ПАТА требуется согласованная настройка ПЦИ-регистров контроллера. Но обычно этим занимается БИОС матери/контроллера. Все аналогично и для ПИО. БИОСы матерей позволяли/ют установить нужную моду, при ПОСТе также необходимо настроить ПЦИ-регистры контроллера (уже ПИО конкретно), точнее БИОС это автоматом проделывает.
     
  16. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Надо мне учиться корректно формултровать вопросы :) Собственно интересовал вопрос как изменить режим работы
     
  17. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Memphis
    C ACHI (AHCI) усомого нет, а удоленно добить не удалось.

    Rodin
    Для выбора режима используй SET FEATURES
    subcommand code 03h, specifying a value in the Sector Count register.
    Для UDMA код 01000xxxb где биты 0-2 задают режим.
     
  18. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    А можно пример как программировать УДМА?! :)
    Если можно с небольшими разъяснениями :)
    Уж очень интересно стало быстро читать и писать!
     
  19. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    fireman
    А можно пример как программировать УДМА?! - а пример нужен для обозрения на бумаге или будет исполняться под отладчиком ? Для второго мне нужно знать базы I/O харда и БусМастера.
     
  20. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    http://www.wasm.ru/article.php?article=atazen02