Главная » Статьи » Компьютеры » Познавательные статьи

Перепрошивка SPD микросхемы на планке ОЗУ

SPD и программатор

Сейчас часто встречаются модули, которые имеют заниженные параметры. Также встречаются материнские платы, которые определяют тип памяти и жестко запрещают устанавливать частоту памяти большую записанной в SPD. Так, к примеру, при установке модуля DDR333 в материнские платы MSI K8N Neo, EPoX 8KDA3(+\J\I) и другие максимальная частота памяти ограничена 333 МГц (без разгона), хотя модуль возможно способен стабильно работать на более высоких частотах. Добиться частоты памяти равной частоте HT традиционными методами нет никакой возможности. Для этого приходилось использовать программу A64 Tweaker, которая может не всегда стабильно работать на разных платформах. Поэтому возникла потребность в программировании SPD. Превратив DDR333 в DDR400, мы легко решаем эту проблему, и разгон у нас ограничат только сами чипы памяти или процессор.

Смысл использования SPD четко ясен для производителя, как модулей памяти, так и материнских плат, однако для конечного пользователя по большому счету интереса не представлял. Наличие схемы последовательного детектирования на модуле памяти избавляет производителей материнских плат от необходимости вносить оптимальные значения основных временных параметров в системный BIOS (как это делает, например, Intel, используя в своих материнских платах Phoenix BIOS), поскольку вся необходимая информация для нормальной настройки подсистемы и ее стабильного функционирования содержится в микросхеме SPD. Кроме этого, механизм SPD может настроить систему и гарантировать более-менее устойчивую работу при использовании в подсистеме памяти модулей разной организации, разного объема и имеющих разные значения одноименных параметров. Все, что нужно сделать контроллеру – это при инициализации системы считать записанные в SPD данные.

Для программирования SPD был использован следующий "адаптер-программатор":

Сборка данного устройства не должна вызвать каких-либо затруднений для людей видевших паяльник и транзистор. Транзисторы можно использовать любые типа n-p-n, в нашем случае это были KT315Б и BC817 в SMD корпусе. Вид программатора может быть таким (это тестовый прототип, только для того, чтобы убедится, что все работает):

 

Я использовал DDR DIMM разъем с материнской платы для большего удобства при прошивке большого количества модулей. Также преимущество данного подхода в сохранении гарантийного вида модулей памяти. Однако можно и напрямую подпаять провода к EEPROM на плате, не выпаивая ее. Все необходимые сигналы выведены на разъеме DDR DIMM. EEPROM установленная на плате модуля имеет выводы A0,A1,A2,WP(TEST) соединенные с землей (GND).

SDA DDR DIMM pad №93
SCL DDR DIMM pad №94
VCC DDR DIMM pad №184
GND DDR DIMM pad №176

Ну а те же, кто считает такую конструкцию ненадежной и опасной может сделать плату, Например, как мою:

 

 

Размер платы не превышает размеров современного мобильного телефона. Это полная схема программатора с дополнительным стабилизатором на 5В. Если кого-то заинтересует информация по плате либо схеме, в конце статьи приведена контактная информация. В плате использовались SMD компоненты: транзисторы BC817, резисторы размера 1206, стабилизатор 5V, три светодиода (SDA, SCL и Power). Схема требует питания +9-30 V. Было применено питание +12V с БП ПК. Соединительные провода программатора к чипу следует делать минимально короткими, во избежание наводок и помех.

Не спешите сразу припаивать чип к программатору, сначала включите его отдельно. Если у вас все спаяно верно и ничего не взорвалось, проверьте соединительный кабель и только затем, выключив схему, припаивайте чип или плату. Так же не стоит использовать большие паяльники мощностью более 25 Вт, иначе есть возможность сжечь детали.

Для чтения или записи данных с чипа использовал freeware-программу PonyProg 2000. Процедура настройки и работы следующая: при первом запуске программы вы должны увидеть такое окно:

 

 

Первоначальная настройка заключается в следующем: необходимо выбрать тип прошиваемой памяти – I2C Bus 8bit EEPROM, а микросхему – 24XX Auto или 2402. Это делается при помощи выпадающих меню в верхней правой части. Затем в меню Setup > Interface Setup... нужно установить тип программатора, который используется. В нашем случае это EasyI2C I/O. Поскольку этот программатор имеет параллельный интерфейс, следует выбрать порт LPT1. В конечном виде все должно быть в точности как на скриншоте ниже:

 

 

Теперь необходимо подключить программатор с подключенной микросхемой и считать ее. Для этого предназначена кнопка Read Device. После удачной процедуры чтения у вас должно быть на экране нечто похожее:

 

 

Если же у вас модуль не считался, проверьте правильность сборки, возможно, вы перепутали сигналы SCL и SDA.

Можно записать считанные данные на диск из меню File. Настоятельно советую Вам это сделать, чтобы всегда можно было вернуться, если что-либо пойдет не так. Программа поддерживает редактирование считанных данных прямо в рабочем окне. Для этого вам нужно только активировать режим редактирования. Это делается в меню Edit, пункт Edit buffer enabled. После этого можете менять значения, точно так же, как и в любом HEX-редакторе. Сделав все, что вам было необходимо, нажимаете Write Device, показанную на скриншоте ниже и SPD EEPROM прошивается заданными данными. Данные после 128-го байта можно использовать на свое усмотрение, при работе ПК считывает только первые 128 байт. Можете записать туда свои пароли от Интернета или номер кредитной карты:-). После этого отключаете программатор и извлекаете модуль памяти.

 

 

Параметр контроллера памяти - DRAM Command Rate

Сommand Rate устанавливает задержку поступления команд в память. Собственно, это понятие является синонимом задержки декодирования контроллером командно-адресной информации. За этим параметром скрывается выбор необходимого физического банка общего адресуемого пространства установленной системной памяти.

Сама способность обработки команд с задержкой 1T зависит от таких факторов, как частота синхронизации шины памяти, количество микросхем на модуле памяти (чем больше микросхем, тем больше времени понадобится контроллеру, чтобы выбрать необходимую), качество используемого модуля, общее количество используемых модулей памяти в системе (прямо связано с количеством микросхем в составе одного модуля) и удаленность модуля от контроллера (протяженность сигнальных трасс от выводов контроллера до выводов микросхемы памяти с учетом количества переходов).

Таким образом, если в системе с процессором на ядрах SledgeHammer, ClawHammer, NewCastle, Winchester используется два 2-банковых модуля, необходимо использовать 2Т, иначе сигналы доходят с ошибками. Позже будет проанализировано влияние этого параметра на скорость в целом. В процессорах на ядре Venice и последующих возможно использование параметра 1Т в системе с 4мя банками памяти без потери стабильности.

В данной статье не будет приведено подробное описание остальных таймингов, т.к. цель исследования заключалась в выяснении максимально производительного режима для платформы Аthlon 64, а не изучении памяти. Если же потребуется детальная информация о таймингах обратитесь к статье "Настройка подсистемы памяти в BIOS SETUP".

Для модификации SPD-данных вам понадобится нижеприведенная таблица адресов, и их значения. За "частоту модуля" отвечает байт 9. Если он равен 50 – это 5.0ns память, т.е. DDR400, 60 – 6.0ns – DDR333, 40 – 4.0ns – DDR500. Аналогичная ситуация и с другими таймингами.

 

Общая схема назначения адресных байт SPD SIMM/DIMM
Байт Назначение
0 Общий объем текущей информации, записанной в EEPROM
1 Общее количество байт информации в микросхеме SPD
2 Фундаментальный тип используемой памяти
3 Общее количество адресных линий строки модуля, включая "смешанный" объем
4 Общее количество адресных линий столбца модуля, включая "смешанный" объем
5 Общее количество физических банков модуля памяти
06-07 Внешняя шина данных модуля памяти
8 Питающий интерфейс
9 Временной цикл с максимальной задержкой сигнала CAS# (tCK)
10 Длительность задержки данных на выходе модуля с учетом CL=Х
11 Интерфейс модуля (None/Parity/ECC...)
12 Тип и способ регенерации данных
13 Тип организации используемых микросхем памяти
14 Ширина шины данных ЕСС модуля
15 Минимальная задержка произвольного доступа к столбцу
16 Длительность передаваемых пакетов (BL)
17 Количество логических банков каждой микросхемы в модуле
18 Поддерживаемые длительности задержки сигнала CAS# (CL)
19 Задержка выдачи сигналов выбора кристалла CS# (tA(S))
20 Задержка выдачи сигнала разрешения записи WE# (tA(W))
21 Специфические атрибуты модуля памяти
22 Атрибуты общего порядка микросхемы памяти
23 Минимальный цикл CLX-1
24 Максимальное время доступа к данным с минимальным циклом CLX-1 (tAC)
25 Минимальный цикл CLX-2
26 Максимальное время доступа к данным с минимальным циклом CLX-2 (tAC)
27 Минимальное время регенерации данных в странице (tRP)
28 Минимальная задержка между активизацией соседних страниц (tRRP)
29 Минимальная задержка RAS-to-CAS (tRCD)
30 Минимальная длительность импульса сигнала RAS# (tRAS)
31 Емкость одного физического банка модуля памяти
32 Время установки адресов и команд перед подачей синхроимпульса (tIS)
33 Время ожидания на входе после подачи синхроимпульса (tIH)
34 Интервал установки данных на входе перед подачей синхроимпульса (tDS)
35 Время ожидания данных на входе после подачи синхроимпульса (tDH)
62 Номер текущей версии SPD
63 Контрольная сумма байт 0-62
Контрольная сумма (Checksum) предусмотрена спецификацией и необходима для проверки правильности записанных данных. Алгоритм вычисления контрольной суммы довольно прост:
  1. преобразование бинарной информации, содержащейся в байтах 0-62, в десятичную
  2. суммирование всех преобразованных чисел из байт 0-62
  3. деление полученной суммы на общее количество байт (256) до целого числа
  4. преобразование остатка от деления (получаемое число меньшее 256) в двоичный код
  5. запись результата в байте 63 в двоичном коде
64-71 Идентификационный код производителя по JEP106
72 Информация о производителе модуля
73-90 Уникальный номер производителя модуля
91-92 Код ревизии (версии) модуля
93-94 Дата производства модуля
95-98 Основной серийный номер модуля
99-125 Специфические данные производителя модуля
126-127 Специфические атрибуты частоты функционирования модуля
128-255 Пустые байты для внесения необходимой дополнительной информации

Пример записи карты программирования SPD для небуферизированного 128MB-модуля 32Mx64, 184pin DDR SDRAM DIMM с адресацией 12/10/2, использующего микросхемы памяти организации 8Mx8 с периодом синхросигнала 7ns (-262) и 7.5ns (-265).

 

Байт Наименование Значение HEX
0 Общий объем текущей информации, записанной в EEPROM 128Byte 80
1 Общее количество байт информации в микросхеме SPD 256Byte 08
2 Фундаментальный тип используемой памяти DDR SDRAM 07
3 Общее количество адресных линий строки модуля 12 0C
4 Общее количество адресных линий столбца модуля 10 0A
5 Общее количество физических банков модуля памяти 2 02
6 Внешняя шина данных модуля памяти 64bit 40
7 Внешняя шина данных модуля памяти (продолжение) N/A 00
8 Питающий интерфейс SSTL 2.5V 04
9 Временной цикл с максимальной задержкой сигнала CAS# -262 7.0ns 70
-265 7.5ns 75
10 Длительность задержки данных на выходе модуля с учетом CL=Х -262 7.5ns 75
-265 7.5ns 75
11 Интерфейс модуля (None/Parity/ECC...) Non-ECC 00
12 Тип и способ регенерации данных SR/1x(15.625 µs) 80
13 Тип организации используемых микросхем памяти x8 08
14 Ширина шины данных ЕСС модуля N/A 00
15 Минимальная задержка произвольного доступа к столбцу 1 01
16 Длительность передаваемых пакетов (BL) 2, 4, 8 0E
17 Количество логических банков каждой микросхемы в модуле 4 04
18 Поддерживаемые длительности задержки сигнала CAS# (CL) 2, 2.5 0C
19 Задержка выдачи сигналов выбора кристалла CS# 0 01
20 Задержка выдачи сигнала разрешения записи WE# 1 02
21 Специфические атрибуты модуля памяти Unbuffered 00
22 Атрибуты общего порядка микросхемы памяти General 00
23 Минимальный цикл CLX-1 -262 7.5ns 75
-265 10.0ns A0
24 Максимальное время доступа к данным с циклом CLX-1 -262 7.0ns 70
-265 7.5ns 75
25 Минимальный цикл CLX-2 N/A 00
26 Максимальное время доступа к данным с циклом CLX-2 N/A 00
27 Минимальное время регенерации данных в странице 20ns 14
28 Минимальная задержка между активизацией соседних строк 15ns 0F
29 Минимальная задержка RAS-to-CAS 20ns 14
30 Минимальная длительность импульса сигнала RAS# -262 45 2D
-265 50 32
31 Емкость одного физического банка модуля памяти 128MB 20
32 Время установки адресов и команд перед подачей синхроимпульса -262 0.9ns 90
-265 0.9ns 90
33 Время ожидания на входе после подачи синхроимпульса -262 0.9ns 90
-265 0.9ns 90
34 Время установки данных на входе перед подачей синхроимпульса -262 0.5ns 50
-265 0.6ns 60
35 Время ожидания данных на входе после подачи синхроимпульса -262 0.5ns 50
-265 0.6ns 60
36-61 Зарезервировано по JEDEC JC42.5-97-119 N/A 00
62 Номер текущей версии SPD 0 00
63 Контрольная сумма байт 0-62 Checksum cc
64 Идентификационный код производителя по JEP106 Hyundai AD
65-71 Идентификационный код JEDEC по JEP106 (продолжение) N/A 00
72 Информация о производителе модуля N/A 00
73-90 Уникальный номер производителя модуля N/A 00
91-92 Код ревизии (версии) модуля N/A 00
93-94 Дата производства модуля N/A 00
95-98 Основной серийный номер модуля N/A 00
99-125 Специфические данные производителя модуля N/A 00
126 Фактическая рабочая частота модуля N/A 00
127 Атрибуты поддержки частоты функционирования модуля ALL FF
128-255 Пустые байты для необходимой дополнительной информации N/A 00

 

Если кому нужно/хочется, постим тему на форуме.

Категория: Познавательные статьи | Добавил: Terminator (12.06.2014)
Просмотров: 12302 | Теги: ОЗУ, SPD | Рейтинг: 2.9/14
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]