Команда MODE SENSE (IDE)

Команда MODE SENSE (IDE) позволяет определить разнообразные параметры CD-ROM и дополняет возможности команды MODE SELECT.

Описание команды.

  • Байт 0

    В байт следует поместить код команды MODE SENSE (5Ah).

  • Байт 1

    Состоит из нескольких частей, но все они зарезервированы и не используются.

  • Байт 2

    Состоит из двух частей.

    • Биты с 7 по 6 — определяют код режима. В зависимости от установленного кода будут возвращены соответствующие значения. Код режима может принимать одно из четырех значений.
    • Биты с 5 по 0 — определяют код страницы, который необходимо получить.
  • Байты с 3 по 6

    Зарезервированы и не используются.

  • Байты с 7 по 8

    Сюда следует поместить значение размера (в байтах) выделенного буфера данных.

  • Байты с 9 по 11

    Зарезервированы и не используются.

Как уже было сказано ранее, поле кода режима принимает несколько предопределенных значений. Первое (0h) запрашивает текущие значения CD-ROM, которые могут иметь три варианта представления:

  • Текущие значения, установленные последней успешно выполненной командой MODE SELECT.
  • Сохраненные ранее значения, если команда MODE SELECT потерпела неудачу.
  • Значения по умолчанию, если сохраненные значения не доступны или не поддерживаются устройством.

Второе значение кода режима (1h) возвращает битовую маску изменяемых параметров. При этом изменяемые параметры будут иметь значение 1, а неизменяемые установятся в 0. Попытки изменить неизменяемые параметры приведут к аварийной ситуации.

Значение кода режима по умолчанию (2h) позволит получить значения параметров, поддерживаемых CD-ROM по умолчанию. Неподдерживаемые значения будут установлены в 0. Значения по умолчанию доступны для считывания даже когда устройство не готово.

Код режима, равный 3h, вернет поддерживаемые устройством сохраняемые значения параметров. Неподдерживаемые параметры будут установлены в 0. Сохраняемые параметры хранятся в энергонезависимой памяти и не теряются после выключения питания устройства.

Теперь рассмотрим подробнее форматы структур, возвращаемых после выполнения команд MODE SELECT и MODE SENSE.

Каждая страница будет содержать код страницы, длину страницы и набор параметров определенного режима.

Теперь разберем форматы страниц с данными, возвращаемыми устройством. Вначале рассмотрим код страницы (0Eh) управления звуком CD-ROM. Данная страница позволяет получить и установить режимы воспроизведения, значения громкости каждого канала звука.

Описание команды.

  • Байт 0

    Состоит из трех частей.

    • Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит, зарезервирован и не используется.
    • Бит 6 — зарезервирован и не используется.
    • Биты 5—0 — указывают на код страницы, запрошенной командой MODE SENSE ИЛИ MODE SELECT.
  • Байт 1

    Содержит значение длины (в байтах) страницы управления звуком (0Eh).

  • Байт 2

    Состоит из четырех частей.

    • Биты с 7 по 3 — зарезервированы и не используются.
    • Бит 2 — является информационным (И) и указывает на начало воспроизведения музыкального диска. Всегда должен иметь значение 1.
    • Бит 1 — указывает на режим остановки (РО). Если этот бит равен 1, то устройство должно закончить воспроизведение перед началом следующего трека.
    • Бит 0 — зарезервирован и не используется.
  • Байты с 3 по 5

    Зарезервированы и не используются.

  • Байты с 6 по 7

    Указывают на количество логических блоков, обрабатываемых устройством при воспроизведении диска за одну секунду. По умолчанию это значение равно 75 блокам в секунду.

  • Байты с 8 по 15

    Указывают на возможные связи аудиоканалов диска и выходных портов устройства.

Байты 9, 11, 13, 15 указывают на относительные уровни громкости соответствующего канала. Значение 00h говорит о минимальном (выключено) уровне громкости, а значение FFh, наоборот, указывает на максимальную громкость. Производителям рекомендуют поддерживать хотя бы 16 уровней громкости (значения определяются по формуле: 20Log - двоичный уровень/256).

Теперь рассмотрим страницу CD-ROM (код ODh). Она позволяет получить параметры устройства, характерные для всех типов CD-ROM. Например, можно легко узнать время остановки вращения двигателя при отсутствии обращений к диску.

Описание команды.

  • Байт 0

    Состоит из трех частей.

    • Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит зарезервирован и не используется. По умолчанию значение бита равно 0.
    • Бит 6 — зарезервирован и не используется.
    • Биты 5—0 — указывают на код страницы, запрошенной командами MODE SENSE ИЛИ MODE SELECT
  • Байт 1

    Содержит значение длины (в байтах) страницы CD-ROM (0Dh).

  • Байт 2

    Зарезервирован и не используется.

  • Байт 3

    Имеет две части. Первая (биты 7—4) зарезервирована и не используется. Вторая часть (биты 3—0) содержит значение времени, через которое двигатель устройства остановится, если отсутствуют обращения к диску.

  • Байты с 4 по 5

    Указывают на количество С-модулей в поле М при адресации через формат МСФ (минута, секунда, фрейм). Для носителей CD-ROM и CD-DA это значение равно 60.

  • Байты с 6 по 7

    Указывают на число Ф-модулей в поле С при адресации через формат МСФ (минута, секунда, фрейм). Для носителей CD-ROM и CD-DA это значение равно 75.

Следующая страница служит для определения параметров восстановления при ошибках, возникающих вследствие чтения данных с устройства (например, использование команд READ, READ ТОС).

Описание команды.

  • Байт 0

    Состоит из трех частей.

  • Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит зарезервирован и не используется. По умолчанию значение бита равно 0.
  • Бит 6 — зарезервирован и не используется.
  • Биты 5—0 — указывают на код страницы, запрошенной командами MODE SENSE ИЛИ MODE SELECT.
  • Байт 1

    Содержит значение длины (в байтах) страницы описания ошибок (01h).

  • Байт 2

    Хранит значение параметра восстановления. Биты 7—6 и 3 зарезервированы и не используются. Бит 5 указывает на значение блока передачи (БП). Если значение бита равно 1, значит, не восстановленный блок данных будет передан программе управления прежде, чем будет возвращен код статуса. Бит 4 обозначает непрерывность чтения (НЧ). Значение 1 этого бита говорит о том, что CD-ROM должен передать полный затребованный блок данных. Если бит равен 0, то это означает, что возникли ошибки (задержки) при передаче данных. Бит 2 определяет ошибку пересылки (ОПР). Значение 1 указывает, что CD-ROM должен сообщить о восстановленных ошибках. Бит 1 отвечает за отключение передачи (ОП) данных. Значение единицы указывает, что CD-ROM должен завершить передачу данных после обнаружения ошибки, а значение ноль не требует завершения передачи. Бит 0 указывает на отключение исправлений (ОИ) Если значение бита равно 1, значит, коды исправления ошибок не долж¬ны использоваться для восстановления данных.

  • Байт 3

    Определяет количество попыток, которое делает контроллер для исправления ошибки.

  • Байты с 4 по 7

    Зарезервированы и не используются.

  • Рассмотрим последнюю страницу возможностей и состояния CD-ROM, поддерживаемую командой MODE SENSE. Она позволяет определить тип используемого диска, состояние лотка, блокировку лотка, максимальную скорость чтения устройства, размер внутреннего буфера CD-ROM и многое другое.

    Описание таблицы.

    • Байт 0

      Состоит из трех частей.

    • Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит зарезервирован и не используется. По умолчанию значение бита равно 0.
    • Бит 6 зарезервирован и не используется.
    • Биты 5—0 указывают на код страницы, запрошенной командами MODE SENSE ИЛИ MODE SELECT.
  • Байт 1

    Содержит значение длины (в байтах) страницы описания ошибок (12h).

  • Байт 2
    • Биты 7—3 — зарезервированы и не используются.
    • Бит 2 — указывает на поддержку пакетного чтения (ПЧ) данных.
    • Бит 1 — указывает на возможность чтения дисков в формате CD-E.
    • Бит 0 — указывает на возможность чтения дисков в формате CD-R.
  • Байт 3
    • Биты 7—2 — зарезервированы и не используются.
    • Бит 1 — указывает на возможность записи дисков в формате CD-E.
    • Бит 0 — указывает на возможность записи дисков в формате CD-R.
  • Байт 4
    • Бит 7 — зарезервирован и не используется.
    • Бит 6 — указывает на поддержку чтения мультисессионных (МС) дисков (например, Photo CD).
    • Бит 5 — указывает на поддержку чтения секторов в формате Mode 2 Form 2.
    • Бит 4 — говорит о поддержке чтения секторов в формате Mode 2 Form 1(XA).
    • Бит 3 — указывает на поддержку цифрового выхода (IEC958 — протокол цифрового интерфейса для передачи данных между CD-ROM и внешним устройством цифровой звукозаписи) на втором порту.
    • Бит 2 — указывает на поддержку цифрового выхода (IEC958) на первом порту.
    • Бит 1 — говорит о поддержке композитного (аудио и видео) потока данных.
    • Бит 0 — указывает на способность устройства воспроизводить аудиоданные и поддерживать информацию подканала звука
  • Байт 5
    • Бит 7 — зарезервирован и не используется.
    • Бит 6 — указывает на поддержку кода номера носителя (UPC — Universal Product Code).
    • Бит 5 — указывает на поддержку кода международного эталона за¬писи (ISRC — International Standard Recording Code).
    • Бит 4 — говорит о поддержке указателя ошибки (УО).
    • Бит 3 — говорит о том, что данные подканала будут возвращены поочередно и с коррекцией ошибок.
    • Бит 2 — указывает, что команды, возвращающие данные подканала, смешивают информацию.
    • Бит 1 — указывает на поддержку устройством расширенных возможностей (РВ), т. е. дисковод может вернуть текущее положение без прерывания воспроизведения. Значение 0 говорит об отсутствии такой возможности, а значение 1 говорит о поддержке и гарантирует отсутствие ошибок.
    • Бит 0 — указывает, что диск (аудио) может быть прочитан командой READ CD.
  • Байт 6
    • Бит 7—5 указывают на способ загрузки диска. Это битовое поле может принимать одно из следующих значений.
      1. 000b — говорит о выдвижном механизме.
      2. 001b — говорит о лоточном механизме.
      3. 010b — указывает на выбрасывающий тип механизма.
      4. 011b — зарезервирован.
      5. 100b — механизм с индивидуально заменяемыми дисками.
      6. 101b — указывает на кассетный (картриджный) механизм.
      7. 110b — зарезервирован.
      8. 111b — зарезервирован.
    • Бит 4 — зарезервирован и не используется.
    • Бит 3 — указывает на поддержку выдачи диска командой START/STOP. Если тип механизма является картриджным, этот бит указывает на возможность выдачи картриджа устройством.
    • Бит 2 — указывает на поддержку механизмом устройства джампера блокировки (ДБ), позволяя блокировать доступ к диску.
    • Бит 1 — указывает на текущее состояние блокировки (ТСБ) меха¬низма. Значение 0 говорит о том, что устройство разблокировано и можно вставить диск. Значение 1 указывает, что механизм блокиро¬ван достать диск, пользуясь программными методами или кнопкой выдачи диска (Eject) нельзя, равно как в случае отсутствия диска в дисководе не удастся вставить никакой диск в устройство.
    • Бит 0 — указывает на поддержку устройством функции блокировки (Б) механизма выдачи диска.
  • Байт 7
    • Биты 7—4 — зарезервированы и не используются.
    • Бит 3 — определяет ошибку загрузки (03), которая возникает при использовании команды LOAD UNLOAD CD, когда диск в дисководе отсутствует.
    • Бит 2 — указывает на поддержку определения состояния слота (СС) устройства после того, как был вынут картридж. Последующий вызов команды MECHANISM STATUS позволит точно определить состояние слота.
    • Бит 1 — указывает на поддержку независимого отключения каналов звука (НОКЗ) на устройстве.
    • Бит 0 — указывает на поддержку независимой регулировки громкости (НРГ) каждого канала звука.
  • Байты 8 и 9

    Здесь хранится значение максимальной поддерживаемой скорости (в Кбайт/с) чтения данным устройством CD-ROM. Оно не является постоянным и изменяется в зависимости от скорости вращения диска, местоположения текущего считывания и других факторов.

  • Байты 10 и 11

    Хранят значение количества поддерживаемых уровней фомкости. Если поддерживает только включение и выключение звука, будет возвращено значение 2.

  • Байты 12 и 13

    Сюда помещается значение (в Кбайтах) полного размера буфера данного устройства CD-ROM. Если привод не имеет буфера, будет возвращено нулевое значение.

  • Байты 14 и 15

    Здесь хранится значение фактической скорости передачи данных, используемой дисководом в настоящий момент. Это значение представлено, как число в Кбайт/с.

  • Байт 16

    Зарезервирован и не используется.

  • Байт 17

    Описывает формат цифрового выхода устройства.

    • Биты 7 и 6 — зарезервированы и не используются.
    • Биты 5 и 4 — указывают на разрядность цифрового сигнала и могут иметь следующие значения:
      1. 00b — равно 32 бита;
      2. 01b — равно 16 бит;
      3. 10b — равно 24 бита;
      4. 11b — равно 24 бита.
    • Бит 3 — установлен в 1, если первым идет младший значащий бит (МЗБ) значения, и в 0, если — (СЗБ).
    • Бит 2 — установлен в 1, если используется левый канал, и в 0, если правый.
    • Бит 1 — установлен, если данные сигнала правильны.
    • Бит 0 — зарезервирован и не используется.
  • Байты 18 и 19

    Exec.SRB_BufLen = 256; // размер буфера для данных

    Exec.SRB_BufPointer = buffer; // указатель на буфер данных

    Exec.SRB_SenseLen = SENSE_LEN; // размер поля отчета

    Exec.SRB_PostProc = (LPVOID) hEventASPI; // определяем объект события

    Exec.SRB_CDBLen = 12; // размер команды MODE SELECT

    Exec.CDBByte[0] = SCSI_MODE_SEN10; // заносим по адресу первого байта

    // значение команды MODE SENSE (0x5A)

    // заносим по адресу 2 байта код нужной страницы

    Exec.CDBByte[2] = 0х2А; // страница возможностей и состояния CD-ROM

    // заносим длину буфера в 256 байт (100h в шестнадцатиричном виде)

    Exec.CDBByte[7] = 0x01; // старший значащий бит

    Exec.CDBByte[8] = 0x00; // младший значащий бит

    Зарезервированы и не используются.

  • На этом можно завершить описание страниц поддержки CD-ROM и продемонстрировать пример их использования. Напишем функцию, которая определит максимальную скорость чтения, поддерживаемую установленным на компьютере устройством CD-ROM.

    Листинг 1. Определение максимальной скорости чтения CD-ROM в Visual C++

    Итак, мы получили значение максимальной скорости чтения. Как мы узнали, где хранится закодированная скорость? Очень просто: отсчитали 8 байтов заголовка страницы параметров, начиная с 0, и прибавили 8 байтов из страницы возможностей и состояния CD-ROM. Следующие по счету 2 байта (16 и 17) и есть значение искомой скорости. После это¬го с помощью оператора сдвига извлекли старший и младший значащие биты, получив конечный результат скорости в килобайтах в секунду.

     

     

    2021-04-01

    Google сообщил о запуске проекта Dunant

    Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...

    подробнее
    2020-04-06

    Новшества в обновленной Windows 10

    Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...

    подробнее

     

    Все новости...

     

    Научно-Техническое Объединение

    Тел.: +7(4752) 55-95-86

    E-mail:e-mail