Введение

Стандартный способ автоматического получения информации о модуле памяти.

В вычислительной технике последовательное определение параметров (SPD) — это стандартизированный способ автоматического получения информации о модуле памяти. Более ранние SIMM-модули с 72 контактами включали пять контактов, предоставлявших пять бит данных параллельного определения параметров (PPD), но стандарт DIMM с 168 контактами перешел на последовательное определение параметров для кодирования большего объема информации. Когда включается обычный современный компьютер, он начинает с самотестирования при включении питания (POST). Примерно с середины 1990-х годов этот процесс включает автоматическую настройку обнаруженного оборудования. SPD — это аппаратная функция памяти, позволяющая компьютеру определять установленный объем памяти и тайминги, необходимые для доступа к ней. Некоторые компьютеры адаптируются к изменениям оборудования полностью автоматически. В большинстве случаев существует специальная дополнительная процедура для доступа к параметрам BIOS с целью просмотра и, возможно, изменения настроек. Можно управлять тем, как компьютер использует данные SPD памяти — выбирать настройки, выборочно изменять тайминги памяти или, возможно, полностью игнорировать данные SPD (см. разгон).

Хранение информации

Для модуля памяти, поддерживающего SPD, стандарты JEDEC требуют, чтобы определенные параметры находились в нижних 128 байтах EEPROM, расположенной на модуле памяти. Эти байты содержат параметры синхронизации, информацию об изготовителе, серийный номер и другие полезные сведения о модуле. Устройства, использующие память, автоматически определяют ключевые параметры модуля, считывая эту информацию. Например, данные SPD на модуле SDRAM могут содержать информацию о задержке CAS, чтобы система могла правильно установить ее без вмешательства пользователя. Доступ к прошивке SPD EEPROM осуществляется через SMBus – вариант протокола I2C. Это сокращает количество контактов для связи на модуле до двух: тактового и сигнального. EEPROM использует общие с оперативной памятью контакты заземления, имеет собственный контакт питания и три дополнительных контакта (SA0–2) для идентификации слота, которые используются для присвоения EEPROM уникального адреса в диапазоне 0x50–0x57. Коммуникационные линии могут использоваться совместно с 8 модулями памяти, а тот же SMBus обычно используется на материнских платах для задач мониторинга состояния системы, таких как чтение напряжения питания, температуры процессора и скорости вращения вентиляторов. SPD EEPROM также отвечают на I2C-адреса 0x30–0x37, если они не защищены от записи, а расширение (серия TSE) использует адреса 0x18–0x1F для доступа к дополнительному датчику температуры на кристалле. Все эти значения являются семибитными I2C-адресами, сформированными префиксом кода идентификатора типа устройства (DTIC) с SA0–2: для чтения (1100) из слота 3 используется 110 0011 = 0x33. С добавлением бита R/W формируется восьмибитный код выбора устройства. Обратите внимание, что семантика идентификатора слота отличается для операций защиты от записи: для них они могут вообще не передаваться через контакты SA. До появления SPD чипы памяти определялись с помощью параллельного определения присутствия (PPD). PPD использовал отдельный контакт для каждого бита информации, что означало, что из-за ограниченного количества контактов можно было сохранить только скорость и плотность модуля памяти.

SDR SDRAM (Средства специального вычета в СДР)

Первая спецификация SPD была выпущена JEDEC и доработана Intel в рамках спецификации памяти PC100, представленной в 1998 году. Большинство указанных значений представлены в виде десятично-двоичного кода. Наиболее значительный полубайт может содержать значения от 10 до 15, а в некоторых случаях и выше. В таких случаях кодировки для 1, 2 и 3 используются для кодирования 16, 17 и 18 соответственно. Наиболее значимый полубайт со значением 0 зарезервирован для обозначения "неопределенного". SPD ROM определяет до трех временных параметров DRAM для трех задержек CAS, определенных установленными битами в байте 18. Сначала указывается наибольшая задержка CAS (наиболее высокая тактовая частота), затем две меньшие задержки CAS с последовательно уменьшающимися тактовыми частотами. + Содержимое SPD для SDR SDRAM Байт Бит Примечания (десятичное) (шестнадцатеричное) 7 6 5 4 3 2 1 0 0 0x00 Количество присутствующих байтов Обычно 128 1 0x01 log2(размер SPD EEPROM) Обычно 8 (256 байтов) 2 0x02 Базовый тип памяти (4: SPD SDRAM) 3 0x03 Биты адреса строки банка 2 (0–15) Биты адреса строки банка 1 (1–15) Банк 2 равен 0, если он идентичен банку 1 4 0x04 Биты адреса столбца банка 2 (0–15) Биты адреса столбца банка 1 (1–15) Банк 2 равен 0, если он идентичен банку 1 5 0x05 Количество банков памяти на модуле (1–255) Обычно 1 или 2 6 0x06 Ширина данных модуля (младший байт) Обычно 64 или 72 для ECC DIMM 7 0x07 Ширина данных модуля (старший байт) 0, если ширина меньше 256 бит 8 0x08 Уровень интерфейсного напряжения этой сборки (не то же самое, что напряжение питания Vcc) (0–4) Расшифровывается с помощью таблицы поиска 9 0x09 Наносекунды (0–15) Десятые доли наносекунд (0,0–0,9) Время цикла тактовой частоты при наибольшей задержке CAS 10 0x0a Наносекунды (0–15) Десятые доли наносекунд (0,0–0,9) Время доступа SDRAM от тактовой частоты (tAC) 11 0x0b Тип конфигурации DIMM (0–2): без ECC, с контролем четности, ECC Таблица поиска 12 0x0c Период самообновления (0–5): 64, 256, 128, 32, 16, 8 кГц Требования к обновлению 13 0x0d Банк 2 2× Ширина банка 1 SDRAM (1–127, обычно 8) Ширина устройств SDRAM банка 1. Банк 2 может иметь такую же ширину или ширину в 2 раза больше, если установлен бит 7. 14 0x0e Банк 2 2× Ширина банка 1 ECC SDRAM (0–127) Ширина устройств ECC/контроля четности SDRAM банка 1. Банк 2 может иметь такую же ширину или ширину в 2 раза больше, если установлен бит 7. 15 0x0f Задержка тактовой частоты для случайного чтения столбцов Обычно 1 16 0x10 Страница — — — — 8 4 2 1 Поддерживаемые длины пакетов (битовая карта) 17 0x11 Банков на устройство SDRAM (1–255) Обычно 2 или 4 18 0x12 — 7 6 5 4 3 2 1 Поддерживаемые задержки (битовая карта) 19 0x13 — 6 5 4 3 2 1 0 Поддерживаемые задержки (битовая карта) 20 0x14 — 6 5 4 3 2 1 0 Поддерживаемые задержки (битовая карта) 21 0x15 — Резерв Разностные часы Зарегистрированные данные Буферизованные данные PLL на плате Зарегистрированный адрес Буферизованный адрес Битовая карта функций модуля памяти 22 0x16 — — Допустимое верхнее напряжение Vcc (напряжение питания) Допустимое нижнее напряжение Vcc (напряжение питания) Запись/чтение пакетом Предзарядка всех Автоматическая предзарядка Ранняя предзарядка Битовая карта поддержки функций чипа памяти 23 0x17 Наносекунды (4–18) Десятые доли наносекунд (0–9: 0,0–0,9) Время цикла тактовой частоты при средней задержке CAS 24 0x18 Наносекунды (4–18) Десятые доли наносекунд (0–9: 0,0–0,9) Время доступа к данным от тактовой частоты (tAC) 25 0x19 Наносекунды (1–63) 0,25 нс (0–3: 0,00–0,75) Время цикла тактовой частоты при короткой задержке CAS. 26 0x1a Наносекунды (1–63) 0,25 нс (0–3: 0,00–0,75) Время доступа к данным от тактовой частоты (tAC) 27 0x1b Наносекунды (1–255) Минимальное время предварительной зарядки строки (tRP) 28 0x1c Наносекунды (1–255) Минимальная задержка между активными строками (tRRD) 29 0x1d Наносекунды (1–255) Минимальная задержка от активации к чтению (tRCD) 30 0x1e Наносекунды (1–255) Минимальное время от активации к предварительной зарядке (tRAS) 31 0x1f 512 МБ 256 МБ 128 МБ 64 МБ 32 МБ 16 МБ 8 МБ 4 МБ Плотность банка модуля (битовая карта). Два установленных бита, если банки имеют разный размер. 32 0x20 Знак (1: −) Наносекунды (0–7) Десятые доли наносекунд (0–9: 0,0–0,9) Время установки адреса/команды от тактовой частоты 33 0x21 Знак (1: −) Наносекунды (0–7) Десятые доли наносекунд (0–9: 0,0–0,9) Время удержания адреса/команды после тактовой частоты 34 0x22 Знак (1: −) Наносекунды (0–7) Десятые доли наносекунд (0–9: 0,0–0,9) Время установки входных данных от тактовой частоты 35 0x23 Знак (1: −) Наносекунды (0–7) Десятые доли наносекунд (0–9: 0,0–0,9) Время удержания входных данных после тактовой частоты 36–61 0x24–0x3d colspan=8 Для будущей стандартизации 62 0x3e Основной номер ревизии (0–9) Второстепенный номер ревизии (0–9) Уровень ревизии SPD; например, 1.2 63 0x3f Контрольная сумма Сумма байтов 0–62, затем не инвертированная 64–71 0x40–0x47 Идентификатор JEDEC производителя Хранится в порядке "младший байт первым", с заполнением нулями в конце 72 0x48 Место производства модуля Код, специфичный для поставщика 73–90 0x49–0x5a Номер детали модуля ASCII, с пробелами в конце 91–92 0x5b–0x5c Код ревизии модуля Код, специфичный для поставщика 93 0x5d Десятки лет (0–9: 0–90) Годы (0–9) Дата производства (ГГММ) 94 0x5e Десятки недель (0–5: 0–50) Недели (0–9) 95–98 0x5f–0x62 Серийный номер модуля Код, специфичный для поставщика 99–125 0x63–0x7f Данные, специфичные для производителя Может быть расширенным профилем производительности 126 0x7e 0x66 для 66 МГц, 0x64 для 100 МГц Поддержка частоты Intel 127 0x7f CLK0 CLK1 CLK3 CLK3 90/100 °C CL3 CL2 Concurrent AP Битовая карта функций Intel

Расширения

Стандарт JEDEC определяет лишь часть байтов SPD. Наиболее важные данные умещаются в первые 64 байта, а некоторые из оставшихся зарезервированы для идентификации производителя. Однако обычно используется EEPROM объемом 256 байт. Оставшееся место находит применение в различных целях.

Специфическая память производителя

Обычно некорректно записывают информацию в определенные области памяти, чтобы привязать модули памяти конкретного производителя к определенной системе. Компания Fujitsu Technology Solutions известна тем, что использует этот метод. Добавление в систему других модулей памяти обычно приводит к отказу в работе или другим защитным мерам (например, необходимости нажимать F1 при каждой загрузке). Это вывод данных с модуля памяти объемом 512 МБ производства Micron Technologies, предназначенного для Fujitsu Siemens Computers – обратите внимание на строку "FSC". BIOS системы отклоняет модули памяти, которые не содержат эту информацию, начиная со смещения 128h. Некоторые ноутбуки Packard Bell на базе процессоров AMD также используют этот метод, при этом симптомы могут быть разными, но это может привести к мигающему курсору вместо звукового сигнала. К слову, это также может быть признаком повреждения BIOS. При этом увеличение объема памяти с 2 ГБ до 4 ГБ также может вызвать проблемы.

Чтение и запись информации в ОДП

Производители модулей памяти записывают информацию SPD в EEPROM на модуле. BIOS материнской платы считывает информацию SPD для настройки контроллера памяти. Существует несколько программ, способных читать и изменять информацию SPD на большинстве, но не на всех чипсетах материнских плат. Программа dmidecode может декодировать информацию о памяти (и другие данные) и работает в Linux, FreeBSD, NetBSD, OpenBSD, BeOS, Cygwin и Solaris. dmidecode не обращается к информации SPD напрямую; она сообщает данные SMBIOS о памяти. Эта информация может быть ограничена или неточной. В системах Linux и FreeBSD, пользовательская программа decode dimms, предоставляемая инструментами i2c, декодирует и выводит информацию о любой памяти с информацией SPD в компьютере. Для этого требуется поддержка контроллера SMBus в ядре, драйвер ядра EEPROM, а также подключение SPD EEPROM к SMBus. В старых дистрибутивах Linux, decode dimms.pl был доступен как часть lm-sensors. OpenBSD включил драйвер (spdmem(4)) начиная с версии 4.3 для предоставления информации о модулях памяти. Драйвер был портирован с NetBSD, где он доступен с выпуска 5.0. Coreboot считывает и использует информацию SPD для инициализации всех контроллеров памяти в компьютере, включая параметры таймингов, размер и другие свойства. Системы Windows используют такие программы, как HWiNFO, CPU-Z и Speccy, которые могут читать и отображать информацию о модулях DRAM из SPD. Чтение и запись информации SPD, независимое от чипсета, осуществляется путем прямого доступа к EEPROM памяти с помощью аппаратного и программного обеспечения для программирования EEPROM. Старые ноутбуки нечасто используются как универсальные SMBus-ридеры, поскольку внутренняя EEPROM на модуле может быть отключена после считывания BIOS, что делает шину по сути доступной для использования. Метод заключается в установке низкого уровня на линиях A0 и A1, чтобы отключить внутреннюю память и разрешить внешнему устройству доступ к SMBus. После этого пользовательская сборка Linux или приложение DOS может получить доступ к внешнему устройству. Распространенное применение – восстановление данных с микросхем памяти ЖК-панелей для установки универсальной панели в проприетарный ноутбук. На некоторых чипах также рекомендуется разделять линии защиты от записи, чтобы встроенные чипы не были стерты во время перепрограммирования. Связанная техника – перепрошивка чипов веб-камер, часто поставляемых с ноутбуками, поскольку скорость шины значительно выше и ее можно даже изменить, чтобы чипы, совместимые с 25x, можно было считать для последующего клонирования uEFI в случае отказа чипа. К сожалению, это работает только с DDR3 и более ранними версиями, поскольку DDR4 использует другую систему безопасности и обычно может быть только прочитан. Можно использовать инструмент SPDTool или аналогичный и заменить чип на тот, у которого линия WP свободна, чтобы его можно было изменить на месте. На некоторых чипсетах может появиться сообщение "Несовместимый драйвер SMBus?", что также предотвращает чтение.

Управление светодиодом RGB

Некоторые модули памяти (особенно в игровых ПК) поддерживают RGB-светодиоды, управляемые проприетарными командами SMBus. Это позволяет управлять цветом светодиодов без дополнительных разъемов и кабелей. Драйверы ядра от различных производителей, необходимые для управления подсветкой, неоднократно использовались в 2020 году для получения доступа, варьирующегося от полного доступа к памяти ядра до управления MSR и портами ввода-вывода.

На старом оборудовании

Некоторые старые устройства требуют использования SIMM-модулей с параллельным определением присутствия (чаще называемым просто определением присутствия или PD). Некоторые из этих устройств используют нестандартную кодировку PD, особенно компьютеры IBM и принтеры Hewlett Packard LaserJet и другие принтеры.