Как прошить оперативную память ddr3 на компьютере
Для использования программы компьютер нужно запустить. Если установлена одна планка памяти, которая и неисправна, нужно добавить вторую заведомо рабочую. Лучшим вариантом будет планка памяти того же производителя и аналогичной ёмкости. Установите рабочую планку ближней к процессору, она будет первой и даст возможность запуститься системе.
Идеальный вариант, когда в компьютере установлены две одинаковые планки памяти, тогда информация с первой точно подойдет для второй. Если все вышеописанное не помогает, возможно, неисправна не оперативная память, а материнская плата.
Проверьте внимательно, возможно рядом с гнездами планок памяти есть вспухшие конденсаторы. В этом случае необходим другой ремонт. Если компьютер с исправной и неисправной памятью все же запустился можно приступать к прошивке планки.
Программа установки не требует, распакуйте архив на рабочий стол и запустите SPDTool.exe. Дальше в меню File выбираем пункт Read и Module 0: Installed. Программа прочитает установки исправной планки памяти. Нажмите закладку Timing Summaryдля более полной информации о параметрах.
Верхняя часть окна отображает содержимое микросхемы SPD EPROM, ниже полное название параметра с выпадающим списком вариантов для изменения. При выделении параметра его значение подсвечивается в верхней половине окна.
Сначала сохраните содержимое дампа памяти. Меню File пункт Save, например DDR2_xGB_Transcend.spd. Если первая планка памяти такая же, как и сбойная, эта информация понадобится для записи в неисправную память. Затем читаем содержимое неисправной планки памяти File -> Read -> номер модуля.
Теперь самый интересный вопрос, где взять дамп для сравнения или прошивки, если подобной планки памяти нет. Конечно на просторах интернета, введя в строку поиска тип памяти и ключевое слово “SPD”. Второй способ, можно сравнить значения параметров с планкой того же производителя, типа и с такими же чипами памяти но меньшей/большей ёмкости.
Часто бывает, что данные прошивки корректны, а свободные байты вместо 00 установлены в значение FF или наоборот. После изменения значений память корректно определяется и работает.
В любом случае, нужно точно знать, что изменяешь в прошивке. Ввод некорректных данных может привести к тому, что планка памяти перестанет определяться вообще и будет, недоступна для записи. В этом случае придётся демонтировать микросхему EPROM и прошивать на программаторе.
После прошивки компьютер необходимо перезагрузить и провести тестирование памяти, это описано в другом материале.
Я проапгрейдил старый ноутбук двумя модулями памяти 4GB DDR3-1333, но оказалось, что ноутбук совместим максимум с DDR3-1066. Что сделает настоящий мужчина? Конечно же, перепрошьёт EEPROM для ребиннинга DDR3 на более медленную модель!
Рабочее место. Справа Thinkpad для проведения перепрошивки, а слева проблемный MacBook Pro
Будьте очень осторожны. Очевидно, что вы можете повредить или навсегда заблокировать запись на свой DIMM. Возможные более тонкие неполадки, в том числе сбой логической схемы батареи, или материнская плата превратится в кирпич.
У меня 13-дюймовый MacBook Pro середины 2010 года. Его файловая система была повреждена при обычной перезагрузке, и дисковая утилита (из раздела восстановления) ничего не могла с этим поделать. Ну, я давно этого ждал: пришло время поставить SSD и добавить немного оперативной памяти.
Я купил SSD и мне повезло найти в горе электронного мусора пару сломанных ноутбуков с подходящими модулями оперативной памяти. Вставляем SSD и два модуля по 4 ГБ, запускаем Internet Recovery — и через час у нас должна быть рабочая система. Но нет. Загрузка просто зависает. Из-за чего? Наибольшее подозрение вызывают эти модули RAM, в конце концов, они же из мусора. Поэтому делаем то, что сделал бы любой: создаём USB-флэшку с memtest86 и запускаем её на ночь. Отлично, память в порядке. После многих часов с пробами разных методов установки для разных версий macOS наконец приходит открытие, что всё работает отлично, если просто вставить обратно старую память. 1
Истинной причиной сбоя является интегрированный графический процессор GeForce 320M, который использует общую память, то есть обычную RAM. Он может работать максимум с PC3-8500 (aka DDR3-1066, то есть с тактовой частотой DRAM 533 МГц), но контроллер системной памяти не знает об этом и повышает максимальную доступную скорость до 667 МГц (т.е. PC3-10600 aka DDR3-1333). У остальных компонентов нет проблем с этим, как и у GPU в режиме VESA (я думаю).
Я не слышал ни о каком другом оборудовании, которое отказывает в работе оперативной памяти, способной к более высоким скоростям, чем оборудование может использовать. Конечно, при покупке модулей памяти на рынке продавцы предупредили бы об этом нюансе. Это всё равно намного лучше, чем припаянная оперативка, как в ноутбуках Apple с 2012 года.
Разобравшись с причиной, я установил один оригинальный модуль PC3-8500 на 2 ГБ и один новый модуль 4 ГБ, и всё заработало. Но ребиннинг DDR3 казался хорошим проектом, поэтому я решил попробовать.
Конечно, я не собираюсь устанавливать Windows только для прошивки EEPROM и не собираюсь покупать причудливое программное обеспечение, если всё можно сделать вручную. Я думал, что задача явно должна выполняться в Linux, возможно, с некоторыми дополнительными инструментами. Я также не хотел устанавливать Linux на макбук только для этого. Поэтому мой старый надёжный Thinkpad X220 с NixOS стал идеальной площадкой для работ. Потребовалось немного времени для его обновления, потому что я не загружал машину год или около того.
Затем наступил черёд выбрать, какой модуль попробовать первым. У Thinkpad уже было два по 4 ГБ, и я нашел четыре модуля 4 ГБ, поэтому мне было из чего выбрать. Я решил начать с самого странного, производства Micron. Все остальные были Samsung. У одного была наклейка Lenovo.
Модули памяти поставляются с микросхемой EEPROM, которая содержит метаданные о модуле Serial Presence Detect (SPD). Сам формат простой, а доступ к EEPROM можно организовать через шину SMBus, которая по сути не отличается от I²C. 2
К счастью, для взаимодействия с SMBus и даже чтения EEPROM DDR3 есть драйверы ядра и готовое программное обеспечение.
Во-первых, для просмотра устройств на шине нужны i2c-tools и некоторые модули ядра.
$ nix-shell -p i2c-tools
$ modprobe i2c-dev
$ modprobe i2c-i801
$ i2cdetect -l
i2c-0 unknown i915 gmbus ssc N/A
i2c-1 unknown i915 gmbus vga N/A
i2c-2 unknown i915 gmbus panel N/A
i2c-3 unknown i915 gmbus dpc N/A
i2c-4 unknown i915 gmbus dpb N/A
i2c-5 unknown i915 gmbus dpd N/A
i2c-6 unknown DPDDC-B N/A
i2c-7 unknown DPDDC-C N/A
i2c-8 unknown DPDDC-D N/A
i2c-9 unknown SMBus I801 adapter at efa0 N/A
Здесь представляет интерес адаптер SMBus, в моём случае i2c-9 .
Пакет i2c-tools поставляется даже с инструментом decode-dimms для чтения информации о RAM в удобочитаемом формате. Для этого требуется модуль ядра eeprom .
$ modprobe eeprom
$ decode-dimms
$ modprobe -r eeprom
Вот часть выдачи для одного модуля памяти:
Довольно много данных. Часть показанной информации вычисляется из данных. Например, тайминги на стандартных скоростях (т.е. отсчёты цикла) вычисляются на основе параметров тайминга в наносекундном разрешении. Даже они сохранены как величины, кратные блоку развёртки (time base unit), установленному в другом месте на EEPROM, но это не относится к теме статьи. Данный модуль RAM выдаёт 7-7-7-20 на DDR3-1066, что соответствует стандарту DDR3-1066F JEDEC. Не спрашивайте меня, что такое JEDEC, но он быстрее, чем самый дешёвый DDR3-1066G.
Я потратил много времени на подтверждение моего вывода: при попытке ребиннинга памяти единственное важное число — это минимальное время цикла (tCK). Здесь это 1,5 нс, т.е. 667 МГц.
Давайте посмотрим на исходные данные.
Спецификации говорят, что минимальное время указано по адресу 0x0c. Посмотрим, оно в первой строке ( 00: ), в колонке c . Кстати, его значение тоже 0x0c или 12. Это кратно средней временной базе (MTB), которая представляет собой частное от деления значения в 0x0a на значение в 0x0b (в наносекундах). Здесь 1⁄8 нс. Так что 12 MTB соответствует 1,5 нс.
Чтобы опуститься до DDR3-1066, нам нужно 533 МГц, что составляет 1,875 нс или 15 MTB, или 0x0f. То есть мы хотим написать 0x0f по адресу 0x0c.
Поэтому нужно записать новое минимальное время цикла (0x0f) по адресу 0x0c и новую контрольную сумму в 0x7e как слово.
Теперь я знал, что писать, и наконец осмелился попробовать. Дрожащими руками я набрал y , нажал Enter для окончательного подтверждения и…
Ошибка. Погодите, что?
Будучи педантичным парнем, я начал изучать исходники i2cset, а также соответствующих модулей ядра. В какой-то момент я понял, что это может быть вызвано защитой от записи.
Я достал модуль памяти, посмотрел на него и узнал микросхему EEPROM. На ней написано 97B , 321 и некоторые другие вещи. Погуглив, я узнал, что это чип SE97B. Я просмотрел таблицу данных и несколько раз внимательно прочитал раздел о защите от записи. С помощью программ я предпринял несколько попыток удаления временной защиты от записи, но неудачно. Защита от записи, вероятно, была постоянной, поэтому я просто решил поискать модуль, у которого нет защиты от записи.
Забавный факт, кстати, заключается в том, что постоянная защита от записи включается записью чего-то на определённый адрес. Я не думаю, что i2cdetect нормально это делает, но запуск i2cget 9 0x30 , вероятно, установит постоянную защиту от записи, которая действительно постоянна. Я не пробовал этого делать.
С третьим модулем наконец-то операция получилась. Я рассчитал CRC и записал его вместе с временем цикла. После загрузки модуля ядра eeprom и запуска decode-dimms модуль выглядел как обычный 4GB PC3-8500. Когда я установил его в MacBook Pro, у меня, наконец, загрузилась система с памятью 8 ГБ.
DDR3 SODIMM после ребиннинга готов к работе в MacBook Pro
После: выглядит как DDR3-1066
Если сразу не видите разницу, то вы не копались в этих свалках так долго, как я.
Стоит этим заниматься? Финансово, конечно, нет!
Но это было весело и я многому научился. Понятия не имею, где именно можно применить эти знания, но я чувствую, что в определённый момент они понадобятся. И просто само ощущение, что вы можете правильно решить задачу, действительно приятно и даёт уверенность.
1. Моё предположение, что RAM будет работает на данном оборудовании, если оно проходит memtest86, было очевидно неправильным. Тем не менее, даже оглядываясь назад, предположение не кажется глупым. По опыту, не так уж редко встречается странная комбинация аппаратного обеспечения, из-за которой падает стандартный тест. ↑
2. Я недавно я узнал об использовании I²C в другом проекте. Думаю, что смогу считывать и записывать EEPROM на микроконтроллере Cortex-M с помощью собственной программы, но на практике пайка разъёма будет очень сложной, и написание кода — слишком большая работа, чтобы я этим заинтересовался. Тем не менее, я действительно счастлив, что теоретически способен на такое! ↑
Привет, Гиктаймс! Модернизация оперативной памяти — самый элементарный вид апгрейда в ПК, но лишь до тех пор, пока вам везёт, и вы не наткнулись на одну из многочисленных несовместимостей железа. Рассказываем, в каких случаях набор крутой оперативной памяти не «заведётся» на старом ПК, почему на некоторых платформах нарастить ОЗУ можно только с помощью «избранных» модулей и предупреждаем о других характерных причудах железа.
Об оперативной памяти мы знаем, что её много не бывает, и что, в зависимости от древности компьютера, выбирать приходится из очень старой DDR, старой DDR2, зрелого возраста DDR3 и современной DDR4. На этом руководство уровня «ну, вы главное покупайте, а там оно как-нибудь будет работать, или обменяете, если что» можно было бы завершить — пришло время рассмотреть приятные и не очень частности в подборе железа. То есть, случаи, когда:
- должно ведь работать, но почему-то не работает
- апгрейд нерентабелен или его лучше произвести «многоходовочкой»
- модернизацию хочется провести «малой кровью» в соответствии с потенциалом ПК
До: оригинальный DDR3-1333
DDR4 — самая быстрая, самая элементарная в апгрейде и покупке память
Язык не поворачивается назвать память DDR4 SDRAM новинкой — всё-таки процессоры Intel Skylake, первые массовые CPU с DDR4 на борту, вышли ещё 2015 году и успели заиметь «рестайлинг» в лице чуть более оптимизированных и эффективных в разгоне Kaby Lake. А в 2016 году платформу с поддержкой DDR4 продемонстрировала AMD. Правда, всего лишь продемонстрировала, потому что сокет AM4 предназначен для процессоров AMD «наконец-то серьёзная конкуренция» RyZEN, которые только-только рассекретили.
DDR4 ещё совсем юн, но для того, чтобы раскрыть потенциал четырёхканальных контроллеров платформы Intel LGA 2011-v3, уже сейчас нужна оверклокерская память
С выбором памяти для сверхновых платформ всё предельно просто — частота массовых модулей DDR4 стартует с 2133 МГц (они достижимы и на DDR3, но «в прыжке»), а объём — с 4 Гбайт. Но покупать «стартовую» конфигурацию DDR4 сегодня настолько же недальновидно, как довольствоваться DDR3 с частотой 800 МГц на заре её появления.
Встроенный в процессоры на базе платформы LGA1151 контроллер памяти двухканальный, а это значит, что по-хорошему нужно уложиться в пару модулей, ёмкости которых хватит для современных игр. Сегодня такой объём составляет 16 Гбайт (нет, мы не шутим — с 8 Гбайт ОЗУ в 2017 году уже не получится «ни в чём себе не отказывать»), а что касается тактовой частоты, правильным мейнстримом стала память DDR4-2400.
В серверных/экстремальных процессорах для платформы LGA 2011-v3 контроллер памяти уже четырёхканальный, а из всех разновидностей ОЗУ де-юре поддерживается только DDR4-2133, но разгон памяти на базе чипсета Intel X99 с Intel Core i7 Extreme даётся не легко, а очень легко. Ну а компьютеру для максималистов нужна память для максималистов — например, «жэстачайшая» HyperX Predator DDR4 HX432C16PB3K2 с тактовой частотой 3200 МГц. Согласно принципу «гулять так гулять» укомплектовывать платформу LGA 2011-v3 нужно всеми четырьмя модулями — только в этом случае четырёхканальный контроллер сможет реализовать весь скоростной потенциал подсистемы памяти.
Проконтролируйте, где находится контроллер
Если вы занимаетесь апгрейдом устаревшего компьютера не только из «любви к искусству», но и из практичных соображений, есть смысл сначала оценить, насколько жизнеспособна аппаратная платформа, прежде чем вкладывать в неё средства. Наиболее архаичные из актуальных — чипсеты для Socket 478 (Pentium IV, Celeron), которые простираются от платформ с поддержкой SDRAM PC133 (чипсет Intel 845, например), сквозь мейнстримные варианты на базе DDR, вплоть до поздних, разительно более современных чипсетов с поддержкой DDR2 PC2-5300 (Intel 945GC и др.).
Раньше контроллеры находились вне процессора, а теперь, так уж сложилось, работают изнутри
На этом фоне альтернативы из лагеря AMD того же времени выглядят менее пестро: все чипсеты под Socket 754, который приютил Athlon 64, представителей микроархитектуры K8, поддерживают память DDR, этот же тип памяти поддерживали процессоры для Socket 939 (Athlon 64 и первые двухъядерники Athlon 64 X2). Причем контроллер памяти в случае с чипами AMD был встроен в процессор — сейчас таким подходом никого не удивишь, однако Intel целенаправленно сохранял контроллер в чипсете, как раз для того, чтобы комбинировать процессоры для одного и того же сокета с новыми типами ОЗУ.
По этой причине последующие чипы AMD для сокета AM2/AM2+ с контроллером ОЗУ под крышкой процессора работали только с DDR2, а Intel с её «долгожителем» Socket 775 растянул удовольствие с DDR по самые помидоры DDR3! В более современных платформах оба производителя процессоров перешли на интегрированный в кристалл СPU контроллер и подобные фокусы поддержкой разномастной RAM отошли в прошлое.
Не бросайте стариков на произвол судьбы!
Вам не показалось — модернизация памяти и вправду тем хлопотнее, чем старее компьютер. Эта статья не охватывает все возможные трудности и частности в выборе памяти (это почти невозможно физически, и вы бы утомились одолевать сводку подобных мелочей целиком) Но это не повод отправлять всё ещё работоспособное железо на свалку истории.
Зажечь можно в любом возрасте
Потому что устаревшие с наших оверклокерско-энтузиастских колоколен ПК всё ещё могут сослужить добрую службу менее амбициозным пользователям или переквалифицироваться в домашний сервер/медиацентр, а уж очередную песню «бессмертному» Sandy Bridge, который отметил шестилетие и всё ещё хорош, сегодня исполнять не будем. Высокого вам быстродействия и попутного ветра в модернизации ПК!
Быстрая оперативная память — это хорошо, а быстрая оперативная память со скидкой — ещё лучше! Поэтому не упустите возможность приобрести до 8 марта любой из комплектов памяти HyperX Savage DDR4 и HyperX Predator DDR4 со скидкой 10% по промокоду DDR4FEB в Юлмарте. Памяти много не бывает, а производительной и крутой памяти для новых платформ ПК — тем более!
Для получения дополнительной информации о продукции Kingston и HyperX обращайтесь на официальный сайт компании. В выборе своего комплекта HyperX поможет страничка с наглядным пособием.
Некоторое время назад я поставил на один из своих компьютеров 16 ГБ памяти. На нём стоит материнка Foxconn P55MX с Core i5 750. Можно было бы и заменить этот старый CPU, но он пока нормально работает и делает всё, что мне нужно.
Вот что интересно. Материнская плата официально не поддерживает 16 ГБ RAM. Спецификации на вышеупомянутой странице указывают, что поддерживается максимум 8 ГБ. На плате только два слота, поэтому у меня возникло подозрение, что планки 8 ГБ просто были редкостью в то время, когда вышла материнская плата. Я всё равно решил попробовать. Во многих случаях материнские платы поддерживают больше RAM, чем официально заявляет производитель.
Я убедился, что установлена последняя версия BIOS (версия 946F1P06) и вставил две своих планки по 8 гигабайт. Затем загрузил Ubuntu 16.04, и всё работало отлично. Я решил, что моя теория о том, что плата поддерживает больше памяти, чем заявлено в документации, оказалась правильной, и забыл об этом. Мне нравилось работать с дополнительной RAM и я был счастлив, что игра окупилась.
Но несколько месяцев спустя я попытался загрузить Windows 10. В основном, компьютер работает под Linux. Лишь иногда нужно загрузить Windows, чтобы что-то проверить. Тогда-то и началось самое интересное.
Когда появился GRUB, я выбрал в меню Windows 10 и нажал Enter. Экран загрузки Windows ненадолго появился, а затем меня сразу приветствовал синий экран смерти.
Стоп-код: ACPI_BIOS_ERROR. Я много погуглил и выяснил, что суть в какой-то проблеме с ACPI-таблицами в BIOS. Среди прочего, таблицы ACPI сообщают операционной системе, как настроить оборудование. Попытка загрузки с установочного USB-накопителя Windows привела к той же ошибке. Так что, думаю, Foxconn не врал. Этот компьютер действительно не поддерживает 16 ГБ оперативной памяти. Возврат к 8 ГБ привёл к успешной загрузке. Тесты RAM тоже прошли отлично, так что дело не в плохой планке памяти.
Я попытался связаться с поддержкой Foxconn насчёт исправления BIOS, но не получил ответа. Адрес электронной почты указан на их сайте, но он не работает. Возможно, Foxconn больше не занимается материнскими платами. Похоже, они также не оказывают поддержки.
В этот момент обычный человек просто сдался бы, смирившись с 8 ГБ памяти или купив новый компьютер. Но я не хотел так легко сдаваться. Я знал, что теоретически компьютер может использовать 16 ГБ, потому что он отлично работал в Linux. Поэтому я начал изучать ACPI и экспериментировать с настройками BIOS.
Я нашёл интересный раздел BIOS, где можно играть с некоторыми настройками памяти. Одним из параметров была «функция переназначения памяти» (Memory Remap Feature). Она была включена. В документации по BIOS говорится, что опция позволяет «перекрывать память PCI» для мэппинга выше общей физической памяти. Поиск в интернете указал, что его нужно включить при загрузке в 64-разрядной ОС. Просто ради эксперимента я её отключил, и Windows реально загрузилась! Однако сказала, что может использовать менее 4 ГБ оперативной памяти. Но это было приятно: у меня появился способ попасть в Windows без необходимости физически удалять планку памяти.
В Ubuntu то же самое. С отключённой функцией переназначения памяти она ограничила меня менее чем 4 ГБ RAM. На данный момент я был уверен, что происходит какая-то проблема с отображением памяти. Я решил подробнее изучить ошибку ACPI_BIOS_ERROR и её причины — и наткнулся на этот отличный документ для отладки драйверов Microsoft, который объясняет проверку ошибок ACPI_BIOS_ERROR.
После соответствующей правки реестра я снова включил функцию переназначения памяти в BIOS и загрузил Windows. BSOD теперь показал четыре дополнительных кода в верхнем левом углу:
Прекрасно! Таким образом, параметр 1 равен 0x0000000000000002. В документации Microsoft написано, что параметр 1, равный 0x02, означает проблему с обработкой списка ресурсов для корневых шин PCI. Поскольку параметры 2, 3 и 4 выглядят как сумасшедшие значения, это, наверное, указатели. И если тут одни указатели, Microsoft говорит, что проблема в том, что область декодирования PCI перекрывается со списком областей памяти, возвращаемых интерфейсом BIOS E820.
Окей. Информации много, но можно с чего-то начать исследование. Я нашёл информацию, как вызов E820 BIOS предоставляет информацию об областях памяти. Затем вернулся в Linux и просмотрел всю информацию о запуске ядра с помощью команды dmesg, уделяя особое внимание E820 и ACPI. Вот что нашлось:
Позже я увидел это:
Итак, что получается. Linux работает с 16 ГБ, потому что замечает конфликт и игнорирует конфликтующий диапазон PCI, который предоставляет ACPI, в то время как Windows с отвращением поднимает руки и выблёвывает синий экран: «У вашего BIOS проблема!» Не могу винить Windows. Действительно, существует перекрытие, поэтому можно понять, что она путается.
В этот момент я не был уверен, стоит ли продолжать. Последние 768 МБ памяти с 0x400000000 до 0x42fffffffff сопоставлены с началом огромной области пространства памяти, которую материнская плата использует для PCI. Ясно, что если материнская плата ожидает там PCI, может произойти что-то действительно плохое. Таким образом, материнская плата поддерживает только 15,25 ГБ RAM, правильно?
Но… в Linux всё работает просто отлично, без поддержки этой дополнительной области сопоставления PCI! Что, если как-то изменить таблицы ACPI, чтобы большой диапазон PCI начинался с 0x430000000 вместо 0x400000000, то есть сразу после окончания физической RAM. Тогда конфликт бы исчез, а большая часть окна сопоставления PCI по-прежнему осталась доступной.
Я начал копаться в таблицах ACPI. К счастью, Linux позволяет очень легко делать дампы. Есть специальные инструменты для этого, но таблицы можно легко найти в sysfs:
Вот они все. Меня также обрадовало, что в GRUB есть возможность заменить ваши таблицы ACPI новыми версиями. Поэтому если выяснить, какая таблица задействована, можно установить новую версию этой таблицы с помощью GRUB. Теоретически, Windows будет счастлива этим.
Среди других инструментов, я использовал iasl, чтобы разобрать различные таблицы ACPI и найти значение 0x400000000 для замены. Скорее всего, это значение с обратным порядком байтов (little-endian) и размером 64 бита, так что я запустил binwalk для поиска по всем файлам таблиц:
Я сделал копию таблицы OEMB, заменив байт 0x00 непосредственно перед байтом 0x04 на 0x30, чтобы изменить значение на 0x430000000 (помните, что это обратный порядок). Эту изменённую копию я поместил в файл /boot/oemb.dat. Затем использовал GRUB для замены таблицы OEMB моей копией, временно вставив следующую команду в список команд загрузки (ввод буквы 'e' в GRUB после выбора Ubuntu):
Идея в том, что она говорит GRUB загрузить все таблицы ACPI, кроме таблицы OEMB, а затем загрузить содержимое /boot/oemb.dat и добавить его в качестве дополнительной таблицы. Это эффективно заменит старую таблицу OEMB новой таблицей OEMB.
Хорошо, я загрузил Linux и…
Проклятая ошибка никуда не делась. WTF? Я предположил, что диапазон PCI фактически определён где-то ещё, но я нигде не видел, чтобы определялось конкретное значение. Я убедился, что исправленная таблица OEMB действительно загрузилась, и вернулся к исследованию.
На этот раз я решил использовать iasl для декомпиляции таблицы DSDT. Отслеживание показало, что таблица DSDT должна содержать метод под названием _CRS , который отвечает за создание этой таблицы.
В файле .dsl я действительно нашёл метод _CRS, связанный с шиной PCI, и он выглядел довольно сложным. Таблица DSDT содержит фактический код, поэтому значения таблицы искать непросто. В моем случае метод _CRS оказался довольно сложным. Я интерпретировал код насколько смог и понял, что метод _CRS загружает информацию из другой таблицы в памяти, начиная с 0xCF78E064. Я снова посмотрел лог загрузки Linux в dmesg и нашёл это:
Ага! Он загружает информацию из таблицы OEMB. Моя догадка была верна с самого начала. Так почему же не сработала замена таблицы OEMB?
Я снова посмотрел на лог dmesg после замены таблицы OEMB. Чего я не понимал, так это того, что если вы пытаетесь изменить таблицы, то GRUB перемещает большинство из них, включая OEMB, в другую область памяти. Проблема в том, что таблица DSDT жёстко закодирована на просмотр адреса 0xCF78E064 для таблицы OEMB. Поэтому-то новая таблица не видна системе, она по-прежнему смотрит на исходную таблицу. Ух.
Первым порывом было изменить DSDT, чтобы перевести её на новое расположение таблицы OEMB, но я чувствовал, что в перспективе это плохая идея, потому что новые версии GRUB могут изменить местоположение в памяти, где хранится пользовательская таблица OEMB.
Я остановился на другой идее. В GRUB есть эквиваленты команд write_byte , write_word , write_dword и read_ . Что если GRUB на лету будет изменять исходную таблицу OEMB? В наше время BIOS'ы сжатые. Вероятно, таблицы загружаются в RAM, поэтому теоретически можно изменять значения.
Так я и сделал. В качестве временного теста я добавил следующую команду в последовательность загрузки GRUB:
Она заменяет байт 0x00 непосредственно перед байтом 0x04 на значение 0x30, преобразуя 64-разрядный начальный адрес PCI этого конечного диапазона в 0x0000000430000000. Я не обновлял контрольную сумму таблицы OEMB, потому что Linux и так скулил, что контрольная сумма неверна, поэтому, очевидно, ему всё равно.
Я перезагрузился в Linux и с тревогой проверил лог dmesg для PCI.
Успех! Окно 0x430000000-0xfffffffffff появилось как новое допустимое окно в списке, и предупреждение о конфликте исчезло. После проверки, что Linux всё ещё работает нормально, я попытался загрузиться в Windows с тем же хаком.
Сработало! Теперь я могу загрузиться в Windows с 16 ГБ RAM, если использовать GRUB в качестве загрузчика с вышеупомянутой командой write_byte. Загрузчик Windows 10, очевидно, не будет работать. И если я когда-нибудь переустановлю Windows, вероятно, придётся временно вытащить одну планку RAM, чтобы загрузился установщик. Но это работает!
Чтобы навсегда добавить исправление в GRUB, я создал файл /etc/grub.d/00_patchbios следующего содержания:
Затем сделал скрипт исполняемым и запустил sudo update-grub . Теперь патч автоматически применяется при запуске GRUB.
Честно не знаю, насколько это безопасно. Действительно ли материнская плата аппаратно запрограммирована смотреть на эти адреса для PCI или что-то ещё. Знаю только, что она проходит мои тесты RAM. Поскольку Linux отлично работает с 16 гигабайтами RAM, меня эти вопросы не слишком беспокоят. Возможно, если установлено больше карт PCI/PCIe или что-то ещё, то возникнут проблемы, но в моём случае, похоже, всё в порядке. Очевидно, что ваша система может отличаться, и этот хак нельзя напрямую применить на других материнских платах, потому что таблица ACPI у каждого BIOS немного отличается.
Думаю, это был весёлый опыт, чтобы поделиться с миром! Надеюсь, вы что-то узнали из этого поста. Конечно, я и сам многому научился в процессе.
Пришла посылка с китайской памятью 4Gb DDR3 1333 для AMD которая оказалась нерабочей
Сразу говорю, это не обзор, никаких тестов не будет.
Для старых компьютеров прикупил памяти. Не знаю почему, но ещё когда покупал было нехорошее предчувствие по поводу магазина (ну или «производителя»). Как оказалось зря не прислушался к внутреннему голосу.
До этого пару лет назад брал Atermiter, с ней все вышло гладко, никаких претензий. Но продавец который ими торгует в честь очередной акции поднял цену, в принципе на копейки, но брать я у него не стал.
В этот раз купил Avanshare. 8 планок. Пайка элементов хорошая, флюса нигде не видно, все чипы бу, одинаковые Elpida J2204B3MB-AE-F
И начались танцы с бубном. После установки памяти компьютер включается, но нет инициализации (т.е. кулер крутится, биос не пищит). Пробовал на трех материнских платах — две от гигабайта, одна asrock.
Методом тыка удалось добиться запуска биоса: с брендовой памятью samsung вошел в биос и выключил Channel interleave в настройках DRAM, потом в пару к брендовой добавил глючную планку Avanshare. После этого стал включаться хотя бы до биоса. Но по при прохождении post и начале загрузки windows снова ступор — зависание (пробовал xp, 7 и 10).
Пошел в лоб, скачал RWEverything, с её помощью узнал параметры spd предыдущей китайской Atermiter, для того чтобы записать их в нерабочую Avanshare.
Чтобы узнать параметры spd нужно после запуска программы нажать кнопку DIMM SPD (1 на скриншоте), в выпадающем меню (2 на скриншоте) выбираем нужную планку памяти, и затем нажимаем READ (3 на скриншоте).
Для записи новых параметров spd нужно загрузить windows с планкой памяти, а они виснут, выход из положения такой: загружаем windows (я использовал 7-ку) с одной брендовой планкой памяти, затем загоняем компьютер в сон, после того как он уснул устанавливаем глючную планку в пару к рабочей. Я планку заранее расположил в слоте уперев в защелки, чтобы не было перекоса, оставалось только нажать. Напряжение на слоте в режиме сна не снимается, поэтому действовать нужно осторожно. Затем вывел компьютер из сна, запустил RWEverything и загрузил SPD дохлой планки, единственный недостаток — перебивать SPD в этой программе придется вручную. Перебил SPD от рабочей Atermiter, нажал Write (4 на скриншоте). Выключил, оставил только нерабочую до этого планку Avanshare, включил — все замечательно загрузилось.
Скрин с RWEverything, на нем же рабочие параметры spd от Atermiter ddr3_1333 4Gb для AMD
Нерабочий SPD выкладывать не вижу смысла, чтобы никого не путать, основное его отличие от рабочего — в нем прописаны 10 и 11 клоки.
Эти же манипуляции провел с ещё шестью планками, одна из 8 оказалась дохлой совсем — биос пищит, что не видит память.
По диспуту: китаец попался щедрый — 100% возврат средств.
p.s. Я знаю, что многие скажут, что это некрофильная память, но уж какая есть.
Чтобы не зубрить правила и исключения
Что можно добавить к описанным выше нюансам выбора? Много чего: специфические моноблоки неттопы с нереференсным дизайном комплектующих, ноутбуки одной и той же модели с абсолютно разным потенциалом для апгрейда, отдельные капризные модели материнских плат и другие «грабли», на которые легко наткнуться, если вы не следили за тенденциями в железе на форумах энтузиастов.
На этот случай Kingston предлагает онлайн-конфигуратор. С его помощью можно подобрать гарантированно совместимую и эффективную оперативную память для десктопов, рабочих станций, неттопов, ультрабуков, серверов, планшетов и других устройств.
Есть резон сверить совместимость начинки ПК с памятью, которую вы присмотрели для покупки, чтобы не возвращаться в магазин и пояснять консультантам, что «память-то работоспособная, но моему компьютеру нужна DDR3-1600, которая не совсем обычная DDR3-1600».
Нет разнообразия — нет проблем
После долговременного «оплота сопротивления» с контроллером памяти в северном мосту платформ Intel эксперименты прекратились. Все новые платформы Intel и AMD предусматривали контроллер под крышкой самого CPU. Это, конечно, плохо с точки зрения долгожительства платформы (нельзя проделать трюк и «пересесть» на новый тип памяти со старым процессором), но производители RAM подстроились и, как видите, память DDR3 не утратила свою популярность даже в 2017 году. Её носителями сегодня являются следующие платформы:
AMD | Intel |
am3 | lga1366 |
am3+ | lga1156 |
fm1 | lga1155 |
fm2 | lga1150 |
fm2+ | lga2011 |
Список архитектур процессоров на базе этих платформ намного более обширный! А вот многообразия в выборе памяти — меньше, точнее его почти нет. Единственное исключение — процессоры AMD для сокета AM3, которые, на радость экономным покупателям, совместимы с сокетом AM2, AM2+. Соответственно, «красные» оборудовали такие процессоры универсальным контроллером, который поддерживает и память DDR2 (для AM2+), и DDR3. Правда, чтобы «раскочегарить» DDR3 на Socket AM3 до частоты 1333 и 1600 МГц, придётся дополнительно повозиться с настройками.
Примерно так соотносились новые компьютеры на базе DDR3 и конкурирующих типов памяти в недавнем прошлом
Принципы подбора памяти в случае с платформами на базе DDR3 таковы:
- для FM1, FM2 и FM2+, если речь идёт об APU с мощной интегрированной графикой, можно и нужно выбирать наиболее производительную оперативную память. Даже старенькие чипы на базе FM1 способны совладать с DDR3 на частоте 1866 МГц, а чипы на микроархитектуре Kaveri и её «рестайлинге» Godavari в некоторых случаях выжимают все соки даже из экстремально разогнанной DDR3 на частоте 2544 МГц! И это не «кукурузные», а действительно полезные в реальных сценариях работы мегагерцы. Поэтому оверклокерская память таким компьютерам просто необходима.
Начать стоит, к примеру, с модулей HyperX HX318C10F — они уже «в базе» работают при 1866 МГц и CL10, а в разгоне придутся как раз кстати чувствительным к тактовой частоте гибридным процессорам AMD.
Гибридные процессоры AMD остро нуждаются в высокочастотной памяти
-
«антикварные» процессоры Intel на платформах LGA1156 и её серверного собрата LGA1366 способны оседлать высокочастотную DDR3 только в случае корректно подобранного множителя. Сам Intel гарантирует стабильную работу исключительно в рамках диапазоне «до 1333 МГц». Кстати, не забывайте о том, что помимо поддержки регистровой памяти с ECC, серверные платформы LGA1366 и LGA2011 предлагают трёх- и четырёхканальные контроллеры DDR3. И остаются, пожалуй, единственными кандидатами на апгрейд ОЗУ до 64 Гбайт, потому что не-регистровые модули памяти объёмом 16 Гбайт в природе почти не встречаются. Зато в LGA2011 разгон памяти стал легко осуществим вплоть до 2400 МГц.
Когда сменить чипсет дешевле, чем раскошеливаться на старую память
Этот громоздкий список нужен не для того, чтобы впечатлить читателей широтой и обилием чипсетов устаревших ПК, а для немного неожиданного маневра в апгрейде. Суть этого нехитрого маневра заключается в том, что иной раз рациональнее будет приобрести материнскую плату с поддержкой более дешёвой и современной памяти, нежели раскошеливаться на уже раритетную ОЗУ предыдущего поколения.
Потому что один и тот же объём памяти DDR2 на вторичном рынке окажется минимум на 50% дороже, чем сопоставимая по ёмкости память DDR3. Не говоря уже о том, что DDR3 ещё не снята с конвейера, поэтому её можно приобрести в новом состоянии, недорогим комплектом.
А ещё с новыми чипсетами появляется возможность расширить ОЗУ до актуальных и сегодня величин. Например, если сравнить цены в российской рознице, то 8 гигабайт (2x 4 Gb) памяти DDR2 с частотой 800 МГц обойдутся вам эдак в 10 тысяч рублей, а такой же объём памяти стандарта DDR3 с частотой 1600 МГц (Kingston Value RAM KVR16N11/8, например) — в 3800-4000 рублей. С учётом продажи-покупки материнской платы для старого ПК затея выглядит разумно.
Реалии модернизации компьютеров с «нативной» поддержкой DDR и DDR2 всем давно известны:
-
модули памяти с различными таймингами и частотой чаще всего умудряются сработаться, а «выравнивание» происходит либо по профилю SPD в менее производительном модуле, либо (что хуже), материнская плата выбирает стандартный для себя профиль работы с RAM. Как правило, с минимально допустимой тактовой частотой.
-
в двухканальном режиме эффективнее работают модули равного объёма. Иными словами 1 Гбайт + 1 Гбайт окажутся лучше, чем 1 Гбайт + 512 Мбайт + 512 Мбайт.
И, вроде бы, этого списка нюансов достаточно, чтобы захотеть «перетянуть» компьютер на базе LGA775 на чипсет с поддержкой DDR3. Однако, вы таки будете смеяться, да только в модернизации старой платформы с помощью новой ОЗУ тоже есть свои нюансы.
В дебютных платформах с поддержкой DDR3 (чипсеты Intel x4x и x5x и аналоги AMD того же времени) контроллеры способны работать только модулями старого образца. Абсурдная ситуация? Да, но факт остаётся фактом.
Дело в том, что старые системы не владеют «языком общения» с модулями, которые оснащены чипами памяти высокой плотности. На бытовом уровне это означает, что вот этот модуль, у которого 4 гигабайта «размазаны» на восемь чипов на лицевой стороне печатной платы, работать в старом ПК не сможет. А старый модуль, у которого этот же объём реализован на 16 чипах (по 8 с каждой стороны) при аналогичном объёме и частоте будет работоспособен.
Такие проблемы с совместимостью характерны, например, для десктопного Intel G41 Express (тот самый, что тянет на себе немалую долю выживших Core 2 Duo или Core 2 Quad) или мобильного Intel HM55 (ноутбуки на базе первого поколения Intel Core на базе микроархитектуры Nehalem).
Иногда производители материнских плат/ноутбуков выпускают новые версии BIOS для того, чтобы научить старые платформы работать с новыми ревизиями ОЗУ, но чаще всего ни о какой долговременной поддержке старого оборудования речи не идёт. И, к сожалению, ни о каких спецсериях памяти для владельцев «устаревших, но не совсем» ПК речи не идёт — производство памяти ушло вперёд и поворачивать его вспять очень дорого.
Чтобы не забивать голову такими понятиями, как «плотность чипа памяти», на бытовом уровне владельцам старых ПК советуют искать Double-sided DIMM, двусторонние модули памяти, которые с бОльшей вероятностью будут совместимы с дебютными платформами на базе DDR3. В модельной линейке Kingston подходящим вариантом будет HyperX Blu KHX1333C9D3B1K2/4G — 4-гигабайтный модуль DDR3 для десктопов с шестнадцатью модулями памяти на борту. Его не так легко найти в продаже, но хочешь 16 Гбайт на старом ПК — умей вертеться.
И да, «лучшие из архаичных» чипсеты, такие как Intel P35 Express, например, тоже довольствуются поддержкой DDR3 на частоте 1333 вместо типичных для бюджетных платформ современности 1600 МГц.
HyperX Blu KHX1333C9D3B1K2 — один из немногочисленных способов заполучить 16 Гбайт ОЗУ в старых ПК
Читайте также: