Мое почтение всем. Определяю наличие/отсутствие винчестеров на канале, с помощью 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? Прошу прощения за несколько сумбурное описание, немного запутался. В итоге, основной вопрос -- определение наличия устройств на канале. Ну и заодно хотелось бы ответов на вопрос относительно протокола. Заранее благодарен.