как контроллеру винта SATA послать команду в Windows

Тема в разделе "WASM.ELECTRONICS", создана пользователем explosion, 9 ноя 2007.

  1. explosion

    explosion Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    34
    собственно, сабж. Мучил любыми способами. Во всех мануалах по SATA рассказывается про команды (они не сильно отличаются от PATA команд), а вот куда их посылать нигде не описано. Проги для ремонта (типа MHDD) требуют включения режима эмуляции IDE в биосе, но допустим это невозможно. Виндовс сам же как то их посылает!
    Кто занимался подобным, подскажите пожалуйста. И еще, возможно ли послать команду контроллеру винта, подключенному через USB переходник?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    explosion
    В WinXP
    Открываешь драйвер диска "\\.\PhysicalDrive0" где 0-номер диска
    Посылаешь команду диску используя DeviceIoControl ключь DFP_SEND_DRIVE_COMMAND.
    Команды одинаковые что у SATA что у PATA. Если не ошибаюсь должно работать и если у тебя через USB подключен диск.

    Что касается куда посылаются данные виндоусом.
    Виндоус находит контроллер дисков и читает данные о портах и конфигурационного пространства PCI.
    Надо сразу сказать, что контроллер(IDE/SATA) может находиться в одном из двух состояний:

    устаревшем - Legacy.
    родном - Native.
    Также для встроенных SATA-контроллеров есть режим совместимости (Сompatibility) когда он вместе с IDE-контроллером делит два канала в Legacy-режиме. И, при этом, в конфигурационном пространстве PCI будет виден только один контроллер.

    Если контролер работает в устаревшем режиме (Legacy), то для доступа к каналам используются следующие порты:
    Код (Text):
    1.  Первичный канал: порты команд  01F0h-01F7h
    2.                   Порт контроля 03F4h+2
    3.                   03F4h - база а сам порт по смещению 2
    4.                   прерывание IRQ14
    5.  Вторичный канал: порты команд  0170h-0177h
    6.                   порт контроля 0374h+2
    7.                   0374h- база а сам порт по смещению 2
    8.                   прерывание IRQ15
    А вот для USB там труднее, вернее там я не разбирался.


    http://wiki.osdev.ru/index.php/Работа_с_жесткими_дисками_и_их_контроллерами
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    При подключении к USB команды другие, используется SCSI2 - больше похоже на ATAPI.
    Даже если подключается обычный IDE винчестер в "коробке", контроллер который стоит в этой коробке будет преобразовывать SCSI2-команды в ATA-команды.
    Работа ничем не отличается от флешек - команды SCSI2 посылаются в USB пакетах.
    Но под Windows если открывать устройство как написал Pavia через \\.\PhysicalDriveX возможно работать будет и с USB дисками.
     
  4. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    Что за зверь? :)
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Набор команд такой :)
    Читать тут: www.t10.org, а конкретно http://www.t10.org/ftp/t10/drafts/s2/s2-r10l.pdf (6.1M)
     
  6. HCode

    HCode New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2006
    Сообщения:
    72
    То, что набор команд, я знаю. Непонятно причем здесь - SCSI - 2
     
  7. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Версия стандарта. Может команды новые добавили - я сравнением не занимался.
    В USB Mass Storage Bulk Only Transport specification сказано SCSI-2, значит лучше именно его и использовать.