Програмування CMOS

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

ВСТУП

В епоху інтенсивного розвитку високих технологій і технологій Internet програмування для <заліза> відійшло на другий план. А між тим практично неможливо реалізувати нічого путнього без правильної конфігурації обладнання, зокрема CMOS - енергонезалежної пам'яті комп'ютера. У даній статті ми розглянемо пристрій CMOS, його структуру і можливості програмування. Відразу обмовлюся, що програмувати CMOS бажано з реального режиму ОС; під ОС Windows це робиться за допомогою спеціальних драйверів VxD або SYS. У Мережі існує достатньо джерел документації з побудови таких, тому я на них зупинятися не буду. Природно, що проводити все нижче перераховані дії по запису значень в CMOS слід з особливою обережністю, іноді (!) Можна втратити практично всі значення конфігурації ПК. У такому випадку необхідно очистити CMOS; як це зробити - дивіться у документації до вашої материнської плати. Також я буду використовувати мову асемблера для ілюстрації конкретних прикладів, а так само широко поширений відладчик DEBUG.EXE, що додається практично з кожною версією ОС Windows / DOS.

ДАНІ CMOS

CMOS є щось на кшталт бази даних, яка призначена для зберігання інформації про конфігурацію ПК. Однак, на відміну від реальної БД, яка має реальний образ на магнітному носії, CMOS зберігає свої дані на мікросхемі багаторазового запису (write many-read many). Програма установки BIOS SETUP при записі зберігає в ній свою системну інформацію, яку згодом сама ж і зчитує (при завантаженні ПК). Кожна комірка має розмір в 1 байт.

Таблиця даних має наступний вигляд

Адреса

Призначення

00H-0DH

RTC (Real Time Clock) - годинник реального часу (таймер)

0EH

Байт статусу процедури POST (результат завантаження ПК)

0FH

Байт завершення роботи ПК

10Н

Тип дисководу

11Н

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

12Н

Тип (и) вінчестера (якщо значення <15)

13Н

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

14Н

Байт конфігурації обладнання

15Н-16Н

Размр базової пам'яті

17Н-18Н

Розмір пам'яті за межею 1 Мб

19Н

Тип вінчестера З: (якщо значення> 15)

1АН

Тип вінчестера D: (якщо значення> 15)

1BH-20H

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

21H-2DH

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

2EH-2FH

Контрольна сума CMOS (від 10Н - 20Н)

30Н-31Н

Розмір розширеної пам'яті за межею 1 Мб

32н

Номер поточного століття в BCD нотації (наприклад 17Н)

33н

Інша інформація

34Н-3АН

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

Деякі адреси CMOS, захищені контрольною сумою. Тобто запис в діапазон адрес 10Н-20Н повинен супроводжуватися коригуванням значень у клітинках 2ЕН-2FH. Інакше можна отримати повідомлення про неправильного встановлення параметрів або про <всохлі> батареї CMOS. Контрольна сума являє собою 16-бітну суму всіх значень, записаних в осередки CMOS з 10Н по 20Н. У осередок 2ЕН пишеться старший байт суми, а в 2FH - молодший. У будь-якому випадку, моя вам порада - спочатку збережіть старе значення CMOS (та й взагалі всі значення CMOS) а потім просто віднімайте або складайте потрібні значення з отриманою контрольною сумою. Так простіше.

ЧИТАННЯ І ЗАПИС CMOS

Читання: для читання значення з клітинки, запишіть значення в порт 70Н адресу цікавить вас осередку, а потім вважайте значення з порту 71Н - це і буде цікавлять вас значення. Наприклад отримаємо номер поточного століття (MS Debug):

Нумерація століть йде з 00Н (якщо так можна виразитися), тому значення 20Н цілком адекватно.

Запис: для запису значення в CMOS запишіть значення адреси в порт 70Н, а потім нове значення в порт 71Н. Встановимо для прикладу нове значення століття (так би мовити <машина часу> J):

Тепер щоб повернути все як було, введемо в порт 70Н значення 32н, а в 71Н - 20Н:

Нехай вас не бентежить відсутність символу "Н" після цифр - всі значення в MS Debug йдуть тільки в шістнадцятковому вигляді.

ДОКЛАДНІШЕ Про адреси CMOS

Отже, зупинимося на докладному розгляді значень, що зберігаються в CMOS.

Адреса (HEX)

Опис

00Н

Поточна секунда

01Н

Сигнальна секунда

02Н

Поточна хвилина

03Н

Сигнальна хвилина

04Н

Поточний годину

05Н

Сигнальний годину

06Н

Поточний день тижня (1 - Неділя)

07Н

Поточний день місяця

08Н

Поточний місяць

09Н

Поточний рік (тільки 2 останні цифри, напр. 98)

Всі значення RTC зберігаються в BCD форматі як 2 полубайта але в десятковому форматі. Наприклад 31 (dec) зберігається як 31 (hex).

Адреса (HEX)

Опис

0AH

Регістр статусу RTC (# A): Біти 0-3 - Селектор рівня (встановлені в 0110) Біти 4-6 - 22-рівневий дільник (встановлений в 010) Біт 7 - У даний момент проводиться оновлення (якщо == 0 то дозволено читання )

0BH

Регістр статусу RTC (# B): Біт 0 - Включений режим економії часу (літнє); (0 = стандартне час; за умовч. = 0) Біт 1 - 12 або 24 годинний режим часу (якщо 0 то 12 годинний; за умовч. = 1) Біт 2 - Режим BCD дати (1 = двійковий, 0 = BCD, за умовч. = 0) Біт 3 - Включити Square Wave (1 = включити; за умовч. = 0) Біт 4 - Включити переривання поновлення (0 = відключити, за умовч. = 0) Біт 5 - Включити сигнальне переривання (0 = відключити, за умовч = 0) Біт 6 - Включити періодичне переривання (0 = відключити, за умовч. = 0) Біт 7 - UIP прапор (Update In Progress ), 0 - можна читати CMOS

0CH

Регістр статусу RTC (# С): в основному не використовується

0DH

Регістр статусу RTC (# D): якщо біт 7 = 1, то харчування CMOS включено, якщо біт 7 = 0 - то батарея розряджена.

0EH

Байт діагностики завантаження (POST Byte): Біти 0 і 1 завжди рівні 0. Біт 2 - Час правильне (1 = вірно, що сьогодні не 30 лютого) Біт 3 - Невірний завантажувальний жорсткий диск (1 = не можна завантажитися з вінчестера) Біт 4 - Помилка розміру RAM (1 = POST знайшла невірний розмір RAM) Біт 5 - Невірна запис про обладнання (1 = невірне обладнання) Біт 6 - Невірна контрольна сума (1 = невірна сума CMOS) Біт 7 - Втрата живлення батареї CMOS (1 = втрата живлення)

0FH

Байт статусу завершення роботи ПК. Застосовується найчастіше після перезавантаження ПК процедурою SETUP. Значення можуть бути наступні: 0, якщо була перезагру. по натисканні Ctrl-Alt-Del або несподіваний перезапуск. У будь-якому випадку - процедура POST НЕ виконується 1 перезапуск після визначення розміру пам'яті 2 перезапуск після тесту пам'яті 3 перезапуск після виявлення помилки пам'яті 4 перезапуск за запитом завантажувача ОС 5 перезапуск внаслідок далекого переходу (FAR JMP) на адресу 0:0467 Н 6,7,8 перезапуск після перевірки захищу. режиму 80286 9 перезапуск після перепризначення блоку пам'яті (ф-я 0х87 перерву. 0х15)

10Н

Байт типу дисковода: Біти 0-3: перший дисковід Біти 4 - 7: другий дисковод У будь-якому випадку, значення бітів можуть бути наступними: 0000 = 0 = дисковод не встановлений 0001 = 1 = 360 До 0010 = 2 = 1,2 Мб 0011 = 3 = 720 До 0100 = 4 = 1,44 Мб Наприклад: 24Н - це диск А: розміром 1,2 М і диск В: розміром 1,44 М

11Н

РЕЗЕРВ

12Н

Тип вінчестера (для дисків З: і D:, коли байт знаход. У проміжку від 1 до 14). Біти 0-3: перший вінчестер Біти 4 - 7: другий вінчестер У будь-якому випадку, значення бітів можуть бути наступними: 0000 = 0 = диск не встановлений другое_значеніе = тип диска 1111 = див. адреси 19Н і 1АН

13Н

РЕЗЕРВ

14Н

Байт обладнання: Біт 0 = 1, якщо присутній дисковод (и) Біт 1 = 1, якщо присутній матем. співпроцесор Біти 2, 3 не використовуються і рівні 0 Біти 5, 4 - основний відеоадаптер: · 00 - немає або EGA · 01 - 40 * 25 EGA, CGA, VGA · 10 - 80 * 25 EGA, CGA, VGA · 11 - монохромний (ч / б) Біти 6, 7 - кількість дисководів - 1 (00 = 1, 01 = 2, 10 = 3, 11 = 4)

15Н, 16Н

Базова пам'ять 15Н - молодший байт 16Н - старший байт Можуть бути рівні: · 0100Н = 256К · 0200 Н = 512К · 0280Н = 640К

17Н, 18Н

Додаткова пам'ять понад 1 Мб 17 Н - молодший байт 18 Н - старший байт Розмір записаний в Кб.

19Н

Тип диска № 0 (С:), якщо значення адреси (12 Н & 0FH) = 0FH

20Н

Тип диску № 1 (D:), якщо значення адреси (12Н & F0H) = F0H

1BH-2DH

РЕЗЕРВ

2ЕН, 2 FH

Контрольна сума значень адрес від 10Н по 20Н · 2ЕН - старший байт · 2FH - молодший байт

30Н-31Н

РЕЗЕРВ

32н

Століття у форматі BCD

33H

Інша інформація (спеціфіч. для машин AT/PS-2 класу)

34Н-3FH

РЕЗЕРВ. Як показує практика, ця область найчастіше вільна від системних даних (але не завжди!), Тому можете записувати сюди свої особисті дані (але не багато ) для збереження між перезавантаженнями)

Отже, ми розглянули CMOS, його логічне будова і структуру. Звичайно, в таблиці наведено лише загальні для всіх машин значення параметрів CMOS, але тим не менш навіть з цим «набором» можна зробити багато «чого», наприклад підключити відключений адміністратором дисковод (див. адреси 14Н, 10Н, 2ЕН, 2АР) і т . д. У будь-якому разі: будьте вкрай обережні, не робіть нічого такого, чого потім ви не зможете повернути назад. Все ж таки буду сподіватися, що дана стаття принесе вам користь.

Абревіатура CMOS (КМОП) розшифровується як Complement Metal Oxide Semiconductor (комплементарна структура метал оксид напівпровідника) - це одна з технологій виготовлення мікросхем. Електронне запам'ятовуючий пристрій, для якого характерна висока щільність розміщення елементів і мале споживання енергії.

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

Але стосовно до персональних комп'ютерів під абревіатурою CMOS стали розуміти саме CMOS RAM, тобто ОЗУ, виконане за технологією КМОП. КМОП - датчики виконують функцію реєстрації попадання променя світла на кожен із сотень тисяч елементів вибірки. У кристалах КМОП можна реалізувати безліч інших

CMOS-ПАМ'ЯТЬ

Програмних засобів BIOS досить, щоб зробити первинні перевірки і підключити стандартні пристрої, такі як клавіатура і монітор. Слово стандартні ми виділили спеціально. Справа в тому, що монітор і клавіатура у вас можуть бути дуже навіть нестандартними. Але на даному етапі це не має значення - просто комп'ютер поки розглядає їх як стандартні. Йому ще не відомі всі їх властивості, і він вважає, що клавіатура і монітор в нас такі, які були в ходу двадцять років тому, за часів перших комп'ютерів. Цим забезпечується гарантія того, що ви хоч щось побачите на екрані, незалежно від тієї моделі монітора, яка є у вашому розпорядженні. BIOS припускає, що монітор у нас чорно-білий - саме тому перші повідомлення на екрані проходять в чорно-білому режимі.

Проте довго працювати лише тільки із стандартними пристроями комп'ютер не може. Йому пора б дізнатися про те, що у нього є насправді. Справжня інформація про пристрої комп'ютера записана на жорсткому диску, але і його ще треба навчитися читати. У кожної людини може бути свій унікальний жорсткий диск, не схожий на інші. Питається, звідки програми BIOS дізнаються, як працювати саме з вашим жорстким диском?

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

Установки CMOS, зокрема, необхідні для завдання системної дати і системного часу, при встановленні або заміні жорстких дисків, а також при виході з більшості аварійних ситуацій. Настройкою BIOS можна, наприклад, задати пароль, завдяки якому стороння людина не зможе запустити комп'ютер. Втім, цей захист ефективна тільки від дуже маленьких дітей.

Щоб змінити установки, що зберігаються в CMOS-пам'яті, в ПЗУ міститься спеціальна програма - SETUP. Щоб її запустити, треба в самий перший момент після запуску комп'ютера натиснути і утримувати клавішу DELETE. Навігацію в системі меню програми SETUP виконують за допомогою клавіш управління курсором. Потрібні пункти меню вибирають клавішею ENTER, а повернення в меню верхнього рівня - клавішею ESC. Для зміни встановлених значень служать клавіші Page Up і Page Down

Для живлення енергонезалежній пам'яті конфігурації комп'ютера (CMOS) на системній платі встановлюється літієва батарейка. Терміну її роботи вистачає на кілька років. Про необхідність її заміни говорить повідомлення "CMOS Battery State Low" або "CMOS Checksum Error" під час виконання процедури POST (Power On Self Test) - самотестування при включенні. Першими ознаками заміни батареї можуть бути зупинка внутрішнього годинника-календаря або втрата установок SETUP при вимиканні машини.

На старих материнських платах батарейка представляла собою звичайно синій барило, припаяний до плати. В останні роки вони виходять з ладу на системних платах 286 і 386 машин. При цьому втрачається інформація CMOS, але що набагато небезпечніше, може витекти електроліт, викликаючи замикання ланцюгів і раз'еданіе елементів системної плати. Протекшіх батарейку треба обов'язково випаяти, а плату на тому місці очистити щіточкою і промити. Знайти нову батарейку такого ж розміру буває складно, але її можна замінити на будь-яку іншу з аналогічним напругою (зазвичай 3-4,5 В). Нову батарейку можна підключити до контактів раз'ема зовнішньої батареї (Ext. Bat.), Що є на більшості системних плат (см рис.1б), знявши перемичку живлення від внутрішньої батареї і обов'язково дотримуючись полярності підключення. Існують зовнішні батарейки для PC, укладені в пластмасові корпуси з проводами підключення. Цей корпус за допомогою "липучки" закріплюють у зручному місці. Можливе застосування простого і надійного саморобного варіанту багаторазового користування: у дерев'яну білизняну прищіпку вколюється дві металеві канцелярські кнопки з припаяними проводами, і ними затискається батарейка-таблетка (наприклад, типу 2732), суворо дотримуючись полярність. Закріпити таку конструкцію в корпусі досить просто.

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

На сучасних системних платах частіше застосовується батарейка-таблетка в спеціальному тримачі, яку легко замінити.

Роз'єм підключення зовнішньої батареї використовується і для обнуління CMOS. Така необхідність може виникнути, наприклад, при втраті вхідного пароля в BIOS Setup (або при необхідності його скидання). Зазвичай для цього достатньо при вимкненому комп'ютері на кілька хвилин переставити перемичку в положення, показане на рис. 1в.

Рис. 1. Підключення зовнішньої батарейки і обнуління CMOS: а - робота від внутрішньої батарейки, б - від зовнішньої, в - обнуління CMOS

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

Обнуленням CMOS слід користуватися з обережністю. Інформація про конфігурації, яка там зберігатися, відновлюється відносно легко - проблеми можуть виникнути тільки з нестандартними параметрами жорстких дисків, заданими вручну. Крім інформації Setup, в CMOS може бути записаний ключ прив'язки будь-якого прикладного ПЗ до конкретної системної платі, і при обнулення CMOS ключ буде загублений. Так, наприклад, легко "вбити" легальну копію пакету "1C-Бухгалтерія". Для страховки від подібних неприємностей після встановлення подібних захищених продуктів слід зберегти у файлі вміст CMOS. Це дозволяє зробити, наприклад, тестовий пакет QAPlus.

Однак, бувають випадки, коли цими штатними способами пароль не скинути. Тоді є ще один спосіб: закоротити висновки мікросхеми CMOS-пам'яті при відключеному (!) Харчуванні і вимкненою батарейці. Для цього шматочок фольги прикладається зверху до мікросхеми і акуратно пригладжується ногтемк висновків по периметру корпусу. У старих материнських платах 286, 386 і деяких 486 мікросхема CMOS-пам'яті має 14 - 16 контактів. У цих випадках досить закоротити контакти харчування (зазвичай 7 з 14 для 14-контактних мікросхем і 8 з 16 для 16-контактних мікросхем).

Періодичне руйнування інформації CMOS при включенні харчування може бути викликане не батареєю, а недостатньою затримкою сигналу Power Good щодо моменту встановлення живлячої напруги або, навпаки, зайвої затримкою цього сигналу після вмикання джерела. Визначити причину досить просто. Якщо перед включенням харчування утримати цю кнопку Reset і відпустити її тільки через кілька секунд, цим у більшості випадків імітується збільшення затримки сигналу Power Good. Якщо дані CMOS все одно губляться, потрібно перевірити версію затримки при відключенні. Для цього кнопку Reset слід натискати перед вимиканням живлення і утримувати ще кілька секунд - цим імітує прискорення зняття сигналу Power Good. Якщо при такому способі виключення дані CMOS зберігаються, справа в великій затримці при виключенні. В обох випадках потрібна заміна або ремонт блоку харчування.

Програмування CMOS

Д. Крупорніцкій

Так би мовити DISCLAIMER

Вся інформація, представлена ​​в даній статті несе тільки інформативні мети. Автор не несе відповідальності за некоректне використання наведених нижче фактів.

Посилання (links):
  • mailto: diam@softhome.net
  • Додати в блог або на сайт

    Цей текст може містити помилки.

    Програмування, комп'ютери, інформатика і кібернетика | Стаття
    49.1кб. | скачати


    Схожі роботи:
    Основні поняття математичного програмування Побудова моделі задачі лінійного програмування
    Програмування мовою С з використанням обєктно-орієнтованого програмування
    Програмування мовою С з використанням об єктно орієнтованого програмування
    Програмування
    Програмування в СІ
    Програмування
    Лінійне програмування 2
    Цілочислове програмування
    Введення в програмування
    © Усі права захищені
    написати до нас