Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

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


Использование программ BIOS для получения диагностической информации от адаптеров и внешних устройств ПК.

Использование программ BIOS для получения диагностической информации от адаптеров и внешних устройств ПК.

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

Эта диагностическая информация может быть получена и в результате выполнения специально написанных простых программ тестирования. Коды ошибок, байты состояний, информация в регистрах ошибок и регистрах состояний (например, 1F1 и 1F7 на рис.1) - формируются аппаратурой контроллеров и являются информацией о конкретных состояниях и ошибках в аппаратуре контроллеров и внешних устройств. Это достоверная опорная информация для поиска ошибок в контроллерах, расположенных на системных платах и во внешних устройствах.

 

Рис. 1.

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

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

Для получения такой информации, как: коды ошибок устройств, формируемые программами-функциями BIOS; байты состояния устройства, формируемые аппаратурой контроллеров; содержимое регистра ошибок или регистра состояния контроллера обычно, достаточно однократного выполнения в отладчике (например, AFD) небольшой специальной программы, запускающей контролируемый процесс в устройстве. Затем с помощью AFD прочитать регистры ошибок и состояний внешнего устройств, коды ошибок в регистре АН и AL микропроцессора. После анализа полученной диагностической информации можно приступать к планированию дальнейших действий по локализации неисправности.

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

С помощью специальных программ обычную системную плату можно превратить в универсальный стенд для диагностирования и ремонта большинства узлов и устройств компьютера. Умение программировать дает возможность создавать «инструментальные» программные средства, заменяющие дорогие аппаратные тестеры, используемые для контроля и диагностики устройств. Стоимость аппаратных тестеров достаточно высока, а их номенклатура невелика. Модификация и их приспособление к конкретному устройству - это сложное и дорогостоящее удовольствие. Разработанные «инструментальные» программные средства, в отличие от аппаратных тестеров, легко модифицируются и приспосабливаются для работы с любым устройством. Программным путем можно задать в устройстве любой необходимый для контроля режим работы, удобно и эффективно осуществлять контроль процессов осциллографом.

Написание специальных программ обычно осуществляют на ассемблере. Для упрощения процесса создания программ, в составе этих программ используют стандартные программы-функции BIOS. Лучший эффект дает использование стандартных программ-функций BIOS. Программы BIOS являются низшим (физическим) уровнем стандартного ввода/вывода операционной системы. Программы «прошиты» в постоянном запоминающем устройстве ПЗУ BIOS и реализуют при своем выполнении функции управления внешними устройствами на физическом уровне. Ввод-вывод на физическом уровне осуществляется на уровне команд контроллеров внешних устройств, их программно-доступных регистров (с реализацией всех необходимых задержек и особенностей управления устройством). Программы BIOS подробно описаны (как говорят, хорошо документированы). По ним изданы справочники в печатном и электронном виде. Набор программы, ее отладку и запуск программы на выполнение, удобно осуществлять с помощью простых специальных программ типа профотладчиков Debug, AFD и др.. Программы-профотладчики предназначены для использования в работе специалистами по ремонту и диагностированию персональных компьютеров. С точки зрения программистов, они обладают скромными функциональными возможностями, но для написания и выполнения небольших специальных программ, чтения регистров контроллеров и процессора их возможностей вполне достаточно.

Например, программа BIOS INT 13h, функция 02h (Чтение сектора) читает один или группу секторов с физического диска в память.

Для запуска программы BIOS INT 13h, функция 02заносим в регистры процессора следующую информацию:

AH=02h

AL=число читаемых секторов

СН=номер цилиндра

CL=номер начального сектора

DH=номер головки

DL=номер дисковода (00h...7Fh - гибкий диск , 80h...FFh - жесткий диск)

ЕS:ВХ=адрес буфера

INT 13

...

При нормальном завершении записывает в разряд регистра флагов процессора CF=0, в регистр АН=0, а в регистр АL=число переданных секторов.

При ошибке: в CF=1, АН= код состояния (или ошибки):

00h - отсутствие ошибки

0lh - неправильная команда

02h - не найдена адресная метка

03h - дискета защищена от записи

04h - сектор не найден

05h - сброс жесткого диска не прошел

06h - дискета вынута

07h - неправильная таблица параметров жесткого диска

0Ch - не найден тип носителя данных

0Dh - неправильное число секторов в формате на жестком диске

10h - невосстановимая ошибка данных

11h - восстановленная ошибка данных на жестком диске

20h - неисправность контроллера

40h - ошибка позиционирования

80h - тайм-аут диска

AAh - жесткий диск не готов

BBh - неизвестная ошибка жесткого диска

CCh - Ошибка при записи

E0h - Ошибка регистра состояния

 

Использование дополнительных дисковых функций

Дополнительные функции имеют номера 41h-49h и 4Eh. Порядок работы с этими функциями существенно отличается от принятого для стандартных функций прерывания Int 13h :

• вся адресная информация передается через буфер в оперативной памяти, а не через регистры;

• соглашения об использовании регистров изменены (для обеспечения передачи новых структур данных);

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

Пакет дискового адреса

Фундаментальной структурой данных для дополнительных функций прерывания Int I3h является так называемый «Пакет дискового адреса» (Disk Address Packet). Получив пакет дискового адреса, прерывание Int 13h преобразует содержащиеся в нем данные в физические параметры, соответствующие используемому носителю информации. Формат пакета дискового адреса описан в таблице 1:

Таблица 1. Формат пакета дискового адреса

 

Рассмотрим назначение отдельных полей пакета дискового адреса более подробно:

- Байт со смещением 00h содержит размер пакета дискового адреса в байтах. Размер должен составлять 16 и более байт: если значение данного поля меньше 16, то функция завершается аварийно (устанавливается CF = 1, АН = 01h).

- Байт со смещением 01h зарезервирован для последующих версий стандарта и должен содержать значение 0.

- Байт со смещением 02h содержит число блоков (секторов) данных, подлежащих передаче. Значение числа передаваемых блоков не должно превышать 127 (7Fh), в противном случае функция завершается аварийно (устанавливается CF = 1, АН = 01h).

Если поле содержит значение 0, то при выполнении функции передача данных не производится. Если поле содержит значение FFh, то используется 64-разрядная адресация данных: адрес буфера задается не двойным словом со смещением 04h, а квадрасловом со смещением 10h; число передаваемых блоков задается двойным словом со смещением 18h.

- Байт со смещением 03h зарезервирован для последующих версий стандарта и должен содержать значение 0.

- Двойное слово со смещением 04h содержит адрес буфера в оперативной памяти, который используется при работе с диском. Адрес должен быть представлен в формате «сегмент/смещение», то есть буфер должен находиться в пределах первого мегабайта адресного пространства процессора. Если данное поле содержит значение FFFF: FFFFh, то для обращения к Буферу применяется линейный адрес, который задается квадрасловом со смещением 10h.

- Квадраслово со смещением 08h содержит абсолютный 64-разрядный номер начального блока (LBA-адрес) данных на диске.

Если устройство поддерживает режим LBA, то данный адрес передается ему непосредственно, без каких-либо модификаций.

Если устройство не может работать в режиме LBA, то производится преобразование линейного адреса в формат CHS.

Все перечисленные поля пакета дискового адреса присутствуют в стандарте с момента появления его первой версии. В новых версиях размер пакета был увеличен вдвое (32 байта вместо 16), так как возникла необходимость в поддержке 64-разрядной адресации данных, которая будет применяться в компьютерах с новыми (64-разрядными) моделями процессоров.

- Квадраслово со смещением 10h содержит 64-разрядный линейный адрес буфера передачи, то есть буфера в оперативной Памяти, который используется при выполнении операций записи и считывания. Данное поле имеет значение только в том случае, если байт со смещением 02h содержит значение FFh или двойное слово со смещением 04h содержит значение FFFF: FFFFh.

  • Двойное слово со смещением 18h задает число передаваемых блоков, но используется только в том случае, если байт со cмещением 02h содержит значение FFh

  • Двойное слово со смещением 1Ch зарезервировано для последующих версий стандарта (должно содержать значение 0).

Правила передачи параметров дополнительным функциям

При вызове прерывания дополнительным функциям BIOS передаются через регистры процессора следующие данные:

• в АН — номер вызываемой функции;

• в DL — номер диска;

• в DS: SI — адрес буфера, содержащего пакет дискового адреса.

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

Дополнительные функции BIOS предназначены только для жестких дисков и дисководов сменных дисков большой емкости, причем функции рассчитаны на использование не более четырех устройств. Передаваемый функции номер диска, таким образом, должен находиться в диапазоне 80h-83h.

После выполнения функции в регистре АН выдается код состояния (статус возврата). Кроме принятого для классических функций BIOS стандартного набора кодов возврата, которые перечислены в «синей» табл., для дополнительных функций введено еще несколько кодов, перечисленных в «белой» таблице.

Коды состояния (для жестких дисков):

 

Коды состояния (для дополнительных функций введено еще несколько кодов):

 

Прерывание Int 13h, функция 42h: расширенное чтение

Функция осуществляет передачу секторов с заданной области диска в буфер памяти.

Перед вызовом прерывания требуется записать в регистры следующие значения:

• в АН — значение 42h;

• в DL — номер дисковода;

• в DS: SI — адрес пакета дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно прочитаны (прочитаны до того, как произошла ошибка).

Прерывание Int 13h, функция 43h: расширенная запись

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

Перед вызовом прерывания требуется записать в регистры следующие значения:

• в АН — значение 43h;

• в AL — код режима записи (0 или 1 — запись без верификации, 2 — запись с верификацией);

• в DL — номер дисковода;

• в DS: SI — адрес пакета дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно записаны (записаны до того, как произошла ошибка). Причиной аварийного завершения, данной функции может быть отсутствие у заданного устройства поддержки команды записи данных с верификацией. Проверить наличие поддержки записи с верификацией можно при помощи функции 48h.

Прерывание Int 13h, функция 44h: верификация секторов

Функция осуществляет проверку секторов на диске по их контрольным суммам (без передачи информации между диском и оперативной памятью).

Перед вызовом прерывания требуется записать в регистры следующие значения:

• в АН — значение 44h;

• в DL — номер дисковода;

• в DS: SI – адрес пакета дискового адреса.

После завершения операции функция возвращает в регистре АН состояние дисковой системы. В случае аварийного завершения выполнения функции поле счетчика блоков в пакете дискового адреса содержит число блоков, которые были успешно верифицированы (проверены до того, как произошла ошибка).

Пример использования дополнительной функции BIOS INT 13, функция 42h.

В окне 2 (рис. 2):

- с адреса 200h расположен «пакет дискового адреса» (занимает 20h байтов).

Нажимая F2 выполним программу:

- c адреса 240h расположен буфер в который принято содержимое LBA с адресом

3Fh (Boot-сектор: EB 3C 90 46 … ).

 

Рис. 2.

Возможности профотладчика AFD позволяют выполнять операции записи/чтения по отношению к регистрам контроллеров периферийных устройств ПК. Набрав в командной строке команду «чтение порта» (например, команда I 1F1 показывает содержимое регистра ошибок контроллера жесткого диска). Значение битов прочитанного байта может рассказать о состоянии устройства или о том, что по данному адресу устройство не отвечает (код байта равен FF или 00 в некоторых случаях).

Проверку некоторых функций устройств можно осуществить подпрограммой записи в порт ввода-вывода контроллера внешнего устройства. Подпрограмма записи в порт ввода – вывода запускается на выполнение командой отладчика:

О Адрес порта, код байта

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

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

 

 


Лицензия