В данной статье я расскажу, как патчил SPD на ноутбучной плашке памяти, в связи с оригинальной причиной, никак не связанной с тем что у меня оказался старый MacBook, а наоборот, появился новый компьютер и новая планка памяти (оба от 11.2018), и к каким танцам с бубном это всё привело.
На хабре уже есть аналогичные статьи раз и два, но я использовал другие программы и другое решение, так что решил написать очередную подобную статью, в надежде, что она будет кому-то полезна.
А для тех, кому не будет, попробую изложить ситуацию в виде истории, а не тупого мануала, чтобы читать было интереснее (будет много петросянства и лирических отступлений).
В статье не будет явной инструкции на какие кнопки нажимать, ибо угробить память вы можете запросто, так что, если соберётесь что-то делать, лучше не спешить и думать головой, а уж какие кнопки нажать, догадаетесь.
Итак, данная история началась давным-давно месяц назад, когда на AliExpress появилось волшебное слово «распродажа» и я не сдержался, и заказал себе очередной мелкий компьютер. Для тех, кто не очень представляет что это, вот фотография:
Такая алюминевая коробка размером 19х19, в которой засунут простенький процессор, но в целом — это обычный компьютер, не очень шустрый, но вполне рабочий.
К этому компьютеру нужно ещё докупать память, SSD, WiFi, пигтейлы и антенны и, конечно же продавцы за «небольшую» доплату всё это сами вставят и пришлют, так что включай и пользуйся. Но что именно они вставят… Так что я, конечно же, заказал всё по частям, всё-таки себе я доверяю больше. И, естественно, из любви к искусству подешевле (иначе не интересно).
UPD: В комментариях мне справделиво заметили, что память может быть подделкой. Вполне возможно, на работу памяти это не влияет, да и на пост в целом — тоже. Просто имейте в в иду, что я могу незаслуженно обругать честного производителя.
Комп и SSD приехали, а память задержалась на неделю, так что я нашёл в закромах старую планку на 1Gb и всё проверил. Но приехала новая плашка от ADATA (вроде известная фирма, да?), которая выглядела вполне цивилизованно:
Так что я, не задумываясь, вставил её в компьютер и получил… Да ничего я, собственно не получил. Компьютер светился лампочками, но на этом всё.
Злобный внутренний голос хихикал и говорил: Сэкономил? Купил ADATA? Надо было брать что-то приличнее! Но я его не слушал и занимался играми в биосе, с помощью гениального метода: вставляем старую плашку, ковыряем настройки, меняем на новую, пробуем.
Спустя некоторое время я умудрился завести компьютер, установив частоту 533 (1067) и отключив всё автоматическое определение. Память работала! Но любые попытки сменить частоту или сделать хоть что-то другое приводили к полному непонимаю компьютера, который отказывался соглашаться со мной, что работать он всё-таки должен.
Хмм… подумал я, и достал ноутбук, вытащил из него плашку, вставил на её место адатовскую, а ноутбучную в компьютер. Оба радостно завелись. What the hug! Сказал я, и начал пытаться понять, что же всё-таки произошло. Что за странная несовместимость и стоит ли делать что-то дальше, или просто так и оставить. Оставить, ну-ну, знаю я тебя сказал внутренний голос и я пошёл копать дальше. Внутренний Шерлок чувствовал, что какая-то фигня с таймингами, а утилиты показали, что ноутбук решил завестись на 667 (1333), вместо положенных 800 (1600), т.е. ему что-то явно не нравилось в планке.
В итоге у меня перед глазами встала следующая картина:
Память делкарировала, что она поддерживает частоту 800 (1600), но тайминги прописаны только до 667. Что-то было явно не так. Все соседние компьютеры утверждали что у их памяти, всё в порядке с таймингами, значит проблема явно в модуле. Заодно и стало понятно странное поведение компьютера — вижу частоту, но не знаю что с ней делать.
Т.к. я видел на хабре статью про то, что SPD можно прошить, я решил: гулять так гулять, надо попробовать что-то с этим сделать.
Вижу что апдейты пришли, Windows, давай потом, я занят
Поиски привели на отличную программу Typhoon Burner, у которой обнаружился небольшой недостаток. Она была платная… И стоит она практически столько же, сколько память, т.е. вместо программы можно купить ещё одну плашку, а эта хоть и плохо работает, но ведь работает! Так что копаем дальше.
Дальнейшие поиски привели к находке другой замечательной программы RwEverything, которая может читать и писать много всего интересного, в том числе и SPD, но SPD надо ковырять самому, а не просто выбрать нужные данные. И, да, у неё отсутствует недостаток предыдущей программы.
Виндоус, пожалуйста, отвали со своими апдейтами, я понимаю, что час ночи, но давай потом, а?
Я открыл википедию, прочитать про SPD, и понял, что сон придётся ещё чуть отложить. Но у меня есть дампы, несколько других планок, может просто скопировать содержимое? Идея заманчивая, но отложим.
В общем, дамп от памяти выглядел так:
0000000000: 92 11 0B 03 04 19 02 0A │ 03 52 01 08 0A 00 3C 00
0000000010: 69 78 69 3C 69 11 20 89 │ 20 08 3C 3C 01 68 83 05
0000000020: 80 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000030: 00 00 00 00 00 00 00 00 │ 00 00 00 00 0F 11 02 00
0000000040: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000050: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000060: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000070: 00 00 00 00 00 04 CB 04 │ 18 32 DC 00 74 3C 09 E3
0000000080: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20
0000000090: 20 20 00 00 04 CB 00 00 │ 00 00 00 00 00 00 00 00
00000000A0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000B0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000C0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000D0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000E0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000F0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 5A
А дамп от другой плашки так:
0000000000: 92 12 0B 03 03 19 02 09 │ 03 52 01 08 0A 00 FE 00
0000000010: 69 78 69 30 69 11 18 81 │ 00 05 3C 3C 00 F0 83 01
0000000020: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000030: 00 00 00 00 00 00 00 00 │ 00 00 00 00 0F 11 65 00
0000000040: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000050: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000060: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
0000000070: 00 00 00 00 00 80 AD 01 │ 16 20 01 73 25 CA D8 56
0000000080: 48 4D 54 33 35 31 53 36 │ 45 46 52 38 41 2D 50 42
0000000090: 20 20 4E 30 80 AD 00 57 │ 56 33 33 4E 30 35 38 37
00000000A0: 32 30 33 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000B0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000C0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000D0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000E0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
00000000F0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
Мда, из общего только набор нулей, но тут глаз цепляется за следующую строчку в википедии:
Так 14-ый байт на нормальной плашке говорит что поддерживает тайминги с 5 по 11 (FE), а на этой только с 6 по 9 (3C). А на частоте 800 (1600) тайминги как раз и должны быть 11. Меняю биты (получается FC), сохраняю в файл, загружаю в Тайфун и вижу
Неожиданно появились нужные тайминги.
Лирическое отступление: Я думал, что все тайминги указаны для каждой частоты и явно заданы, оказывается, это просто математика относительно базовых параметров, т.е. верить утилитам, показывающих красивые числа 11-10-10-28 верить нельзя ибо они тупо делают ту же математику, а потом округляют на свой вкус.
Так, можно писать? А вот нет, есть же ещё CRC:
Который ещё надо посчитать, да ещё и выяснить 117 байт или 126, впрочем, чего думать, я же видел в статье ссылку на калькулятор и тип: CRC-16/XMODEM. В общем, взял оригинальные данные, закинул 126 байт, неудача, 117 — всё сошлось (байтики только перевёрнуты), так что дальше дело техники, правим CRC, выдыхаем, записываем, смотрим, что все утилиты увидели тайминги…
shutdown -h
Включаем… Всё работает. Жизнь прекрасна, я в очередной раз поборол систему, вытаскиваем планку из ноутбука, вставляем в компьютер, всё работает!
Ну, виндоус, ставь апдейты, разрешаю, а то уж извелась вся
В общем, всё у меня работает, но вся ситуация для меня выглядит каким-то абсурдом. Не самый последний производитель ADATA, делает память не первый год, и тупо забывает прописать тайминги… В результате пользователи используют память в более медленном режиме или сталкиваются с такими проблемами как у меня, из-за двух, грёбаных бит. Ну вот как так?
Автор: force