Как я оперативку ремонтировал
Однажды, два года назад, заказал в известном магазине недорогую планку оперативы на 4 Гб, уже после покупки заметил, что чипы китайского производства (нонейм), но планка работала вроде бы нормально. Через 2 недели (как назло) начали появляться в системе какие-то дефекты - то тема слетает, то артефакты на экране. Понял я, что дело туго - временно взял оперативку с другого своего компа и поставил к себе, а эту планку думал понести сдать по гарантии (в течение 2 недель не сдал, а потом уже возврат не принимают - только ремонт), но тут то работа, то ещё что... в общем, так и не дошла она до сервиса - осталась в ящике лежать. Два года пролежала. Недавно понадобилась оперативка здесь и сейчас, в офисный комп бедолаге одному. Решил проверить, что с ней, собственно, не так. Для начала запустил программу Memtest86+, вот что она показала:
Т.е. целая куча ошибок, но все они сконцентрированы вокруг одной области - B5E72000 или примерно 2,9 Гб от начала. Т.е. понятно, что какой-то чип имеет битые секции, и выдает по тем или иным разрядам лишние единицы, что портит выходные данные. Потому и всяческие случайные зависания возникают. Первая мысль была такой (когда я ещё толком не знал устройство стандарта): надо взять, и заменить дефектную банку. На моей карте их 8 штук.
Встал вопрос, а какую собственно банку менять? Или может можно переставить местами банки, чтобы тот блок, в котором находится дефект, ушел, например, в конец адресного пространства, и таким образом, ограничив память мы получили бы планку в 3,9 Гб и ничего не потеряли? Пришлось изучать устройство DDR. Но, вопреки ожиданиям, оказалось, что планки работают в режиме параллельной выдачи, т.е. адресная шина у них общая, и они все разом принимают данные, и разом выдают. Поэтому при замене банок местами, битые сектора лишь сдвинулись бы, но не поменяли свой адрес. Этот факт, конечно, меня удручил, но менять всё равно надо было. Судя по показаниям теста, проблемы в первых двух адресах из восьми, попробовал начать с первой банки, а там уже смотреть на результаты тестов.
В куче хлама была найдена упаянная кем-то вусмерть плата с похожими банками. Чипы, конечно, не той фирмы, но организация вроде бы соответствует. Оригинальные чипы на моей памяти нонейм и их параметры даже неизвестны. Были подобраны более-менее похожие.
После чего банк был демонтирован
Настала очередь накатать шары. Ни один из имеющихся трафаретов под память не подошел :( Но ради одного чипа было решено воспользоваться методом, который когда-то вычитал здесь, на пикабу - под чип клеится двухсторонний скотч, после чего берется хлопковая (ни в коем случае не синтетическая) нить, и ей обвязывается микросхема, создавая некое подобие решетки с нужным шагом. После чего вручную устанавливаются шары. Эта "сеточка" предотвращает шары от укатывания в момент, когда флюс становится максимально жидким и начинает плавиться припой). Только он этот метод применял для ноутбучных BGA, а я пошел дальше и смог откатать так MicroBGA (хотя, наверное, процессор айфона вряд-ли таким образом можно сообразить - но под них и трафаретов в продаже хоть одним местом ешь). Шары положено 0,45 - но оных не было, взял 0,40 - в принципе тоже по высоте можно запаять, учитывая ещё остатки на пятачках.
Вот уже проставлена часть шаров:
После запайки если какие-то шары не припаялись, то корректируются вручную. Главное, чтобы попадало меньше ворса от нитки. Вот готовый результат. Шары ровные.
Вот эта же планка, но с готовой микросхемой.
Вопреки ожиданиям, ничего не заработало (под конец процесса я уже начал подозревать, почему). Память запаялась, звонятся все линии нормально, вот только компьютер с ней запускаться отказывается. После чего пришлось уже лезть в документы и выяснилось, что у микросхемы есть целая куча параметров (тайминги, организация битов), при несоответствии которых просто работать ничего не будет. Чтож, тот случай, когда я сначала сделал, а потом начал думать. Пришлось возвращать всё обратно, повторив вышеописанную процедуру. Но проблема ведь осталась не решена. Что делать? На памяти есть ещё одна маленькая микросхемка (на фото сверху находится над щупом мультиметра). Называется она SPD и содержит системную информацию о планке. Было решено работать в этом направлении.
План Б был таков: урезать планку хотя бы до 2048 Мб, чтобы компьютер мог запускаться и не виснуть, а остальное адресное пространство отсечь. Китайцы так часто делают, когда у них возникает брак при растравливании микросхем (например, битые флешки на 8 Гб переразмечают как на 4 Гб, отрезая битые сектора). Нечто подобное нужно было сделать и здесь. Для этого биос компьютера нужно убедить, что размер банок в памяти не 4 Мбит, а 2 Мбит, соответственно и видимый объем уменьшится. Но чтобы залезть в SPD, надо его как-то выпаять. Использовал фен и такой самопальный переходник, чтобы подключить к программатору:
Однако и тут поджидал какой-то косяк: программатор (CH341) отказывался работать со вставленной памятью, и начинал греться. Проблема была решена добавлением конденсатора на 0,15 мкФ по питанию (между 4 и 8 ножками).
И микросхема прочиталась как 24C02 (стандарт для планок). Что мы видим:
В первой половине памяти (0-127 байты) содержатся данные о памяти, во второй половине памяти - информация для пользователя (серийный номер и другие). На английской Википедии нашлась таблица с расшифровкой каждого байта и бита (каждый бит - это параметр, а теперь представьте, почему план А не получился - две разные памяти, и всё это нужно подбирать так, чтобы удолетворило и те чипы, и другие). Кстати говоря, таблица не точная - более точные данные можно узнать используя код из утилиты decode-dimms на линуксе. Конечно, с таймингами можно было поэкспериментировать, но времени на это не оставалось. Вот эта таблица:
Т.е. нам нужны 4,5,7 байты - их и будем править. В нашем дампе они составляют 04 21 и 01. Нужно перевести в двоичную систему: 04 это 0b00000100
Т.е. согласно таблице с википедии, первые 4 ноля значит 8 банков, вторые 0100 значат логарифм по основанию 2 от (4096000000 бит - примерно равен 32) 32-28 = 4. Что и записано в таблице. А нам надо уменьшить объем вдвое, т.е. до 2048000000 бит. Делаем вычисления: log 2 2048000000 = 31, 31-28 = 3. Это значение и нужно записать в память.
Записываем, и.... ничего. Комп не стартует, пищит дефектная память.
Долго искал, затем нашел статью в интернете от одного американца. Оказывается, в конце (последние 2 бита), у меня это EA 24, есть контрольная сумма всех битов. При изменении хоть какого-либо из предыдущих битов, её значение изменится радикально. Если не соответствует значение, вычисленное пк при запуске этим двум битам - значит что-то идёт не так, и память дефектная. Контрольную сумму эту можно посчитать, перенеся из Hex-редактора первые 117 байт (адреса 0-116) в онлайн CRC калькулятор. Выставляем тип ввода HEX, тип вывода HEX. Нам нужен режим CRC-16/XMODEM. Выданные им результаты записать в байты 126-127 в обратном порядке (выдало FC1E - пишем 1EFC). Перед проведением процедуры рекомендую проверить всё то же самое на оригинальном дампе, данные должны совпасть, чтобы не возникло потом ошибок.
Теперь вписываем новую контрольную сумму, шьём и проверяем. Всё запустилось нормально, в биосе объем памяти определился как 2048 Мб (2 Гб), чего я и добивался.
На этом пост можно было бы и закончить, но, запустив винду, я увидел объем памяти в те же 4096 Мб.
В общем, судя по всему, биос этот параметр (размер памяти) для справки читает, но при определении особо ему внимания не уделяет, и индексирует память, покуда она адресуется и выдаёт данные (вспоминаются старые биосы, где ждёшь, пока он оперативу посчитает). Итоговое решение я нашел на одном из форумов.
План C: В конфигурации винды (msconfig) есть такая графа (раздел Загрузка - Дополнительные параметры). И там ставим галочку "Максимум памяти", после чего пишем 2048. Перед этим поставив рабочую планку для того, чтобы это провернуть. Сохраняем всё.
Система перезагружается и мы видим 2048 Мб. После того как удался план С, мне уже вспомнился испанец хохотун
В общем в итоге всех манипуляций все довольны, планка спасена, винда больше не тупит и не вылетает при работе с этой памятью.
Всем добра, с вами был Kekovsky.





















Сообщество Ремонтёров
8.1K поста44.1K подписчиков
Правила сообщества
ЕСЛИ НЕ ХОТИТЕ, ЧТОБЫ ВАС ЗАМИНУСИЛИ НЕ ПУБЛИКУЙТЕ В ЭТОМ СООБЩЕСТВЕ ПРОСЬБЫ О ПОМОЩИ В РЕМОНТЕ, ДЛЯ ЭТОГО ЕСТЬ ВТОРОЕ СООБЩЕСТВО:
Посты с просьбами о помощи в ремонте создаются в дочернем сообществе:
К публикации допускаются только тематические статьи с тегом "Ремонт техники".
В сообществе строго запрещено и карается баном всего две вещи:
1. Оскорбления.
2. Реклама.
В остальном действуют базовые правила Пикабу.