Как настроить жесткий диск ATA, чтобы начать генерировать прерывания? - PullRequest
3 голосов
/ 13 мая 2009

ПОСТАНОВИЛИ

После многих недоразумений и разочарований мой жесткий диск наконец-то прервался. : D Это в основном сводилось к тому, что я продолжал читать регистр состояния вместо альтернативного регистра состояния. Несколько других вещей были испорчены для загрузки, но дело в том, что мой драйвер жесткого диска наконец начинает обретать форму. Теперь для других оставлю оригинальный пост.

P.S. Для дальнейшего разъяснения мне не нужно было вводить какие-либо команды сброса. Все, что я сделал, было следующее:

  1. Выберите устройство (не хотел уничтожать ОС Solaris на другом диске)
  2. очистить бит nIEN в регистре управления устройством
  3. выполнить команду IDENTIFY DEVICE ***

На самом деле, я не уверен, нужна ли команда IDENTIFY DEVICE, потому что я покинул лабораторию довольным, прежде чем смог протестировать код, не выполнив команду. Однако главное, что мне нужно было обязательно прочитать регистр альтернативный статус и очистить бит nIEN без необходимости сброса. BIOS, очевидно, заботится о большинстве вещей.


В настоящее время я пытаюсь написать драйвер диска для хобби-ОС, разрабатываемой в моей школе. В настоящее время у меня есть подпрограммы для чтения / записи данных в пространстве конфигурации PCI и сборочные подпрограммы для выполнения ввода / вывода порта с различными регистрами, определенными ATA / ATAPI-7. Теперь мой вопрос, в частности, как я получу жесткий диск IDE, чтобы начать генерировать прерывания? Я просматривал всю эту документацию и мне не стало ясно, что я делаю неправильно.

Может кто-нибудь объяснить, что именно заставляет жесткий диск IDE запускать прерывания? У меня уже есть подпрограмма обработки прерываний, готовая к тестированию, но мне сложно сначала получить прерывания. Можно ли это сделать с помощью программного сброса ATA?

Спасибо!

ОБНОВЛЕНИЕ: Хорошо, я смог получить вторичный канал, компакт-диск ATAPI для генерации прерываний, установив бит SRST в регистре управления устройством для мягкого сброса. Это не работает для жесткого диска на основном канале. До сих пор я заметил, что когда я устанавливаю бит SRST для жесткого диска, он устанавливает бит BSY и оставляет его установленным. Оттуда я не знаю, что делать.

Ответы [ 2 ]

3 голосов
/ 15 мая 2009

Справочная информация должна помочь вам: Описание программирования в Кеносе ATA / ATAPI .

Основным механизмом разрешения прерываний является очистка nIEN в DCR (Регистр управления устройством):

nIEN: бит разрешения прерывания привода. Бит разрешения прерывания диска для хоста. Когда nIEN равен 0 или выбран привод, сигнал прерывания хоста INTRQ активируется через буфер трех состояний для хоста. Когда nIEN равен 1 или привод не выбран, сигнал прерывания хоста INTRQ находится в состоянии высокого импеданса независимо от наличия или отсутствия ожидающего прерывания.

Этот www.ata-atapi.com является хорошей отправной точкой для того, чтобы найти больше информации об ATA / PATA / SATA / ATAPI, чем вы хотите знать ... Обратите внимание, что официальный ATA -6 / 7 / etc спецификации стоят $$ от T13, хотя вы можете скачать с них текущие версии ATA-8.

Эта ссылка описывает некоторые из многих способов, которыми устройства ATA отличаются от спецификаций. (Раньше я писал драйверы SCSI и ATA / ATAPI для Commodore / Amiga, а также помогал с квалификационными дисками - или, точнее, выяснял, что же сделали производители идиотизма.)

1 голос
/ 15 мая 2009

если это просто хобби ОС, почему бы не использовать прерывание BIOS (int 13h)? по общему признанию, не так быстро, как прямой доступ к диску, но безопаснее для вашего жесткого диска (я положил считывающую головку через пластину, прежде чем связываться с дисковым вводом / выводом).

...