Downclocking оперативной памяти на MacBook

Хочу поделиться своим опытом апгрейда своего MacBook6,1 A1342 (увеличение памяти до 8Гб, установка SSD) и решении ряда проблем связанных с установкой системы на новый диск и борьба с глюками несовместимости RAM.

Сначала может показаться, что апгрейд старого железа тривиальная задача: в интернете должно быть полно статей на эту тему, а на рынке куча дешевых запчастей для него. Но не все так просто на практике. Проблемы начались еще в магазине на этапе подбора комплектующих

Предыстория


За символическую сумму был куплен с рук MacBook, это первый мой ноутбук этой фирмы, изначально брал чтобы «познакомиться» с продукцией фирмы. Сразу после покупки обнаружилось, что комп сильно тормозной для наших дней, к такому знакомству я был не готов. По совету знакомого решил сделать апгрейд. Выяснил что внутри SATA диск 2.5" и 2 планки DDR3 204pin SO-DIMM 1066MHz, официально поддерживает максимум до 4Gb в один слот. В магазине был выбран SSD диск на 250Gb (тут с выбором проблем нет: любой SATA 2.5" подойдет, ассортимент широкий на любой вкус).

А вот с RAM не все так просто. Официально эта модель макбука поддерживает оперативу 1066MHz, в наличии такой не оказалось, а под заказ одна планка стоила около 4000 руб. В тоже время в наличии была 4Gb 1600MHz по цене около 2000 руб. Взял более быструю, из расчета на обратную совместимость. Не завелось. В магазине удалось подобрать один модуль памяти, с которым система стартовала (AMD R334G1339S1S) и я счастливый пошел домой, не забыв заказать второй такой же. А чтоб второй слот не пустовал, временно включил туда родную планку 1Gb.

Надо сказать, что разочаровавшись в медленной macOS, я установил Windows 7 на весь раздел и не сделал бэкап системы — не повторяйте моей ошибки!

На этом лирика заканчивается и начинаются танцы с бубном.

Установка macOS на чистый диск


В моей деревне Mac есть у двух человек: первый у меня, а второй у того одноглазого бандита, который держит в страхе всю деревню. Из подручных средств: флешка 8Gb, второй ноутбук с Windows 7 на борту, выделенная линия интернет.

В интернете много статей о том, как сделать загрузочную флешку macOS непосредственно в macOS. Как сделать загрузочную флешку с macOS High Sierra из под Windows не очень много и они все оказываются далеко внизу в выдаче после способов как это сделать в macOS. Я уже было стал искать образы флешек в формате .img .iso .bin и прочих, но увы и ах! Может где-то на заблокированных торрент-трекерах они и есть, но я не нашел. Зато нашел утилиту BDU (Boot Disk Utility), с помощью которой можно скачать необходимые файлы прямо с AppStore и записать на флешку. Программа простая, на официальном сайте есть подробная инструкция с картинками, по-этому останавливаться на этом этапе не буду. Скажу лишь, что разбивать флешку на 2 раздела и качать Clover нет необходимости, достаточно скачать RecoveryHD образ и записать его в раздел флешки.

Далее грузимся с флешки (при старте жмем Alt и держим до появления меню). В дисковой утилите форматируем диск (я выбрал GUID, APFS). Подключаемся к интернету по WiFi или проводом и запускаем установку. Если все хорошо, то дальше система сама скачается с интернета и установиться на компьютер.

Проблемы с совместимостью железа


Вторая планка пришла довольно быстро, не успел я насладиться новым SSD диском и 4+1 Gb RAM. Поставил оперативку, в About This Mac отобразилось полные 8Gb и я принялся мучать систему тяжелыми задачами. Примерно 1-2 раза в день комп стал перезагружаться. Ошибки типа kernel_panic во всех подряд приложениях от Xcode до простого TextEdit'а. Дошло до того, что перестали скачиваться приложения из AppStore. Первая мысль — оперативка битая. Гонял Memtest — все в порядке. Повторная установка с созданной в BDU флешки кончается крахом (verified error, checksum error и другие ошибки). Пришлось далеко ходить за offline установочной флешкой созданной непосредственно в macOS (из под Windows такую сложно сделать). Но даже это не спасло.

Обратил внимание, что память работает на частоте 1333MHz. Т.к. BIOS в маке отсутствует, то пришлось понижать частоту включением параллельно родной планки 1Gb 1066 MHz. И это помогло! Система не сбоит, из AppStore все качается нормально. Но как же тогда вторая планка?

Перерыв весь интернет, нашел 2 способа решения проблемы:

  1. Обновление EFI от аналогичного MacBookPro, при этом не факт что не умрет совсем и в результате будет в About This Mac писать что это Pro;
  2. Изменить максимально допустимую частоту работы памяти в SPD блоке самой памяти в одной из планок, тогда EFI будет выбирать ее автоматически.

Downclocking RAM 1333MHz-1066MHz MacBook


Я выбрал второй вариант, т.к. риск убить одну планку из двух для меня дешевле. Плюс возможные проблемы в будущем из-за неверной идентификации платы системой. Пусть EFI обновляет сама Apple. Для даунклокинга потребуется живой диск с Linux (я использовал установочный диск Ubuntu 16.04.2)

План действий:

1. Снять dump из SPD EEPROM памяти;
2. Найти и уменьшить частоту шины с 1333MHz до 1066MHz;
3. Пересчитать CRC;
4. Записать полученные значения обратно в EEPROM.

Если у Вас есть лишние 16$, то можете просто купить Thaiphoon Burner и сделать все операции в нем. Если нет, то прокачиваем прямоту рук. Поехали!

Снимаем дамп

Грузимся в Ubuntu, запускаем терминал, далее все будем делать под рутом. Устанавливаем i2c-tools, подгружаем драйвера:

sudo -I
#add-apt-repository universe
#apt-get update
#apt-get -y install i2c-tools
#modprobe eeprom
#modprobe i2c-smbus
#modprobe i2c-dev
#modprobe i2c-nforce2

Посмотрим какие шины у нас есть:

#i2cdetect -l
i2c-3	i2c       	nvkm-0000:02:00.0-aux-0008      	I2C adapter
i2c-1	i2c       	nvkm-0000:02:00.0-bus-0002      	I2C adapter
i2c-8	smbus     	SMBus nForce2 adapter at 2140   	SMBus adapter
i2c-6	i2c       	nvkm-0000:02:00.0-aux-000b      	I2C adapter
i2c-4	i2c       	nvkm-0000:02:00.0-aux-0009      	I2C adapter
i2c-2	i2c       	nvkm-0000:02:00.0-bus-0003      	I2C adapter
i2c-0	i2c       	nvkm-0000:02:00.0-bus-0000      	I2C adapter
i2c-9	smbus     	SMBus nForce2 adapter at 2100   	SMBus adapter
i2c-7	i2c       	0000:02:00.0                    	I2C adapter
i2c-5	i2c       	nvkm-0000:02:00.0-aux-000a      	I2C adapter

Подскажите в комментариях как в этом списке однозначно найти где висит RAM? Я предварительно использовал бесплатную версию Thaiphoon Burner, по-этому знаю куда иду.

Итак, на 8й шине висит SMBus nForce2 adapter at 2140. Посмотрим что внутри:

#i2cdetect -y 8
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: UU UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Здесь UU UU это две мои планки одна из них на 1Gb, другая на 4Gb. Адреса 0x50 и 0x51. Какая из них где, можно определить по дампу каждой, опираясь на серийный номер, например, или год выпуска. Я же уже заранее посмотрел эту информацию в Thaiphoon Burner, по-этому сразу смотрим устройство по адресу 0x51. Сделаем дамп памяти первых 256 байт — это и есть SPD EEPROM:

#i2cdump -f -r 0x00-0xff -y 8 0x51 b
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 92 11 0b 03 03 19 00 09 03 52 01 08 0c 00 3c 00    ??????.??R???.<.
10: 69 78 69 30 69 11 20 89 00 05 3c 3c 00 f0 83 01    ixi0i? ?.?<<.???
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 0f 11 05 00    ............???.
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 80 01 44 00 00 00 00 00 00 4f 5d    .....??D......O]
80: 52 33 33 34 47 31 33 33 39 53 31 53 00 00 00 00    R334G1339S1S....
90: 00 00 00 00 80 01 00 00 00 00 00 00 00 00 00 00    ....??..........
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

Частота шины

Далее все делаем в уме\блокноте, но ни в коем случае не пишем в EEPROM!
Полученный дамп я аккуратно перенес в текстовый документ. Почитав JEDEC Standard No. 21-C узнаем, что искомый параметр находится в 12-м байте (т.е. со смещением 0x0C), а частоте 1066MHz (на самом деле в документации пишется вдвое меньшая частота 533MHz) соответствует значение 15 (т.е. 0x0F). исправляем в блокнотике и идем дальше.

Контрольная сумма CRC

Тут немного сложнее, CRC считается либо для первых 126 байтов, либо для 117 байтов. Определяется это старшим битом первого байта. У меня это значение 0x92, старший бит = 1, что соответствует CRC Coverege 0-116. Само значение CRC вычисляется по стандартной формуле CRC-CCIT 16bit polynomial 0x1021. Я использовал онлайн-калькулятор CRC, где прямо текстом все прекрасно вставляется и считается. Важно учесть, что байты CRC после подсчета записываются в обратном порядке в EEPROM в 126й и 127й байты. В моем случае онлайн калькулятор насчитал CRC 0x5047, в EEPROM запишу 0x47, затем 0x50.

Запись в EEPROM

Прежде чем продолжить, стоит еще раз все перепроверить: почитать JEDEC, оценить риски, попробовать посчитать CRC уже рабочих модулей, чтобы отточить навык. В случае ошибки, память умрет! Можно конечно заморочиться, подключить к программатору и восстановить SPD из backup'а (Вы ведь его сделали?). Тогда продолжим.

В моем случае нужно записать (адрес=значение):

0x0C = 0x0F (12й байт частота)
0x7E = 0x47 (126й байт CRC.2)
0x7F = 0x50 (127й байт CRC.1)

#i2cset -f -y 8 0x51 0x0C 0x0F
#i2cset -f -y 8 0x51 0x7E 0x47
#i2cset -f -y 8 0x51 0x7F 0x50

Проверяем, записались ли значения:

#i2cdump -f -r 0x00-0xff -y 8 0x51 b
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 92 11 0b 03 03 19 00 09 03 52 01 08 0f 00 3c 00    ??????.??R???.<.
10: 69 78 69 30 69 11 20 89 00 05 3c 3c 00 f0 83 01    ixi0i? ?.?<<.???
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 0f 11 05 00    ............???.
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 80 01 44 00 00 00 00 00 00 47 50    .....??D......GP
80: 52 33 33 34 47 31 33 33 39 53 31 53 00 00 00 00    R334G1339S1S....
90: 00 00 00 00 80 01 00 00 00 00 00 00 00 00 00 00    ....??..........
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

Как видно, все записалось верно. На всякий случай перепроверяем и перезагружаемся. Если компьютер включился и вся память доступна — поздравляю! Убираем родную планку 1Gb, ставим вторую (не прошитую) и проверяем частоту памяти — 1066MHz.

Если память не прошилась, значит стоит Write Protect. Можно попробовать разблокировать утилитой Thaiphoon Burner, либо напаивавшем резистора на одну из ножек памяти (тема отдельной статьи), либо попробовав прошить другую планку.

Надеюсь эта статья будет кому-либо полезна. Писал в основном для себя, чтобы снова не искать всю информацию в разных местах.

При написании были использованы материалы

Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 46
    +7

    Снимаю шляпу! Добро пожаловать в ряды!

      +1
      Вот спасибо Вам за статью! Теперь попробую свои проблемы разрешить этим способом, надеюсь получится.
        +6
        черт, мой мир теперь никогда не будет таким как прежде — я узнал, что в планках ОЗУ есть своя энергонезависимая память, которую тоже можно перезаписать (прям мечта параноика)!
          0

          Сейчас память пихают повсюду! Если хорошенько поискать, то можно даже в обуви найти! Да-да, в обычных туфлях, в каблуке… Некоторые продавцы запихивают их туда, чтобы хитрый клиент не вышел в новых туфлях мимо кассы. А потом по этим туфлям можно Вас идентифицировать.

            0
            да, но туфли не имеют доступа к ОЗУ. (или вы что-то знаете ?)
              0

              spd eeprom тоже не имеет доступа к ОЗУ, это отдельная ППЗУ микросхемка i2c-типа (2 контакта для передачи данных) сбоку на планках памяти — https://en.wikipedia.org/wiki/File:SPD_SDRAM.jpg
              "SPD EEPROM is accessed using SMBus, a variant of the I²C protocol" — доступ к ней получает BIOS для настройки режимов контроллера памяти. Там же — профили XMP (Extreme Memory Profile)

                –1
                … но тем не менее — к БИОСу-то доступ есть (и не говорите, что невозможны атаки по переполнению буфера БИОС при чтении им чего-то)
                  0
                  Эдак недолго и к мышке доверие потерять…
          +3
          > Установка macOS на чистый диск

            +3
            Internet recovery

            Не получится. Нужен Macbook (поликарбонатный) хотя бы mid 2010, а у автора — late 2009.
              +1
              Да, вы правы.
                0

                На самом деле работает загрузка из интернет. Но когда память была на 1333MHz, такая установка вылетает с ошибкой.

            0
            Еще бы тайминги подправить для более быстрой памяти.
              +1

              Дело не хитрое, в JEDEC описано какой байт за что отвечает. Но там столько параметров, что глаза на лоб лезут...

                +1
                Они хранятся в абсолютных (мс) значениях, а не в относительных (тактах), поэтому при снижении частоты «пересчитываются». Подробнее можно почитать у Crash´a (автора Taiphoon Burner).
                  0
                  Благодарю, не знал этого, плюсануть не могу, жаль.
                +1
                а говорят, что на маках не нужно конфиги редактировать…
                  +4
                  А некоторые даже и не знают, что на маках есть чОрная консоль.
                    0
                    А она там белая.
                      0
                      У меня черная по дефолту была.
                  +1
                  в наличии такой не оказалось, а под заказ одна планка стоила около 4000 руб

                  А в какой деревне дело то происходит? У меня вон в ближайшем:
                  Corsair Mac Memory (4 Гб x 1) SO-DIMM DDR3 1066 МГц — 2780руб

                  любой SATA 2.5" подойдет

                  подойдёт то любой, но нет смысла гнаться за скоростными SSD, ибо внутри у него sata-2 с потолком в 300 Мбайт/с
                    +2

                    Деревья Сочи, на момент покупки в магазине была память только за 4к руб.


                    На счет скорости ssd согласен.

                      0
                      У меня неск лет назад приятель, восторженный макофил, решил апнуть память в пределах поддерживаемого. Была приобретена пара планок
                      Corsair Mac Memory (4 Гб x 1) SO-DIMM DDR3
                      (не буду врать за частоту, но с наклейкой про совместимость). Так вот и не завелась. Я не маковод, не люблю настолько отгорженые от пользователя вещи, да и времени поколупаться не сложилось. В общем, не взлетело у него. К счастью, кто-то из его знакомых каким-то обменом выдал ему желаемые (и совместимые) 8 гиг. Но осадочек остался.
                        +1
                        Маки же разные бывают, разных поколений :) Так что с чем оно там конкретно было совместимо — надо было ещё посмотреть. Вопрос частоты крайне актуальный.
                      +2
                      Было такое, да. Решил через Буткамп+Тайфун
                        +2
                        Хозяйке на заметку: MacBook, iMac поддерживают установку ОС загрузкой из Интернет. Достаточно сразу зажать Command+Option+R на загрузке машины, до появления яблока, чем вызвать Internet Recovery.
                          +2
                          Кроме старых моделей. На старых компах нет встроенного Recovery диска. Можно воспользоваться загрузочной Recovery флешкой, которую делает BDU, например.
                            –1

                            Встроенный Recovery-диск, который на самом деле раздел на основном системном диске, совершенно не нужен для того, чтобы загрузиться в Internet Recovery. Оно и без диска скачается и запустится.

                              +1

                              Какой-то загрузчик там все-таки нужен, который предварительно скачает рекавери, который скачает установщик, который скачает все остальное в доме который построил Джек… Так вот в моей модели этого первого загрузчика нету.

                            +2

                            Небольшая корректировка, все Mac с 2010 модельного года, согласно официалам
                            https://support.apple.com/ru-ru/HT202313 обладают возможностью онлайн-восстановления. 2009й год и более ранние — обречены, для них не писали обновлённых прошивок с давних времён, а 10.13 High Sierra не может на них быть запущена простым пользователем. Надежда лишь на то, что однажды кто-то соберёт прошивку EFI с этим модулем, как для Mac Pro куда прикрутили модуль от NVMe дисков. Но пока это всё счастье шьётся только программатарами.

                          0
                          В свое время просто купил две плашки памяти e2e4.ru/hbr/catalog/komplektuyuschie/operativnaya-pamyat/265346-Pamyat_DDR3_SODIMM_4Gb_1066MHz_CL7_1.5V_Corsair_CMSA4GX3M1A1066C7_1 и не мучался.
                          На чистый диск MacOs встает без каких либо проблем.
                            0
                            Купил Мак 7.1, купил два корсара 4гб за 6к

                            Зачем страдать и мучаться?)
                            0
                            Статья опоздала на пять лет, сейчас памят впаяна, да и про перепрошивку SPD, наверное, знают все, кто сталкивался с маками.
                              +1
                              Зато могли не знать те, кто не сталкивался с маками. Да и область применения же не ограничена только Mac OS.
                                0
                                Мне кажется, ограничена. Только у продукции аппл такое корявое железо.
                              0
                              В свое время заказывал память на али, в экзотическую старую матплату, строго по размеру одного банка памяти и частоте. Никаких проблем (кроме времени ожидания) не возникло, ну и цена в 2-3 раза ниже, чем в наших магазинах.
                                +1
                                Возможно, кому-то пригодится SPDtool и небольшая заметка по её применению.
                                  0
                                  А я на своем макбуке 2009г. сделал по простому: оставил одну планку родную, а вторую добавил ddr3 4gb. Работает отлично, не жалуюсь
                                    0
                                    Статья о том, что будет если не знать про тайминги ОЗУ.
                                      0
                                      А мне пришлось по размеру банка подбирать – 512 Мб не заводились, а вот 256 вполне. А частоту мак сам снизил до 1066 МГц, но у меня 2010-го года.
                                        0
                                        Он снижает, если установлена хотя бы одна планка на 1066. Иначе пищит и не включается
                                        +2

                                        Вот. Вот за такое я люблю хабр.
                                        А не за всё то что приехало с Geektimes.


                                        Прекрасная статья!

                                          +1

                                          У меня MacBook Pro 2014 года. Тоже менял SSD на Samsung Evo 960 с переходничком M.2 на маковский (Sintech адаптер с китая), потому что 128 гб не хватало и скорость почему-то была крайне низкая (запись не более 200 мб/c). Сейчас летает (1200 запись, 1400 чтение). Вот только гибернацию пришлось отключить, т.к. ноут не просыпается и перезагружается почему-то. Вроде говорят, что и с оригинальными NVMe SSD такая проблема может быть

                                            0
                                            Ну, это кайф. Раздел про прошивку SPD вообще концентрированное блаженство.

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое