Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / docx59 / Отчет(10)

.docx
Скачиваний:
14
Добавлен:
01.08.2013
Размер:
19.4 Кб
Скачать

Цель работы: Изучение принципов работы, устройства и схем дисковых накопителей и интерфейса IDE.

Интерфейс IDE

IDE - Integrated Drive Electronics (устройство со встроенным контроллером)

ATA - AT Attachment 1986 -1990г. Cтандарт комитета Х3Т10

PATA - Parallel ATA

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

Адресация

Трехмерная (CHS). Такая адресация позволила адресовать до 137 ГБ (65536(цилиндров)х16(головок)х255(секторов)х512)=137 ГБ

Линейная адресация логических блоков (LBA). Адрес блока - 28-битное число.

В регистре D/H шестой бит L определяет вид адресации.

Физические параметры

Сигналы уровня TLL:

Uвых"1" ³ 2,4 В, Uвых"0" £ 0,5В

Uвх"1" ³ 2,0 В, Uвх"0" £ 0,8В

Разъемы:

40 контактов - SFF 8057

4 контакта - min+12B

2,3 контакта - +5В

Для Ultra DMA - 80-контактный разъем

Для малогабаритных устройств - объединенный 50-контактный разъем SFF8212

Протокол передачи

Хост читает регистр состояния устройства, дожидаясь нулевого бита (BSY-бит в регистре состояния). Если два устройства подсоединились, то к обоим обращается. Состояние будет предаваться последнему выбранному устройству.

Дождавшись освобождения устройства, хост записывает в регистр D/H байт, у которого есть бит DEV и он указывает на адресуемое устройство. Если DEV=0, то это ведущее устройство, если DEV=1, то это ведомое.

Хост читает основной или альтернативный регистр состояния адресуемого устройства. DRDY=1 - признак готовности.

Хост заносит требуемые параметры обмена в блок командных регистров.

Хост записывает код выполненной команды в регистр команд

Устройство устанавливает бит BSY=1 и переходит к выполнению команды.

Интерфейс АТА имеет множество режимов передачи, различающихся скоростями.

Режим

Uпер. , МБ/с

Тип интерфейса

PIO mode

0

3

4

3.3

16.6

ATA

ATA-2

FAST ATA-2

Single word DMA mode

0

1

2

2.08

8.33

ATA

ATA

ATA

Multi word mode

0

1

2

4.16

16.66

ATA-2

ATA-2

FAST AT-A2

Ultra DMA mode

0

1

2

3

4

5

16.6

100

ATA/ATAPI-4

ATA/ATAPI-6

Программа записи информации в первый сектор второго жесткого диска

program write_sector;

uses dos;

type address_packet=record

packet_size:byte;

reserved0:byte;

blocks_to_transfer:byte;

reserved1:byte;

host_buffer:pointer;

lba_address:array[0..7] of byte;

end;

var

addr:address_packet;

buffer:array[0..511] of byte;

to_write:string;

i:word;

disk_number:byte;

r:registers;

begin

disk_number:=1;

writeln('Enter string to write:');

readln(to_write);

for i:=1 to length(to_write) do

buffer[i-1]:=ord(to_write[i]);

addr.packet_size:=sizeof(addr);

addr.blocks_to_transfer:=1;

addr.host_buffer:=@buffer;

for i:=0 to 7 do addr.lba_address[i]:=0;

r.ah:=$43;

r.dl:=$80+disk_number;

r.ds:=seg(addr);

r.si:=ofs(addr);

intr($13,r);

if r.ah <> $00 then

begin

writeln('Error: ',r.ah);

exit;

end;

end.

Программа чтения информации

program read_sector;

uses dos;

type address_packet=record

packet_size:byte;

reserved0:byte;

blocks_to_transfer:byte;

reserved1:byte;

host_buffer:pointer;

lba_address:array[0..7] of byte; { Адрес LBA }

end;

var

addr:address_packet;

buffer:array[0..511] of byte;

i,j:word;

cur_byte,disk_number:byte;

r:registers;

begin

disk_number:=1;

addr.packet_size:=sizeof(addr);

addr.blocks_to_transfer:=1;

addr.host_buffer:=@buffer;

for i:=0 to 7 do addr.lba_address[i]:=0;

r.ah:=$42;

r.dl:=$80+disk_number;

r.ds:=seg(addr);

r.si:=ofs(addr);

intr($13,r);

if r.ah <> $00 then

begin

writeln('Error: ',r.ah);

exit;

end;

for i:=0 to 15 do

begin

write(i*16,': ');

for j:=0 to 15 do

begin

cur_byte:=buffer[i*16+j];

if cur_byte < 32 then write('_')

else write(chr(cur_byte));

end;

writeln;

end;

end.

Программа получения параметров устройства

program disk_information;

uses dos;

type disk_info=record

size:word;

information_flags:word;

num_of_cyl:longint;

num_of_heads:longint;

num_of_sec_pt:longint;

num_of_sec:array[0..7] of byte;

bytes_in_sec:word;

dpte_addr:pointer;

dpi:word;

dpi_len:byte;

reserved0:byte;

reserved1:word;

bus_type:array[0..3] of char;

interface_type:array[0..7] of char;

interface_path:array[0..7] of byte;

device_path:array[0..15] of byte;

reserved3:byte;

dpi_csum:byte;

end;

var

info:disk_info;

r:registers;

disk_number:byte;

begin

disk_number:=0;

info.size:=sizeof(info);

r.ah:=$48;

r.dl:=$80+disk_number;

r.ds:=seg(info);

r.si:=ofs(info);

intr($13,r);

if r.ah <> $00 then

begin

writeln('Error: ',r.ah);

exit;

end;

writeln('Cyls: ',info.num_of_cyl);

writeln('Heads: ',info.num_of_heads);

writeln('Sectors per track: ',info.num_of_sec_pt);

writeln('Bytes in sector: ',info.bytes_in_sec);

writeln('Host bus type: ',info.bus_type);

writeln('Interface type: ',info.interface_type);

end.

Соседние файлы в папке docx59