Ответы на эти и многие другие подобные вопросы обычно остаются тайной и для большинства пользователей, и для многих ремонтников (даже имеющих весьма солидную практику). В то же время, с постоянным усложнением современных систем знание данных механизмов становится всё более весомым и просто для настройки, и, тем более, для ремонта материнских плат.
Кто "первый"?
- Странный вопрос - скажете. - А кто же еще - процессор, кто у нас главный? И что, есть еще кто-то в очереди?
Вынужден разочаровать: процессор - самое бесправное существо в системе, он стартует самым последним. А с учетом растущего семимильными шагами интеллекта "периферии" (в первую очередь - видеокарт) и чипсетов, вообще, рискует со временем превратиться в "модуль аппаратной поддержки Windows". :)
Всё просто и сложно одновременно. Прогресс делает свое чёрное дело. Каждый отдельный компонент компьютера усложняется в геометрической прогрессии. В результате, по сути, каждый такой элемент начинает приобретать черты того же компьютера, только "попроще". А какая у компьютера главная микросхема? Только не надо опять про процессор! Конечно же - BIOS. :) Итого, для настройки каждого отдельного элемента платы требуется где-то сохранять (причем желательно/обязательно - энергонезависимо) настройки сего элемента. А много пригодных для этого "мест" у компьютера? Верно, опять - биос. В результате и получается не совсем очевидный, но факт - современная система целиком и полностью зависима от BIOS. Нет, конечно, это было верно и раньше, однако во времена, "когда деревья были большими", мы знали, что от биоса требуется лишь, чтобы по адресу FFFF:FFF0 процессор мог взять первую команду POST. А теперь... Что же "теперь"?
Рассмотрим ситуацию на примере AMD K7 систем. Получив в наследие от Alpha 21264 шину EV6, оные, кроме гигантских плюсов, позволивших впоследствии выбраться "из грязи в князи" и засунуть на несколько лет за пояс саму Intel, получили и отсутствовавющую ранее потребность в инициализации самой шины (здесь и дальше под этим подразумевается установка её - шины - характеристик из энергонезависимой памяти ). А кто должен этим заниматься? Процессор? А каким образом? Ведь мы пару абзацов назад уже выяснили, что процессор - самый "последний", а шину-то как раз нужно проинициализировать в первую очередь. В результате получаем, что до старта процессора кто-то должен "всё подготовить". Так северному мосту пришлось "резко поумнеть". Теперь, после получения PWR_GOOD, через небольшую задержку с северного моста снимается #NB_RESET (сигнал сброса северного моста), в то же время процессор продолжает "отдыхать" (сигнал #RESET не снимается). За это время (до "просыпания" процессора - снятия также и #RESET-а) северный мост должен оперативненько вытащить из биоса нужные ему (т.е. мосту, а не процессору) настройки и подготовиться к запуску. Как только процессор, наконец, зафункционирует, северный мост посылает ему пакет данных (SIP), в котором задаются основные параметры самого процессора (в том числе КУ). И только после отработки этого пакета, северный мост, наконец, вынимает первую команду на исполнение процессору. Обычно (раньше) она находилась по адресу FFFF:FFF0, однако нонче это совершенно не обязательно (в чем можно самому убедиться, просто дизассемблировав "концовку"-boot block любого современного биоса).
Инициализация северного моста.
Попробуем разобраться "на пальцах". Зачем так сделали? Тут понятно: умной системе - умные железки, умным железкам - нужно как-то инициализироваться. Вот это они и делают в самом начале работы, еще в "доресетный" период. А что выйдет, если у северного моста "не получится" проинициализироваться корректно? А ничего и не будет - нули на посткарте. Именно подобную ситуацию мы частенько получаем, когда кажется, что "ну, всё же нормально - биос на месте, процессор и разъём и т.п.", а "не идёт". Кроме того, ежели в системе много всяческих "наворотов" (читай - как у Asus), то запросто может случиться ситуация, когда северный мост откажется работать с флэшками "не его" типа, предпочитая лишь какой-то конкретный тип оных (читай SST). Кроме того, подобные технологии (типо-флэше-зависимость) позволяет продвинутым производителям защищать свою продукцию от копирования "сторонними китайскими платостроителями". Более подробно ситуацию с вариантами защиты своих схемотехнических решений от плагиата рассмотрим в отдельной статье.
Роль Super I/O Chip (SIO)
Обычно все привыкли, что неисправность мультика проявляется на "более позднем" этапе (в процессе POST), обычно это POST-код 05h для Award и т.п. Однако в свете обрисованной выше инициализации моста явно становится видна зависимость последней уже и от мультика, который также напрямую связан с функционированием биоса. А в результате получаем, что в случае проблем с мультиком, мы можем получить не только "обычные 05" на посткарте, но и "непонятные" нули, потому как северный мост не сможет корректно пройти необходимую инициализацию. Соответственно, берем на заметку - при исправности цепей питания, биоса и мостов, нули на посткарте могут быть в том числе и из-за проблемного мультика.
Например у очень популярных м/с IT8712F-A, а также продолжений этой линейки IT8716F и IT8718F, в составе GPIO регистров часть сконфигурирована (по умолчанию) и используется производителями под порты VID-input и VID-output. Имеется флаг разрешения/запрещения копирования из Input в Output (default 0. VID output from input). Таким образом при старте системы на ШИМ-регулятор подается комбинация VID-ов не напрямую с процессора, а через "посредника".
А у остальных более новых плат такой-же процесс инициализирования? У шины P4?
Меня тоже интересует подробный процесс старта современных плат, особенно плат под LGA775 от Asus, серия P5. Кто нибудь знает?
onik1318
С вашими проблемами нужно не интересоваться процессом старта, а заниматься диагностикой. Судя по количеству полезных данных в вашей теме, вы ей не занимаетесь.
maco : "onik1318
С вашими проблемами нужно не интересоваться процессом старта, а заниматься диагностикой"
А как onik1318 может "заниматься диагностикой" , если не знаком с "процессом старта"
Вот в качестве учебы создал темку rom.by/forum/Uchimsja_Zapusk_MV
Не Asus , не LGA775 , но достаточно современно
Если хорошо пойдет , продолжим ?
Этого для начала обычно хватает, если кому-нибудь захочется заняться анализом.
Не FFFF:FFF0, а F000:FFF0!
F000:FFF0 - Seg:Off ---> 1 Mbyte only.
Как-то так
F000h:FFF0h - верно для 8086. Сейчас реально все сложнее, но на уровне программной модели - совместимо (например, в смысле обеспечености того, что в реальном режиме JMP на F000:FFF0 попадет на первую инструкцию BIOS, т.е. C-A-D сработает как надо). А вот после аппаратного RESET задачей отдать процессору первую инструкцию там, где он ее ждет, занимается чипсет. А после первого JMP (который сразу) - мы имеем вменяемые CS:IP, указывающие на отмапленный в первый мег адресного пространства кусок BIOSа.
В принципе вообще конкретное состояние адресных ног может не иметь значения. К примеру, просто договорится, что по по первому (или N первых) циклу шины по обращению к памяти (по любому адресу) после аппаратного RESET сдается содержимое флешки с определенного адреса (в смысле адреса во флешке)... Ну, это я фантазирую уже.
А кому счас легко...
Можно еще упомянуть о CS selector/base (initial value - F000/FFFF0000).
>Ошибаетесь. Именно FFFF:FFF0 - Hi:Lo.
Какое еще "Hi:Lo"? 32-битные
адресасмещения записываются без двоеточия.Впервые вижу такое разрезание смещений.
А двоеточие отделяет сегмент/селектор от смещения.
не бейте сильно ногами - но я вам покажу Интел и мы его можем пообсуждать ...
здесь видно, что стартуем мы с FFFFFFF0L адреса (RESET-AMI.JPG)
и уже ч/з пару команд (отчитавшись в порт 80 что "МЫ-ТУТ") проверяем
холодный ли ресет, т.е. на правильность кода по адресу F000:xxxxh
а смысл собственно в чем ... а в том, что при холодном ресете код
и по FFFFFFF0L и F000:xxxxh ОДИНАКОВ , но только до тех пор пока мы в конце (например перед jmp в MBR и пр.) не подкинем 64к RT кода в сегмент F000
если ресет холодный - придется инициализировать ВСЕ
иначе прыгаем (far16 ptr) в F000 сегмент (RT) т.е. все давно проинициализировано и "теплое"
RS:но это Интел, хотя и Atom+SCH (а в нем чипсет SCH инициализирует память ДО первой команды CPU)
... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки
64 кб bootblock'а или дизассемблированный текст (с комментариями) интереснее 160 кб картинок.
bios71 писал(-а): Одинаковость кода не спасает от первого обращения по FFFFFFF0 - это достаточно хорошо описано в документации.
"Одинаковость кода не спасает от первого обращения по FFFFFFF0 " - я собственно и сам в этом и глубоко убежден, иначе глупость получается, мы находясь в сегмнте F000 проверяем "а что в нем лежит?" , еслибы там был теплый код - то в нем по F000:FFF0 EA 5B E0 00 F0 jmp far16 ptr f000:e05B, т.е. то куда мы уходим из FFFFFF41L
и только сейчас заметил - far16
... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки
Отправить комментарий