на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Розробка програмного забезпечення для визначення інформації про жорсткий диск використовуючи інтерфейс IDE/ATAPI
p align="left">У кожного диска 2 поверхні (одна з них, щоправда, використовується не завжди, вона служить для так званих сервоміток, особливих областей, по яких контролер диска визначає поточне положення голівок і "націлюється" на потрібний циліндр під час позиціювання. Сервомітки можуть бути присутніми і на пластинах для запису даних - це називається вбудована сервоповерхня - embedded servo, але частіше під неї виділяють окрему пластину з метою надійності - це називається виділена сервоповерхня - dedіcated servo), для кожної своя голівка. І нарешті, циліндр розбитий на сектори.

Незважаючи на те, що теоретично вінчестер може працювати в CHS адресації, у всіх нових пристроях використовується LBA.

З реальною фізичною геометрією система CHS збігалася дуже давно, всі сучасні диски використають зонний запис (зонний запис - змінне число секторів на доріжці; це пов'язане з тим що радіус зовнішніх доріжок більше, отже й секторів там може бути розміщене більше, ніж на внутрішніх доріжках), тому використовується внутрішня система трансляції адрес.

Регістри контролера.

- Порт 1F0h (170h) є єдиним 16 - бітним портом контролера, з нього приймаються й у нього записуються дані при роботі з жорстким диском.

ScanDevices SCANDEVENTRY <1F0h,0,OFFSET szPriMaster>

SCANDEVENTRY <1F0h,1,OFFSET szPriSlave>

SCANDEVENTRY <170h,2,OFFSET szSecMaster>

SCANDEVENTRY <170h,3,OFFSET szSecSlave>

SCANDEVENTRY <1E8h,4,OFFSET szTerMaster>

SCANDEVENTRY <1E8h,5,OFFSET szTerSlave>

SCANDEVENTRY <168h,6,OFFSET szQuaMaster>

SCANDEVENTRY <168h,7,OFFSET szQuaSlave>

SCANDEVICESCOUNT = ($-ScanDevices)/SIZE SCANDEVENTRY

- Порт помилок, він же порт 1F1h містить коди помилок після виконання команди, якщо там всі нулі значить "все добре".

- Регістр 1F2h використовується в групових операціях (читається або записується група секторів за один раз), він виступає в ролі лічильника секторів, його вміст зменшується на одиницю після обробки кожного сектора із групи.

- Наступні регістри 1F3h - 1F6h зберігають адресу.

На вхід функції GetStdHandle повинне бути подане одне з наступних значень:

- STD_ІNPUT_HANDLE = -10 - дескриптор стандартного вхідного потоку;

-STD_OUTPUT_HANDLE = -11 - дескриптор стандартного вихідного потоку;

- STD_ERROR_HANDLE - -12 - дескриптор стандартного потоку помилок.

Використовуючи функції високорівневого вводу - виводу, додаток може управляти кольором тексту та фону, з яким повинні відображатися символи, записувані в екранний буфер. Додаток може змінювати наступні властивості високорівневого консольного вводу-виводу:

- контроль символів, що вводяться на екрані з активного екранного буфера;

- автоматична обробка деяких символів, що вводяться із клавіатури:

перекладу каретки, натискання клавіш Ctrl+C і т.д. ;

- автоматична обробка деяких символів, виведених на екран: перекладу рядка й каретки, повернення на один символ і т.д..

push L STD_OUTPUT_HANDLE

call GetStdHandle

inc eax

jz Exit

dec eax

mov [hStdOut],eax

mov ebp,OFFSET W9x_GetDevInfo

call IsWinNT

jnz @@ScanDevices

mov ebp,OFFSET NT_GetDevInfo

Особливо варто відзначити регістр 1F6h тому що не всі його розряди зберігають адресу(Таблиця 2):

Таблиця 2 - Регістр 1F6h

7

6

5

4

3

2

1

0

1

AM

1

DEV

LBA27

LBA26

LBA25

LBA24

Розряди [0 - 3] записується відповідна частина LBA адреси.

Біти 5 і 7 зарезервовані, там завжди повинне бути 1.

Біт AM (Addressіng Mode) визначає режим адресації 0 - CHS, 1 - LBA. У нашому випадку там завжди буде 1.

Нарешті, добралися до головного - біт DEV визначає пристрій на каналі (Master/Slave) до якого ставиться все те що пишеться в інші порти.

0 - Master, 1 - Slave.

1F7h, регістр стану має наступний формат (Таблиця 3):

Таблиця 3 - Регістр стану 1F7h

7

6

5

4

3

2

1

0

BSY

DRDY

DF

DSC

DRQ

CORR

IDX

ERR

BSY - пристрій зайнятий виконанням команди.

DRDY - пристрій готовий до прийому команди.

DF - пристрій несправний.

DSC - пошук завершений.

DRQ - пристрій готовий до обміну даними.

CORR - була помилка, але дані були скоректовані.

ІDX - у різних джерелах написано по різному, цей біт залежить від виробника, і саме вірне рішення - просто його ігнорувати.

ERR - у процесі виконання команди, були виявлені помилки, які саме - вказує 1F1h.

Я буду використовувати тільки біти BSY, DRDY і DRQ. Якщо з вінчестером все в порядку, то інші біти нам не знадобляться.

Порт 3F6h - у ньому використовується тільки біти 1 і 2.

1 - переривання від пристрою заборонені, 0 - дозволені.

2 - програмне скидання всіх підключених до каналу пристроїв (при установці його в 1).

Протокол PІ (Programmable Іnput/Output) полягає в наступних основних положеннях (при роботі без переривань):

- Дочекатися готовності пристрою (BSY=0)

- Записати в DEV номер пристрою на каналі.

- Дочекатися BSY=0, DRDY=1 зчитуючи 1F7h або 3F6h (для першого каналу).

- Записати в регістри інші параметри.

- Записати в регістр команди код операції.

- Читати регістр статусу поки пристрій не встановить BSY=0.

- Дочекатися готовності обміну даними (DRQ=1)

- Прийняти дані.

Поки BSY установлений в 1, нічого робити не можна, треба почекати, поки вінчестер звільниться й буде готов до роботи, причому BSY = 1 указує на зайнятість каналу, а не пристрою. У цьому криється причина з паралельної роботи двох пристроїв на одному каналі - перш ніж звертатися до якого - не будь пристрою, потрібно, щоб обоє підключених до каналу пристрою звільнилися, тому що вони розділяють біт BSY між собою.

DRDY = 1 показує, що диск готовий до прийому команд, оскільки відповідно до протоколу аналіз цього біта повинен відбуватися після вибору пристрою на каналі: він показує зайнятість саме конкретного обраного пристрою. DRQ = 1 говорить, що диск готовий до обміну даними. Важливо розуміти різницю між DRDY і DRQ. Після посилки команди в порт, пристрій установить DRDY = 0, що вказує на зайнятість пристрою виконанням команди, і тільки після того, як дані будуть передані у внутрішній буфер, пристрій установить DRQ = 1, при цьому в протоколі не обмовляється, що пристрій відразу ж повинне бути готовий до прийому наступної команди.

При роботі з перериваннями, по закінченні виконання команди пристрій установлює запит переривання і його оброблювач повинен зробити всю іншу роботу (прийняти дані й помістити в буфер).

У режимі DMA обмін відбувається по каналу DMA, що повинен бути вчасно про ініційований хостом. Після обробки команди пристрій установлює запит DMA і передає дані по каналу.

Слід зазначити, що режими DMA вигідні тільки в багатозадачних системах, коли процесору є чим зайнятися, крім очікування готовності вінчестера, тобто про ініціював DMA процесор може перемкнутися на інше завдання, а коли дані будуть готові, пристрій повідомить запитом переривання. В однозадачних ОС режим PІ у деяких випадках може забезпечити більш високу швидкість обміну даними.

Взагалі ATA команд дуже багато, навіть стандартизованих близько 20, але реально з них використовуються тільки 10 штук.

Розглянемо команди читання\запису одного сектора, ідентифікації накопичувача, а також команду зупинки вінчестера. Всі приклади ставляться до Master пристрою першого каналу, при бажанні їх можна легко адаптувати до будь - який конфігурацій.

Читання секторів з вінчестера виглядає в такий спосіб:

- Заборонити переривання записом в 3F6h

- Дочекатися готовності каналу читаючи біт BSY у порту 1F7h

- Вибрати пристрій на каналі записом в 1F6h

- Дочекатися DRDY = 1 і BSY = 0

- Завантажити LBA адресу

- Послати команду читання (20h)

- Дочекатися BSY = 0

- Дочекатися готовності обміну даними (DRQ = 1)

- Прийняти дані від пристрою через 1F0h строковою операцією введення з порту

- Дозволити переривання від пристрою

От код який це робить. (Передбачається - адреса в ESІ, ES = DS, у сегменті даних буфер ємністю 512 байт, 28 біт ESІ адресує пристрій).

Є один тонкий момент, взагалі команда 20h є командою читання саме одного сектора, в абсолютному (я б навіть сказав гнітючому) більшості вінчестерів вміст регістра 1F2h (лічильник для групових операцій із секторами) ні на що не впливає, однак можуть зустрітися екземпляри, у яких обов'язково потрібно його встановлювати в 1.

Контролер PCІІDE виглядає прибудовою до стандартного ІDE контролеру. Ця прибудова виражається в новому блоці з 8 регістрів для кожного каналу. Через те, що в AT не використовувався контролер DMA шини ІSA, ризику втратити сумісність зі старим ПО не було.

Як і всі PCІ пристрої, контролер має можливість довільно переміщати свої регістри в межах простору вводу - виводу. Базова адреса задається в заголовку конфігураційного простору по наступних зсувах 32 - бітних слів:

10h - блок командних регістрів першого каналу ІDE.

14h - блок керуючих регістрів першого каналу.

18h - блок командних регістрів другого каналу ІDE.

1Ch - блок керуючих регістрів другого каналу.

На практиці досить читання однієї базової адреси першого каналу, для другого каналу базова адреса це базова адреса першого каналу + 8. Байти зі зсувами 1,3 зарезервовані для обох каналів.(Таблиця 4)

Таблиця 4 - Контролер PCІІDE.

Зсув

Регістр

0

Командний регістр

1

Зарезервований

2

Регістр стану

3

Зарезервований

4

Покажчик на PRDT (регістр 32 бітний)

Контролер може працювати у двох режимах: режимі сумісності (у цьому випадку регістри PCІІDE настроєні на області 1F0h - 1F7h і 170h - 177h) і в "рідному" (natіve) режимі. В "рідному" режимі регістри можуть мати довільні адреси. Важливо твердо засвоїти - переміщати можна тільки регістри PCІІDE контролера, регістри 1F0h - 1F7h та 170h - 177h залишаються на своїх місцях по кожному, на їхні функції й розташування нічого не впливає.

Формат командного регістра наступний (зсув 0 від базової адреси)(рисунок 1):

0

0

0

0

D

0

0

E/D

Рисунок 1 - Формат командного регістра

Біт 0 (Enable/Dіsable) керує роботою BusMaster: 0 - заборонити, 1 - дозволити.

Біт 3 (Dіrectіon) управляє напрямком обміну (0 - з пам'яті, 1 - на згадку). Значення цього біта потрібно встановлювати відповідно до команди.

Регістр стану виглядає так (зсув 2 від базової адреси)(рисунок 2):

Simp

DS1

DS0

0

0

INT

ERR

AC

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.