Корвет/Радио 06-89/Контроллер дисковода

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: С. АХМАНОВ, Н. РОЙ, А. СКУРИХИН

Источник: http://rkgames.h11.ru/infopk/doc/korvet_radio/doc3.htm

Всем хорошо известно, как происходит запись информации на магнитную ленту. Мы заправляем ее в лентопротяжный механизм магнитофона, включаем его и подаем на записывающую головку электрические сигналы, которые несут информацию. Запомнив показания счетчика расхода ленты в моменты записи тех или иных фрагментов, мы впоследствии можем достаточно быстро их находить и считывать.

Иное дело магнитный диск. Хотя физически принцип записи аналогичен записи на магнитную ленту, все же имеется существенное отличие в работе с ним. Оно состоит в том, что у диска нет ни начала, ни конца. Поэтому, не приняв специальных мер, найти на нем записанную информацию очень трудно. Комплекс этих мер называется форматированием диска.

Диск разбивается на области (рис. 1). Для того чтобы как-то фиксировать начало координат, на диске предусмотрено специальное отверстие, которое называется индексным маркером. Когда диск вращается, это отверстие периодически пересекает линию, соединяющую фото- и светодиоды оптодатчика. В результате вырабатывается импульс, используемый для привязки записываемой и считываемой информации к конкретному месту на диске.

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

Обычно на дисках бывает 40 или 80 дорожек. Поскольку на одну дорожку умещается значительное количество информации, то ее целесообразно разбить на секторы. Количество и объем секторов могут быть различными. Обычно они имеют объем 128, 256, 512 или 1024 байт. Их количество в основном определяется скоростью вращения диска и объемом сектора. Принятыми являются 5, 8, 9 и 15 секторов на одной дорожке. В «Корвете» на одну дорожку записывают пять секторов емкостью 1024 байта.

У диска, как известно, две стороны — верхняя и нижняя. Поэтому естественно предположить наличие в дисководе двух головок, обслуживающих соответствующую сторону, Так оно и есть — существуют одно- и двусторонние дисководы. Сторонам диска присваиваются номера 0 и 1.

Что же должен делать контроллер гибких дисков? Прежде всего принять необходимые команды от микропроцессора, затем разобраться в разметке диска. Как это делается мы узнаем несколько позже. После того как контроллер нашел на диске требуемую область, он должен считать или записать информацию. И наконец, необходимо опять выйти на связь с микропроцессором и доложить о результатах.

Теперь давайте разберемся, как контроллер устроен и как он выполняет эти операции.

Контроллеры гибких дисков бывают различных конструкций. Здесь мы рассмотрим один из них — КР1818ВГ93, применяемый в «Корвете». Блок-схема контроллера изображена на рис. 2.

Видно, что в состав контроллера входят шесть регистров.

  1. Регистр данных. В этом 8-разрядном регистре хранятся данные, используемые при чтении и записи. При перемещении головки дисковода на заданную дорожку в этот регистр заносится ее номер.
  2. Регистр статуса. В нем хранится сообщение для процессора об итогах выполненной или невыполненной операции.
  3. Регистр команд. Здесь хранится код команды, который необходимо выполнить контроллеру.
  4. Регистр сектора. В этом 8-разрядном регистре хранится номер требуемого сектора.
  5. Регистр дорожки. Этот 8-разрядный регистр хранит номер текущей дорожки. При перемещении головки дисковода к центру диска содержимое этого регистра увеличивается на единицу с каждым шагом. При перемещении головки от центра содержимое регистра уменьшается.
  6. Сдвиговый регистр данных. Он принимает последовательность битов, идущих с диска при чтении и преобразует их в байты, которые передает интерфейсу с процессором. При записи этот процесс происходит в обратном направлении.

Кроме названных регистров в состав контроллера входят: устройство подсчета контрольной суммы; арифметико-логическое устройство (АЛУ), выполняющее необходимые математические действия (увеличение, уменьшение, сравнение) и детектор адресной метки, который позволяет отличить области на диске, где записана служебная информация, касающаяся разметки диска, и собственно данные, записанные на диск.

Теперь разберемся с командами, выполняемыми контроллером. Как мы уже знаем, первая задача — это найти требуемую дорожку. Для этой цели служат пять команд:

  1. RESTORE — перемещение головки дисковода на нулевую дорожку диска.
  2. SEEK — перемещение головки дисковода на дорожку с номером, указанным в регистре данных.
  3. STEP — смещение головки на одну дорожку в направлении, заданном предшествующей командой.
  4. STEP IN — смещение головки на одну дорожку к центру диска.
  5. STEP OUT — смещение головки на одну дорожку от центра диска.

Эти команды называются командами первого типа. Как вы, наверное, уже догадались, для выполнения контроллером команды необходимо занести ее код в командный регистр. Коды команд первого типа приведены в табл. 1.

Команда Содержимое командного регистра
RESTORE 00000000B
SEEK 00010000B
STEP 00100000B
STEP IN 01000000B
STEP OUT 01100000B

Код команды может заноситься в командный регистр совместно с модификаторами (параметр, используемый для изменения значений). Для команд первого типа могут использоваться следующие модификаторы:

Таблица 2

Модификатор Код Комментарий
UPDATE 00010000В Отслеживание перемещения головки в регистре дорожки
HLD 00001000В Прижим головки при движении
VERIFY 00000100В Проверка установки головки после перемещения
RATE 000000аbB Задание времени позиционирования головки

ab=00—06 мс
аb=01—12 мс
аb=10—20 мс
аb=11—30 мс

Модификаторы используются совместно с кодом команды. Так, если мы хотим переместить головку на одну дорожку к центру диска, отслеживая перемещение и проверяя установку, с временем позиционироваания 20 мс, то мы должны занести в командный регистр 01010110В.

Если в процессе выполнения команд первого типа что-то не получилось, то в регистре статуса появляется код ошибки. Назначение битов этого регистра для команд первого типа приведен в табл. 3. При этом признаком наличия ошибки является установка в единичное состояние соответствующего бита.

Таблица 3

Бит Назначение
7 Не готов дисковод
6 Запрещена запись
5 Головка прижата
4 Ошибка позиционирования
3 Ошибка в контрольной сумме
2 Достижение нулевой дорожки
1 Бит, отвечающий индексному маркеру
0 Контроллер не готов принять команду

Итак, мы теперь умеем выводить головку дисковода на нужную дорожку. Чтение или запись теперь можно осуществить так.

Для этой цели существуют команды второго типа: чтения и записи сектора.

Коды этих команд соответственно 10000000В и 10100000В. Кроме этого, существуют два модификатора этих команд:

  1. Многосекторные операции — 00010000В.
  2. Задержка выполнения команды на время подвода головки - 00000100В (15 мс).

Каким же образом строится полная команда, скажем, чтения заданного сектора на заданной дорожке?

Сначала, поместив в регистре данных номер требуемой дорожки, мы выполняем команду SEEK. Если позиционирование прошло успешно (об этом свидетельствуют соответствующие биты регистра статуса), то можно приступать к чтению. Для этого помещаем номер нужного нам сектора в регистр сектора и выдаем контроллеру команду читать. Однако регистр данных у контроллера содержит всего один байт. Сектор же может иметь объем до 1024 байт. При этом диск крутится непрерывно. Это противоречие решается путем организации диалога между контроллером и процессором. Диалог ведется через регистр статуса. Назначение его битов для команд второго типа приведено в табл. 4.

Таблица 4

Бит Назначение
7 Дисковод не готов
6 Запрещена запись
5 При чтении: 1 — стерта метка данных, 0 — метка данных. При записи 1 — ошибка записи
4 Не найдены требуемые дорожка, сектор или сторона диска
3 Ошибка контрольной суммы
2 Потеря данные. Означает, что процессор не считал подготовленные данные
1 Готовность данных. Означает, что регистр данных содержит считанный байт при чтении или пуст при записи
0 Контроллер занят

Разберемся подробнее в процессе организации диалога. Когда контроллер принял команду и начал ее выполнять, он устанавливает бит 0 в регистре статуса в 1. После этого процессор должен следить за битом 1. Когда он будет установлен в 1, то необходимо или считать байт из регистра данных, или записать его туда, в зависимости от того, что мы делаем — читаем или пишем. Появление единиц в других битах регистра статуса свидетельствует об ошибке. После того как будет закончено выполнение команды бит 0 регистра статуса будет сброшен.

Займемся отложенным до поры вопросом о структуре дорожки. Как все-таки контроллер разбирается туда ли, куда надо, попала головка дисковода? Рассмотрим структуру дорожки. Как мы знаем, она поделена на секторы. Структура сектора изображена на рис. 3, Сектор состоит из двух частей: поля идентификатора и поля данных.

Поле идентификатора начинается с некоторой последовательности нулей и единиц, призванных обеспечить синхронизацию контроллера. Далее следует байт (адресная метка), указывающий, что начинается поле идентификатора. Этот байт обычно равен F7H. После него следуют номер дорожки, номер стороны диска, номер и длина сектора. Контроллер считывает эту информацию и сравнивает ее с требуемыми номерами дорожки, стороны и сектора. Если по прошествии некоторого времени требуемая область на диске найдена не будет, то появится сообщение об ошибке. После информации о параметрах области следует контрольная сумма. Далее через некоторый промежуток появляется байт (FBH) (адресная метка), индицирующий начало поля данных. Его размер определяется длиной сектора в поле идентификатора. Контроллер считывает и передает процессору (или записывает) ровно столько байт, сколько определено. Завершают поле данных байты контрольной суммы.

Отметим, что при выполнении команд первого и второго типов все операции с полем идентификатора контроллер выполняет автоматически. Процессор узнает об итогах выполнения тех или иных действий, анализируя содержимое регистра статуса.

Существуют, однако, специальные команды, позволяющие узнавать или изменять содержимое любой части дорожки. Это команды третьего типа:

  1. RDADR — чтение номера дорожек, стороны, сектора, а также длины сектора и контрольной суммы. Код команды 11000000В.
  2. RDTRK — чтение дорожки целиком. Оно начинается с первого появившегося сигнала индексного маркера и продолжается до следующего. При этом все байты на дорожке передаются через регистр данных процессору аналогично процессору передачи данных при чтении сектора. Код команды 11100000В.
  3. WRTRK — команда записи дорожки. По этой команде происходит запись дорожки, причем контроллер автоматически вычисляет значение контрольных сумм и размещает их в соответствующих местах. Код команды 11110000В.

Команды третьего типа могут использовать модификатор задержки аналогично командам второго типа. Назначение битов регистра статуса для команд второго и третьего типов одинаково.

Для оперативного вмешательства в работу процессора контроллер может генерировать запрос прерывания. Но для этого необходимо задать условие возникновения прерывания. Это условие задается путем выполнения команды четвертого типа. Ее код 11010000В. Эта команда может использовать четыре модификатора.

  1. 00000001В — прерывание по готовности дисковода.
  2. 00000010B — прерывание по неготовности дисковода.
  3. 00000100В — прерывание по индексному маркеру.
  4. 00001000В — немедленное прерывание.

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

На этом исчерпывается набор команд, выполняемых контроллером. Остается еще один вопрос. До сих пор мы нигде не говорили о том, каким образом запускается мотор у дисковода, как выбирается тот или иной дисковод, как выбирается сторона диска? Сам контроллер, как мы видели, этим не занимается. Следовательно, необходим еще один регистр, куда мы могли бы занести необходимые сведения. Этот регистр называется регистром выбора и управления. Назначение его битов приведено на рис. 4.

И в заключение приведем адреса перечисленных регистров контроллера и регистра выбора и управления для конфигурации памяти, необходимой для нормальной работы ОС СР/М:

  1. Регистр выбора и управления — FB39H.
  2. Командный регистр — FB18H.
  3. Регистр статуса — FB18H.
  4. Регистр дорожки — FB19H.
  5. Регистр сектора — FB1АН.
  6. Регистр данных — FB1BH.

С. АХМАНОВ, Н. РОЙ, А. СКУРИХИН

Сканирование и обработка: А. Болтаевский, 26.06.2000