EXECUTE_DEVICE_DIAGNOSTICS [HDD]

Тема в разделе "WASM.ASSEMBLER", создана пользователем Mika0x65, 20 ноя 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Определяю наличие/отсутствие винчестеров на канале, с помощью EXECUTE DEVICE DIAGNOSTICS. Но сильно запутался в работе с этой командой.

    Во-первых, смущает вот что:
    Получается, что команда не дает точного определения винчестеров (из-за: "2 If Device 1 is not present, the host may see the information from Device 0").

    За подробностями полез в протокол команды, и запутался там еще больше. Самое главное, я не понимаю, что значит слово "sampling". С т.з. хоста протокол выглядит довольно просто:

    1. Послали команду.
    2. Ждем прерывания от устройства.

    С т.з. device0:

    1. Получили команду.
    2а. Device1 нет, сбросили бит 7 в регистре ошибок, выставили сигнал INTRQ.
    2б. Device1 есть. Вот тут начинается непонятное. Почему-то ждем сигнала PDIAG-. Зачем?
    3. Совсем непонятное состояния Sample_PDIAG. Что в этом контексте значит "sample"? Продолжаться это безобразие должно 6 секунд, если определено, что в процессе "sampling"а PDIAG- выставлен -- очищаем бит 7 в регистре ошибок, переходим к след. состоянию. Если же в течение 6 секунд "sampling"а сигнал X не выставлен, то устанавливаем бит 7 в регистре ошибок и идем к след. состоянию. Я пометил сигнал как Х, потому что в стандарте написано:
    При чем тут DASP-? Надо полагать, это опечатка.

    В протоколе с т.з. Device1 тоже непонятно -- он почему-то должен сначала сбросить PDIAG-, потом установить его, если все в порядке.

    В итоге, как я понял, наличие Device1 таки можно вычислить по состоянию бита 7 в регистре ошибок, но не уверен точно. Но это немного противоречит таблице 26. Т.е. если при выполнении команды device1 ответил, значит бит 7 регистра ошибок будет сброшен, иначе -- установлен. Но что значит "sampling" все равно не ясно.

    Дальше -- больше. Из главы 9.16 (ata-atapi-6-3b) следует, что device0 может запросто отвечать за device1. Т.е. я даже не знаю точно, из какого устройства я читаю данные. И, к сожалению, как ведет себя хост в device1 only системах тоже не понятно. Т.е. что такая конфигруция implementation specific я понял, но как мне себя вести при определении винчестеров? Помогут ли в этом коды ошибок из таблицы 26?

    Прошу прощения за несколько сумбурное описание, немного запутался. В итоге, основной вопрос -- определение наличия устройств на канале. Ну и заодно хотелось бы ответов на вопрос относительно протокола. Заранее благодарен.