SPD: схема последовательного детектирования


Современная индустрия время от времени вводит в употребление новые технологии ДОЗУ, которые обретают черты индивидуальности, начиная от архитектурных особенностей ядра и интерфейсных схем, и заканчивая форм-фактором модуля памяти. Однако ни один современный модуль памяти не может обойтись без крайне необходимого компонента — микросхемы SPD (Serial Presence Detect). Интерфейс последовательного детектирования (дословно переводится как "последовательное определение наличия"), регламентированный на данный момент для всех модулей памяти форм-фактора SIMM/DIMM/RIMM, использует шину управления системой (SMBus — System Management Bus), совместимый со спецификацией Inter-IC (I2C или IIC), посредством которого простые микросхемы могут общаться с остальной частью системы. Справедливости ради, стоит заметить, что интерфейсы SMBus и I2C различаются по нескольким категориям, куда входят электрические (основное отличие) и временные параметры (тайминги), используемый транспортный протокол и режимы работы. Несмотря на эти различия, физический интерфейс и принципы, положенные в основу этих шин, абсолютно одинаковы (точнее, SMBus базируется на принципах функционирования IIC), поэтому они могут совместно использоваться в системе. Непосредственно коммуникации микросхемы SPD EEPROM (электрически перепрограммируемое ПЗУ, содержащее специфические данные) на модуле памяти и управляющего контроллера осуществляются при помощи шины SMBus, использующей, как уже говорилось, IIC-совместимый транспорт.

Двухпроводная шина SMBus берет свое начало еще в 1994 году. В то время этот протокол являлся составной частью спецификации ACCESS.bus, как альтернативы интерфейсу RS-232C, впоследствии (в 1996 году) "перекочевав" в часть стандарта SBS (Smart Battery System), который носит открытый статус с 1995 года. В 1997 году SMBus был объединен с другим расширенным интерфейсом — ACPI (Advanced Configuration and Power Interface), став его неотъемлемой частью.

Шина IIC, предназначенная для коммуникаций между отдельными ИС (Inter-IC — Inter- Integrated Circuit), является разработкой корпорации Philips. Первая версия данного стандарта, опубликованная в 1992 году, дорабатывалась в 1995 и 1997 годах, что отражено в соответствующих документах. Следующая версия 2.0 была доступна только через шесть лет (в 1998 году) и включает довольно внушительный список доработок. Нынешний стандарт I2C версии 2.1, принятый в январе 2000 года, вносит лишь небольшие изменения по сравнению со вторым релизом. Вообще, SMBus, ACCESS.bus и SBS являются полностью открытыми стандартами, базирующимися на идее именно IIC, что дает возможность их совмещения. Более подробную информацию относительно спецификаций интерфейсов Inter-IC, SMBus и совместимых можно найти в документах [25]-[36] из "Списка использованных источников".

Принцип использования шины SMBus в случае SPD сводится к передаче данных от микросхемы EEPROM, установленной на модуле, соответствующим регистрам контроллера памяти, находящегося в составе северного моста или концентратора контроллеров основных интерфейсов через SMBus-интерфейс объединенного контроллера периферийных компонент (южный мост, или концентратор контроллеров ввода/вывода) при помощи системного BIOS. Таким образом система получает все необходимые данные о модуле и настраивается на оптимальный режим работы, согласно записанным в микросхему SPD значениям. Общий стандарт SPD (JEDEC Standard No. 21-С, часть 4.1.2) определен на уровне объединенного совета разработчиков электронных устройств (JEDEC — Joint Electronic Device Engineering Council) и предусматривает единую байтовую карту программирования в шестнадцатиричном (HEX) коде, где размещаются данные общим объемом 2048bit (или 256 байтовых полей) — это делается с целью создать общий стандарт записи основной информации, всесторонне классифицирующей определенный модуль памяти.

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

Интерфейсный протокол (SPD Interface Protocol) характеризует электрические (характеристики по постоянному, переменному току и интерфейс соединения — I2C, Microwire, SPI и т.д.), геометрические (упаковка — размер корпуса, геометрия выводов и т.д.) и физические параметры используемой микросхемы EEPROM.

Последовательность данных и размер карты программирования (Data Order and PD Size) характеризуют объем фактически используемой памяти в микросхеме и размер одной ячейки (стандартно используется один байт). Кроме чего, как уже упоминалось, адресная карта содержит резервные байты (поля), которые могут использоваться при необходимости для описания параметров новой фундаментальной технологии.

Различный тип используемых данных (SPD Data Types) характеризуется (но не ограничивается) следующими моментами:

  • Элементы таблицы указателей (Look Up Table (LUT) Entries). Определенные данные, используемые в SPD, организованы в виде ряда точек входа в таблицу (набор параметров). Каждая точка входа (элемент) содержит один или более байт информации и представляет специфическую характеристику (параметр) — например, специальные таблицы для параметров типа tRAC (Access time from RAS# Active — временная задержка доступа к данным относительно установки адреса строки), tCAC (Access time from CAS# Active — задержка сигнала CAS#, равная времени дешифрации адреса столбца), количество банков, количество адресных строк и столбцов, тип применяемой схемы коррекции ошибки, используемая частота регенерации, ширина шины данных и т.д. Каждый элемент располагается в сводной таблице (Look Up Table), согласно устанавливаемых требований к дешифрации данных в рамках стандарта JEDEC Std No. 21-C-4.1.2.
  • Двоичные (бинарные, BIN) данные (Binary Data) — это данные, применяемые для побитового представления (кодирования) записываемой в SPD информации. Бинарная последовательность байта (8bit) разделяется две группы: более (MSB — Most Significant Bits) и менее (LSB — Less Significant Bits) важные биты. Соответственно (слева направо), первая группа [7:4], состоящая из 4bit, определяет более важные (старшие) биты, а вторая группа [3:0] — остальные, менее важные (младшие) биты. Данное разбиение очень удобно применять в преобразовании и используется при кодировании на основе таблиц указателей, где байтовое поле разделяется на два субполя: А, определяемое четырьмя старшими битами (4MSB), и В, включающее четыре младших (4LSB). Например, двоичная последовательность 10100101 переводится в шестнадцатиричное представление так: 1 — последовательность разбивается на две группы слева направо как 1010 (стандартное субполе А) и 0101 (стандартное субполе В); 2 — каждая группа представляется в десятичном (DEC) виде: 10 и 5 соответственно для старших и младших бит; 3 — полученные два числа переводятся в шестнадцатиричное представление: Ah и 5h соответственно; 4 — преобразованные значения группируются в шестнадцатиричную последовательность: A5h. Индекс "h" указывает, что данное значение записано в шестнадцатиричном коде, тем не менее в SPD записывается значение без индекса. Неиспользуемые (пустые) байты обязательно кодируются как 00h, поскольку пустые поля в карте программирования не допускаются. Байты, содержащие факультативные (необязательные) данные, также должны иметь значение 00h, если никакой полезной информации не вносится. Собственно, сама длина субполя А/В — величина непостоянная, зависит от конкретно представляемого параметра и может использовать разные схемы: 4/4, 5/3, 6/2 1/7 и т.д.
  • Необязательные (факультативные) данные (Optional Data). Настоящий стандарт позволяет производителям конечной продукции вставлять в SPD EEPROM собственные специфические данные (байты 64-125 и 128-255). Эти данные включают идентификационный код производителя (ID), серийный номер модуля и другие особенности, кодируемые в ASCII-коде или в шестнадцатиричном коде. Например, используя ASCII-код, данные кодируются на основании таблицы, представляющей отдельные символы в виде "цифровой пары", состоящей из первой (FHDP — First Hex Digit in Pair) и второй (SHDP — Second Hex Digit in Pair) цифры.
Кодирование данных на основании ASCII-кода
FHDP SHDP
0 1 2 3 4 5 6 7 8 9 A B C D E F
2 BS        ( )    -  
3 0 1 2 3 4 5 6 7 8 9      
4  A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z     
6  a b c d e f g h i j k l m n o
7 p q r s t u v w x y z     

Примечание: BS (Blank Space) — пробел

  • Контрольная сумма (Checksum) предусмотрена спецификацией и необходима для проверки правильности записанных данных. Алгоритм вычисления контрольной суммы довольно прост: 1 — преобразование бинарной информации, содержащейся в байтах 0-62, в десятичную; 2 — суммирование всех преобразованных чисел из байт 0-62; 3 — деление полученной суммы на общее количество байт (256) до целого числа; 4 — преобразование остатка от деления (получаемое число меньшее 256) в двоичный код; 5 — запись результата в байте 63 в двоичном коде.
Пример проверки контрольной суммы
Адресные байтыДвоичное значениеДесятичное представлениеКомментарий
00010010036 
111111110254 
2000000000 
3000000000 
000000000 
 
60000000000 
61000000000 
6200000000  
  290Сумма всех десятичных цифр
  290/256Деление для получения целого числа
  34Сохранение остатка
  00100010Преобразование остатка в двоичный код
630010001034Занесение преобразованного числа в байт 63

Содержание SPD (SPD Content) разделяется на основные группы, которые определяют классификацию хранящихся в EEPROM данных на категории.

Основные информационные байты SPD
БайтТип данныхОписание
0Объем записанной информации в EEPROMЭлемент LUT
1Общий информационный объем EEPROMЭлемент LUT
2Фундаментальный тип памятиЭлемент LUT
3-xxСпецифические установки описания используемой памятиУстановки
xx-60Дополнительные специфические установкиУстановки
33-61Определенные описания специфики используемой памятиУстановки
62Указатель ревизии SPD (номер текущей версии SPD)LUT
63Контрольная сумма байт 0-62Checksum
64-71Идентификационный код производителя по JEP106LUT
72Месторасположение производителя модуля памятиФакультативно
73-90Производственный номер изготовителя модуля памятиФакультативно
91-92Код ревизии модуля памятиФакультативно
93-94Дата производства модуля памятиBCD
95-98Основной последовательный номер модуля памятиФакультативно
99-125Специфические данные производителя модуля памятиФакультативно
126-127Зарезервированные байтыЗарезервировано
128-255Открытая зона для внесения дополнительной информацииДополнительно

Примечание: BCD (Binary Coded Decimal) — двоичное представление десятичного числа.

Информацию, записываемую в схеме последовательного детектирования, схематически можно разбить на ряд отдельных характеристик:

  • Байт 0 (Number of Bytes used by Module Manufacturer) характеризует полезный объем информации — количество используемых байт, куда записана информация независимо от типа используемых данных.
  • Байт 1 (Total SPD Memory Size) указывает общий информационный объем микросхемы, который может использоваться для записи данных, учитывая также нерегламентированный участок (байты 128-255).
  • Байт 2 (Fundamental Memory Type) указывает фундаментальный тип используемой памяти. Сюда входит память типа FPM DRAM, EDO DRAM, SDRAM, VCSDRAM, DDR SDRAM, RDRAM, MROM, EEPROM и т.д (память RDRAM регламентируется собственным стандартом программирования карты SPD). Новые фундаментальные разновидности памяти могут быть включены в спецификацию в качестве дополнения после принятия соответствующего раздела поправки в общем стандарте. Если принимаемая технология полностью обратно совместима с уже существующей технологией, то это должно отразиться в дополнительных (Superset) "технологических" установках, если нет — описывается в резервируемых полях, что отражается в поправках.
  • Байты 3-31 (Descriptions of Module Specific Features) предназначаются для описания специфических особенностей используемого модуля памяти. Сюда входят как общие данные, предназначенные для описания используемых микросхем памяти и питающего протокола, так и различные временные параметры, настроенные на оптимальный режим работы и учитывающие особенности типа используемой памяти.
  • Байт 32 (Superset Memory Type) отражает обратную совместимость используемой разновидности памяти с уже стандартизированной ранее. Полезность использования этой информации очевидна — если система рассчитана на функционирование в конкретном "фундаментальном" режиме, то замена модуля на полностью обратно совместимый теоретически никак не отразится на функционировании системы. Однако, данная усовершенствованная (Superset) технология при этом должна быть стандартизирована, что отражается в данных, записываемых в этом байте. Например, ESDRAM является усовершенствованным вариантом SDRAM, и отличается лишь некоторыми деталями, которые предусмотрены соответствующей поправкой к спецификации SPD (JEDEC Std No. 21-C-4.1.2, Appendix H) и заносятся в байты 33-62.
  • Байты 33-62 (Superset Features) описывают особенности применяемой в модуле фундаментальной архитектуры памяти. Изначально байты 36-61 зарезервированы согласно положению JEDEC JC42.5-97-119 для введения дополнительных параметров, которые будут характеризовать новые технологии, а байт 62 используется для записи номера текущей версии SPD. Так, байты 33-35 уже учтены настоящей спецификацией и использу-ются с момента синхронного ДОЗУ (SDRAM), а остальные байты 36-62 являются уникальными для последующих фундаментальных типов памяти. Например, модуль, основанный на синхронной памяти с применением технологии виртуальных каналов (VCSDRAM — Virtual Channel SDRAM), использует пять последующих байт (36-40), которые характеризуют задержку считывания данных предвыборки для каждого физического банка модуля памяти, задержку между выдачей команд предвыборки (парная предвыборка) и командой чтения/записи, количество адресов сегмента для каждого физического банка модуля памяти, количество используемых каналов и общую ширину всех каналов одного физического банка и всего модуля памяти соответственно. Байты 60 и 61 применяются в SPD модулей, использующих улучшенное синхронное ДОЗУ (ESDRAM — Enhanced SDRAM), и определяют соответственно специфические атрибуты и дополнительную информацию о микросхеме ESDRAM. Все подобного рода особенности также должны быть учтены в соответствующих поправках к общему стандарту (Appendix).
  • Байт 63 (Checksum) предназначен для записи контрольной суммы (00h-FFh), характеризующей правильность записанных параметров в байтах 0-62, алгоритм вычисления которой приводился ранее.
  • Байты 64-127 (Module Manufacturers Data) используются исключительно для внесения конкретизирующей информации о производителе модуля памяти.
  • Байты 64-71 (Manufacturer's JEDEC ID code per EIA/JEP106) предоставляют информацию (код), идентифицирующую производителя модуля согласно спецификации JEDEC EIA/JEP106. Значение 00h не применяется в байтах 64-67 (банк 1), а комбинация 7Fh (продолжение кода, Continuation) индицирует, что данный код вышел за пределы данного диапазона и продолжится в байтах 68-71 (банк 2). Значения 00h и FFh могут использоваться в байтах 68-71, если они не используются в банке 1. Так, каждый байт содержит 7bit полезной информации, плюс дополнительный старший бит четности, и может "разместить" в себе 127 идентификационных кодов вендоров и одну постоянную резервную комбинацию 7Fh, означающую продолжение кода в следующем байте. Например, корпорация IBM имеет идентификационный код в первом байте и кодируется как A4h (собственный код) в байте 64, и 00h в байтах 65-71. Корпорация Kingston имеет кодовую ячейку во втором байте, поэтому для нее в байт 64 запишется значение 7Fh ("переполнение"), в байт 65 собственный код 98h, а последующие байты 66-71 заполняются 00h. Полный список идентификационных номеров системных интеграторов опубликован в документе [13].
  • Байт 72 (Manufacturing Location) содержит необязательную информацию о местоположении производителя. Поскольку спецификация SPD не содержит таблицы декодирования данной информации о производителе, эти данные могут быть внесены отдельным системным интегратором, который точно знает карту кодирования соответствия вносимой информации.
  • Байты 73-90 (Manufacturer's Part Number) используются для внесения индивидуальной информации в 6bit ASCII-формате, характеризующей сокращенный производственный номер конкретного продукта от конкретного производителя. Иными словами, эта 18-байтная последовательность факультативных данных представляется на основе ASCII-кода (таблица соответствия приводилась ранее). Если количество исполь-зуемых в номере символов меньше 18, то оставшиеся менее важные байты (символы) заполняются "пробелами" (20h). Например, 13M32734BCD-260Y кодируется как 31334D33323733344243442D323630592020h.
  • Байты 91-92 (Revision Code) отражают код ревизии модуля в виде двузначного буквенно-цифрового кода типа rr (или "R") плюс "пробел", кодируемый в ASCII-формате. Данный код не предусматривается спецификацией, аналогично байту 72, и применяется крайне редко. Например, схематически — rr20.
  • Байты 93-94 (Date of Module Manufacture) применяются для внесения даты изготовления модуля, которую производитель может вносить индивидуально. Информация представляется двумя байтами, характеризующими год (yy) и неделю (ww) изготовления. Байт 93, определяющий год, характеризуется бинарным представлением десятичного числа (BCD — Binary Coded Decimal) и записывается как 00h-63h, соответствуя действительному 00-99 (десятично). Байт 94, определяющий неделю, записывается как 01h-34h, соответствуя действительной 01-52 (десятично). Например, модуль, произведенный в 1999 году на 15 неделе, в карте программирования запишется как 630Fh: 63h — в байт 93, а 0Fh — в байт 94.
  • Байты 95-98 (Module Serial Number) характеризуют серийный номер модуля памяти, содержащий 4 байта информации типа ssssssss. При этом производитель может применять абсолютно любой метод декодирования информации, чтобы поддерживать уникальный номер для каждого модуля памяти. Понятно, что данная информация дополняет производственный код (байты 73-90).
  • Байты 99-125 (Manufacturers Specific Data, Open Area) предназначены для внесения дополнительной информации любого характера, почему и относятся к типу "открытой" (свободной) зоны (Open Area).
  • Байты 126-127 (Reserved) являются зарезервированными и, согласно спецификации, не могут быть переназначены в дальнейшем. Их используют для внесения параметров соответствия частоты функ-ционирования модуля, согласно спецификации Intel PC SDRAM Serial Presence Detect Specification, начиная с ревизии 1.2А. Байт 126 содержит информацию о частоте функционирования модуля памяти: 66MHz (РС66) соответствует значению 66h, 100MHz (РС100) — 64h, а 133MHz (РС133) — 85h. Вообще надо заметить, что значение 85h указывалось лишь в проекте следующей версии спецификации, но на настоящий момент так и не утверждено, поэтому, принимая во внимание полную обратную совместимость, модули PC133 в байте 126 содержат значение 64h, соответствующее стандарту РС100. Действительное же соответствие конкретному стандарту РС66, РС100 или РС133 рекомендуется определять по временным параметрам, записанным в байтах 9, 10, 23, 30, 32-35 и сверять с соответствующими значениями, установленными требованиями данных спецификаций, которые можно найти в документе [37]. Байт 127 указывает дополнительные данные о частоте функционирования (100/133 MHz) и атрибутах модуля. По этой информации определяется задержка выдачи сигнала CAS# (CL3, CL2), режим авторегенерации (AP), температурный тестовый интерфейс (JTemp) и нагрузка на линии синхросигналов — для одно- (CLK0/CLK3) и двухстрочных (CLK[3:0]) модулей. Например, поддержка CL3 записывается как 04h, поддержка CL3, CL2 как 06h, а поддержка всех особенностей — FFh.
Атрибуты частоты функционирования (байт 127)
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
CLK0 CLK1 CLK2 CLK3 JTemp CL3 CL2 AP
1 или 0 1 или 0 1 или 0 1 или 0 1 или 0 1 или 0 1 или 0 1 или 0
  • Байты 128-255 (System Integrators Specific Information) представляют возможность внесения дополнительной информации конкретным системным интегратором, который может использовать оставшийся объем по своему усмотрению — они, как и байты 99-125, являются "открытыми".

Транспортный протокол SPD

Считывание/запись данных из/в EEPROM производится по линии ввода/вывода SDA при помощи сигнала SCL (входящий сигнал синхронизации чтения/записи данных) совместно с сигналами адреса SA[2:0], предусмотренных цоколевкой модуля. Система синхронизируется с микросхемой SPD на частоте 80kHz.

Карта SPD должна программироваться один раз и больше никогда не меняться — по требованиям основного стандарта после внесения данных в EEPROM, вход WP (Write Protect) устанавливается в положение "non-write" — так исключается возможность случайного стирания или умышленной замены содержимого микросхемы. В общем случае вывод WP микросхемы EEPROM, отвечающий за защиту от записи, соединяется с сигнальной линией SWP модуля, на которой уровень сигнала активный высокий по умолчанию (в случае низкого уровня микросхема открыта для записи). Линии SDA и SCL имеют схему включения типа "открытый сток" (Open-drain) или "открытый коллектор" (Open-collector), и требуют внешней подтягивающей нагрузки 47 кОм. Ток утечки источника этих линий должен быть как минимум 3mA, чтобы поддерживать действительный низкий уровень сигнала. С детальным описанием интерфейсов микросхем EEPROM, применяемых для реализации механизма SPD (и не только) в модулях памяти, можно ознакомиться, например, в документе [38].

Основные электрические параметры микросхемы SPD SIMM/DIMM EEPROM
СимволПараметрУсловия тестированияНоминал
VCCПитающее напряжение 3.0-3.6 V
ICCAТок в состоянии активностиfSCL=80kHz5mA
ISBТок в состоянии готовностиVIN=GND или VCC100 µA
ILIВходной ток утечкиVIN=GND или VCC10 µA
ILOВыходной ток утечкиVOUT=GND или VCC10 µA
VILНизкий уровень входного напряжения VCC x0.3 V
VIHВысокий уровень входного напряжения VCC x0.7 V
VOLНизкий уровень выходного напряженияIOL=3.0mA0.4V

Рассмотрим кратко основные команды и фазы функционирования SPD EEPROM на системном уровне. Как уже говорилось ранее, микросхема использует для обмена информацией I2C-совместимый транспорт. Этот протокол характеризует любую пару устройств, передающих и принимающих данные, как передатчик (Transmitter) и приемник (Receiver), соответственно определяя передающее устройство как хозяина шины (Master), а принимающее — как подчиненное (Slave). Хозяин управляет линией передачи данных (SDA) совместно с сигналами SA[2:0] адресации массива EEPROM, и обеспечивает синхронизацию (SCL), в то время как микросхема SPD на модуле памяти все время является подчиненным устройством.

Команда начала (или команда старта, START) инициируется по отрицательному перепаду импульса SDA (по срезу) в момент, когда системный синхросигнал имеет устойчивый высокий уровень (находится в активном состоянии). Вообще говоря, любая команда должна сопровождаться командой старта. Микросхема EEPROM постоянно осуществляет мониторинг линий SDA и SCL, и не входит а фазу ответа пока команда START является активной.

Команда останова (или стоп-команда, STOP) инициируется противоположно команде старта — по положительному перепаду импульса SDA (по фронту) в момент, когда системный синхросигнал находится в высоком состоянии. Данная команда указывает на окончание передачи данных из подчиненного устройства в устройство управления (контроллер). Присутствие STOP в конце цикла чтения (Read) сообщает микросхеме EEPROM о необходимости немедленного перехода в режим ожидания (STBY — STand-BY), а в конце передачи пакета записи (Write) является сигналом начала выполнения внутреннего цикла записи в массив данных микросхемы.

Сигнал подтверждения (ACK или Acknowledge) является своего рода флагом ответа и указывает на успешное выполнение фазы передачи данных. Передающее устройство освобождает шину SDA после того, как выполнена посылка 8bit данных. В течение следующего девятого импульса системного синхросигнала приемник переводит шину в низкое состояние, таким образом подтверждая прием пакета данных.

В течение выполнения фазы передачи данных микросхема EEPROM согласует посылки по линии SDA с каждым фронтом системного синхросигнала SCL. Для согласованной работы устройств, сигналы на шине данных должны оставаться в активном состоянии в течение всей длительности импульса системного синхросигнала, включая время нарастания/спада (фронта/среза импульса) и изменять текущее состояние только в промежутке между срезом предыдущего и фронтом следующего синхросигнала.

Операции записи (Write Operations) данных состоят из двух фаз: запись байта (Byte Write) и подтверждения опроса (Acknowledge Polling). После приема подчиненным устройством адреса байта отрабатывается подтверждающий ответ и выполняется цикл ожидания следующего байта данных, который также отрабатывается сигналом подтверждения (ACK). В конце передачи управляющее устройство прекращает посылки данных выставлением на шину команды STOP и подчиненное устройство входит в цикл внутренней записи, в течение которого входы микросхемы EEPROM отключаются и приемники сигнала не реагируют ни на какие запросы от хозяина шины (передающего устройства).

После того, как отработана команда STOP, означающая окончание передачи записываемых данных от хозяина, микросхема EEPROM входит во внутренний цикл записи, а управляющее устройство начинает опрос. Эта процедура включает в себя формирование команды начала (START) и последующего за ней адреса подчиненного устройства для выполнения операции записи, причем сигнала подтверждения не требуется в случае если микросхема занята выполнением внутреннего цикла записи. В случае, если микросхема освободилась, сигнал подтверждения возвратится и контроллер продолжит выполнение следующей операции чтения/записи.

Операции чтения (Read Operations) происходят практически аналогично операциям записи, исключая то, что бит R/W адреса подчиненного устройства всегда установлен в 1 (чтение, Read). Существуют три основные операции чтения из EEPROM: чтение текущего адреса (Current Address Read), произвольное чтение (Random Read) и последовательное чтение (Sequential Read).

Архитектурно, микросхема EEPROM имеет внутренний, инкрементирующийся на единицу, адресный счетчик, содержащий адрес байта, к которому было последнее обращение (текущий адрес). Поэтому, если последний доступ (на чтение или запись) был по адресу N, то следующая операция чтения будет адресована данным по адресу N+1. При получении адреса необходимого подчиненного устройства с установкой R/W=1, микросхема подтверждает прием и передает байт данных. Управляющее же устройство не подтверждает прием, однако формирует команду останова (STOP), после которой микросхема EEPROM останавливает передачу данных и входит в состояние ожидания.

Операции произвольного чтения (Random Read) разрешают доступ контроллеру к любому участку массива произвольным образом. Перед тем, как назначить адрес подчиненного устройства с установкой на чтение, управляющее устройство сначала должно выполнить операцию пустой записи. Контроллер формирует начальное условие, адрес микросхемы, а затем адрес байта, который необходимо считать. После возврата подтверждения адреса, передающее устройство немедленно реформирует команду старта и адрес подчиненного устройства с установкой бита R/W в 1 — это следует сразу за возвратом подтверждения от микросхемы EEPROM, в результате чего считывается байт данных. Управляющее устройство ведет себя аналогично случаю с чтением текущего адреса, описываемого выше.

Операции последовательного чтения (Sequential Read) могут быть начаты по текущему адресу или по произвольному. Первый байт передается аналогичным методом, применяемым в других режимах чтения; тем не менее, контроллер отвечает подтверждением, означающим готовность приема следующей порции данных. Микросхема EEPROM продолжает посылать данные по каждому полученному сигналу подтверждения. Данные выдаются последовательно, начиная от первого адреса N по схеме N+1. Внутренний адресный счетчик инкрементирует все адресные биты, разрешая считывание полностью всего содержимого массива памяти микросхемы в течение одной операции, после чего "откатывается" (содержимое счетчика обнуляется) и данные начинают выдаваться с 0-адреса по каждому сигналу подтверждения пакетами по 8bit.

Управляющее устройство при этом, понятно, никаких сигналов подтверждения или останова не посылает, поскольку чтение данных идет последовательно и непрерывно — именно этот метод применяется при считывании данных контроллером из EEPROM при инициализации подсистемы памяти (при включении питания или после сброса). Подробнее описание транспорта следует смотреть в документах [12], [14], [26]-[29], [34], [35] и [38].

Описание общей карты программирования SPD

Стандарт JEDEC Std No. 21-C-4.1.2 регламентирует применение схемы последовательного детектирования в любых модулях памяти независимо от типа применяемого ОЗУ/ПЗУ и форм-фактора. Это придает данной схеме исключительную гибкость и универсальность, поскольку стандарт предусмотрен для настоящих и последующих архитектур, и включает резервные поля для внесения специальной информации, которая потребуется в будущем. Когда стандартизируется специфическая архитектура, отличная от базовой, предусматривающая собственные особенности функционирования, специфическую организацию, индивидуальные характеристики и т.д. — все отражается в схеме SPD: отличия заносятся в резервные биты (если таких характеристик не предусмотрено в текущей), а в общей спецификации описывается соответствующим дополнением, кроме чего, на каждую отдельную характеристику должна присутствовать адресная карта. Все модули памяти, имеющие разный форм-фактор, содержащие память со своими архитектурными особенностями, и в которых применяется схема последовательного детектирования, должны отвечать следующим пунктам: 1 — известный интерфейсный протокол; 2 — подходящая (приемлемая) конфигурация модуля; 3 — стандартизированная архитектура ("глубина", "ширина", количество используемых банков, схема адресации и т.д.); 4 — поддерживаемая схема проверки ошибок (ECC, Parity и т.д.); 5 — стандартная или одобренная комиссией "проводная диаграмма" (монтаж и разводка сигнальных трасс на модуле памяти).

Общая схема назначения адресных байт SPD SIMM/DIMM
БайтНазначение
0Общий объем текущей информации, записанной в EEPROM
1Общее количество байт информации в микросхеме SPD
2Фундаментальный тип используемой памяти
3Общее количество адресных линий строки модуля, включая "смешанный" объем
4Общее количество адресных линий столбца модуля, включая "смешанный" объем
5Общее количество физических банков модуля памяти
6-7Внешняя шина данных модуля памяти
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)
36-61Зарезервировано по JEDEC JC42.5-97-119 для дополнений описания будущих архитектур
62Номер текущей версии SPD
63Контрольная сумма байт 0-62
64-71Идентификационный код производителя по JEP106
72Информация о производителе модуля
73-90Уникальный номер производителя модуля
91-92Код ревизии (версии) модуля
93-94Дата производства модуля
95-98Основной серийный номер модуля
99-125Специфические данные производителя модуля
126-127Специфические атрибуты частоты функционирования модуля
128-255Пустые байты для внесения необходимой дополнительной информации

Примечание: байты 15-30 используются исключительно для характеристики модулей памяти, использующих разновидности синхронного ДОЗУ.

Рассмотрим все возможные способы кодирования/декодирования информации в SPD на нескольких примерах. Общий объем данных, записанных в микросхеме SPD, обычно составляет 128 байт, но производитель может заполнить и больше — вплоть до всех 256. Так, байт 1 как раз характеризует объем записанной полезной информации. Этот байт кодируется по обычной схеме (прямое преобразование "по нарастающей") — соответствующее значение количества байт представляется двоичной последовательностью, которая переводится в шестнадцатиричное значение, согласно схеме, описываемой ранее.

Общий объем информации, записанной в SPD (байт 1)
Объем, байтБит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
000000001
100000010
200000011
300000100
xxxxxxxx
12810000000
xxxxxxxx
25511111111

Так, микросхема SPD EEPROM, содержащая объем полезной информации, составляющий, например, 128 байт будет в поле байта 1 содержать шестнадцатиричное значение 80h (двоичная последовательность 10000000), а микросхема, использующая все 256 байт — значение FFh (двоичная последовательность 11111111).

Различные фундаментальные архитектуры используемого типа памяти характеризуются байтом 2, который также кодируется по схеме прямого преобразования. Рассмотрим фрагмент таблицы "битовой классификации" для характеристики используемого фундаментального типа ДОЗУ.

Кодирование в SPD фундаментального типа ДОЗУ (байт 2)
Тип памятиБит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
Reserved00000000
FPM DRAM00000001
EDO DRAM00000010
Pipelined Nibble00000011
SDRAM00000100
Multiplexed ROM00000101
DDR SGRAM00000110
DDR SDRAM00000111
VC SDRAM00001000
xxxxxxxx

Отсюда видно, что байт 2 в модуле памяти, использующем, например, фундаментальный тип ДОЗУ VCSDRAM будет содержать значение 08h, а, скажем, SDRAM — 04h.

Байт 9 характеризует временной цикл с максимальной задержкой сигнала CAS# (CL), что, понятно, является составной цифровой величиной. Данный байт использует таблицу указателей (LUT), применяя схему разделения байта на две "группы", поскольку временные параметры могут быть не просто целыми числами, а и содержать дробные значения. Так, с учетом разбиения таблицы на "точки входа", поле более важных бит именуют субполе А (Subfield A), а менее важных — субполе В (Subfield B). Поэтому для кодирования информа-ции, ее в данном случае делят на две составляющие — целые и дробные значения, соответственно прямо кодирующиеся в субполях А и В.

Временной цикл с максимальной задержкой сигнала CAS# (байт 9)
НаносекундыБит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
Кодирование целого значения временного цикла (в наносекундах) — субполе А
1ns0000Смотреть значения субполя В
2ns0001
3ns0010
4ns0011
5ns0100
хххх
15ns1111
Кодирование дробного значения временного цикла (в наносекундах) — субполе B
+0nsСмотреть значения субполя А0000
+0.1ns0001
+0.2ns0010
+0.3ns0011
+0.4ns0100
+0.5ns0101
хххх

Таким образом получается, что если необходимо задать время цикла, равное, например, 10.5ns, то следует провести следующие операции: по субполю А отыскать целое значение 10 (в бинарном виде это выглядит 1010), а по субполю В — дробное значение 0.5 (в двоичной системе 0101). Складывая полученные значения с учетом байтовой организации, информация кодируется следующим образом: по правилу перевода двоичного значения в десятичное получаем для более важных бит, кодирующих целое значение (10ns), двоичную последовательность 1010, соответствующую Ah в шестнадцатиричном коде, а для менее важных бит, кодирующих дробное значение (+0.5ns), — двоичную последовательность 0101, соответствующую 5h в шестнадцатиричном представлении. Общий вид двоичной последовательности (10100101) определяет шестнадцатиричное значение, соответствующее необходимому временному циклу, которое надо внести в ячейку байта 9 — это A5h.

Данный пример демонстрирует стандартную схему 4/4 разделения поля на суб-поля А/В. Другие схемы, отличные от стандартной, применяются для того, чтобы увеличить/уменьшить диапазон значений целых/дробных составляющих конкретного параметра. Примером схемы 1/7 является байт 14, кодирующий ширину шины данных ЕСС модуля, а примером схемы 6/2 может являться байт 25, характеризующий минимальный цикл CLX-2. Подробнее о кодировании аналогичных параметров смотреть в документах [3], [11], [12], [14].

Своего рода "частным случаем" схемы разделения является "суммирование" составляющих по одной строке — такую схему кодирования обычно применяют для параметров, значения которых не превышают восьми, или для кодирования сразу нескольких характеристик — например, ранее рассматриваемый байт 127. Так, в соответствующих битах устанавливается разрешение (1) или запрещение (0) использования какой-то конкретной характеристики, определяемой конкретным битом, после чего полученная двоичная последовательность кодируется по уже известной схеме. Например, байт 16 характеризует поддерживаемые длительности пакетов передачи данных (BL — Burst Length).

Кодирования в SPD размера передаваемого пакета (байт 16)
Бит 7Бит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
BL=PageTBDTBDBL=16BL=8BL=4BL=2BL=1
1 или 01 или 01 или 01 или 01 или 01 или 01 или 01 или 0

Так, если поддерживается передача пакетов длительностью 1, 2, 4 и 8 слов (BL=1, 2, 4, 8), то в соответствующей ячейке таблицы устанавливаются 1 (поддерживается). В результате для данного случая имеем последовательность 00001111, что записывается в байте 16 карты программирования SPD как 0Fh. Если в дополнение к этому поддерживается еще и передача пакетов размера всей страницы целиком (BL=1, 2, 4, 8, Page), то тогда получается последовательность 10001111, что записывается в байт 16 как 8Fh.

Еще одним частным случаем "разделения" является "расстановка флага" в старшем бите (бит 7) байта. Например, байт 12 несет информацию о поддерживаемой длительности цикла регенерации строки логического банка ядра микросхемы памяти. Стандартно, микросхема памяти поддерживает нормальный цикл регенерации (15.625 µs), который обновляет содержимое ячеек страницы памяти через заданный конкретный интервал времени. Однако, регенерация не является "прозрачной" процедурой и в цикле ее проведения производительность падает. Для обхода этой проблемы используют многобанковую логическую архитектуру, которая теоретически кратно количеству используемых банков уменьшает задержку регенерации ячеек массива в сравнении с однобанковой организацией, кроме чего в схемах с независимыми и зависимыми банками имеются некоторые отдельные специфические особенности. Саморегенерация (SR или SEREf — SElfREfresh), как стандартный в настоящее время механизм обновления содержимого ячеек памяти, используется для введения прибора памяти в режим выполнения программы самостоятельного режима регенерации. Этот механизм используется в периоды микропотребления, когда микросхема памяти регенерирует массив путем инкрементирования своего внутреннего счетчика — в таком состоянии она сама осуществляет обновление содержимого ячеек, поскольку в ней запускается свой собственный генератор, синхронизирующий внутренние цепи.

Кодирования в SPD типа и способа регенерации массива ДОЗУ (байт 12)
ПериодБит 7, SR-флагБит 6Бит 5Бит 4Бит 3Бит 2Бит 1Бит 0
Normal (15.625 µs)00000000
Reduced (0.25x)00000001
Reduced (0.5x)00000010
Extended (2x)00000011
Extended (4x)00000100
Extended (8x)00000101
TBD00000110
0ххххххх
Периоды в режиме саморегенерации (SR)
Normal (15.625 µs)10000000
Reduced (0.25x)10000001
Reduced (0.5x)10000010
Extended (2x)10000011
Extended (4x)10000100
Extended (8x)10000101
TBD10000110
1ххххххх

Примечание: Normal — нормальная; Reduced — сокращенная; Extended — расширенная.

Для указания того, что микросхемы памяти в составе модуля поддерживают механизм саморегенрации введен флаг в старший бит (бит 7), характеризующий в конкретном случае, что саморегенерация поддерживается — установка значения бита 7 в "1". Например, если микросхема поддерживает сокращенную на четверть регенерацию — 0.25x (3.9 µs), — то в двоичном представлении байт 12 будет выглядеть как 00000001, что соответствует 01h. Если прибор памяти поддерживает 2х-расширенный режим саморегенерации — SR/2x (31.3 µs), — то байт 12 в этом случае бинарно представляется как 10000011, что соответствует 83h в шестнадцатиричном коде.

Для кодирования/декодирования остальных параметров применяются схемы, аналогичные рассмотренным с небольшими особенностями. Полную информацию о назначении конкретных временных параметров, аббревиатурах, сокращениях и обозначениях, используемых в микроэлектронике (в частности в DRAM) можно найти в документах [1]-[2] из "Списка используемых источников". Более детальную информацию об описании и назначении всех информационных байт, использующихся в схеме последовательного детектирования для различных фундаментальных типов DRAM, регламентированного стандартом JEDEC Std No. 21-C-4.1.2, можно найти в документах [3]-[10]. Электрический интерфейс, монтаж микросхемы EEPROM, ее цоколевка, а также примеры карт программирования для соответствующих модулей памяти, использующих конкретные типы ДОЗУ, можно найти в документах [11], [12], [17]-[20] и [38].

SPD в Direct RDRAM RIMM

Общая схема представления и кодирования/декодирования информации, включая транспортный протокол, в SPD RIMM аналогична общей схеме последовательного детектирования, описываемой ранее, за исключением синхронизации с системой на частоте 100kHz.

Информация кодируется также, как и в SPD SIMM/DIMM, за исключением того, что информационные поля содержат данные, подразделяющиеся на четыре категории: данные, включающие поля связи организации микросхемы EEPROM (SPD), поля специальной информации об используемых микросхемах памяти (DEV), поля специальной информации о модуле (MOD) и поля информации о производителе модуля (OEM).

Основные характеристики микросхемы SPD RIMM EEPROM
СимволПараметрУсловия тестированияНоминал
SVDDПитающее напряжение 2.2-3.6 V
ISVddТок в состоянии активностиfSCL=100kHz5.0 µA
ISVdd1Ток в состоянии готовностиVIN=GND или SVDD100 µA
ISLIВходной ток утечкиVIN=GND или SVDD10 µA
ISLOВыходной ток утечкиVOUT=GND или SVDD10 µA
VSILНизкий уровень входного напряжения SVDD x0.3 V
VSIHВысокий уровень входного напряжения SVDD x0.7 V
VSOLНизкий уровень выходного напряженияIOL=3.0mA0.4V

Большинство параметров, программируемых в SPD на модуле RIMM, являются специфичными относительно архитектуры, и применяются исключительно для характеристики DRDRAM. Поэтому данные параметры не подходят для других, отличных от Direct Rambus DRAM, типов памяти. Несмотря на это, основная спецификация JEDEC Std No. 21-C-4.1.2 и спецификация SPD RIMM в большинстве случаев используют для кодирования факультативных значений описательного характера одни и те же адреса.

Существует четкая взаимосвязь между временными параметрами, использующимися в Direct Rambus SPD, и параметрами самой микросхемы памяти DRDRAM, указанными в соответствующих спецификациях. Эта взаимосвязь определяется специальными пересчетными формулами (Translation Formulas), цель которых — четко описать обратную совместимость между настоящими и будущими микросхемами памяти DRDRAM, которые, возможно, будут обладать лучшими или совершенно другими временными параметрами. Для обеспечения гарантированной совместимости, контроллер памяти RMC должен поддерживать характеристики основных/резервные полей SPD и все существующие передаточные формулы.

Для описания этих зависимостей ввели две таблицы, использующие в качестве размерности исключительно количества циклов (in cycles) для обеспечения полной совместимости значений. Первая таблица содержит формулы релевантности опорных точек отсчета временного параметра (RefPts — Reference timing Points), используемых для преобразования. Значения tCLS и tCAS (параметры задержки ядра) представляют собой поля определенных регистров микросхемы и их значения в формуле представляют собой значения, хранящиеся в соответствующих полях этих регистров. Значение tCPS всегда эквивалентно одному циклу. Остальные данные хранятся в SPD.

Вторая таблица содержит соотношения для преобразований уже непосредственно временных параметров и использует значения вычисленных опорных точек отсчета (RefPts) из предыдущей таблицы. Значение длительности задержки tCDLY хранится в кодированном виде в полях регистров микросхемы памяти, а также в байтах 112-126 карты SPD. Все преобразования являются корректными только тогда, когда выполняется условие равенства длительности цикла tCYCLE из спецификации и хранящегося в SPD в байтах 50-51 значения частоты подачи строба доступа к строке — fRAS. Параметр tRAS,MAX в данной таблице не используется, поскольку измеряется в микросекундах (µs). Все необходимые формулы и зависимости можно найти в документе [14].

Назначение адресных бит SPD RIMM
БайтНазначениеUnitsFC
0Номер текущей версии SPDLUTSPD
1Общее количество байт информации в микросхеме SPDLUTSPD
2Тип используемых микросхем памятиLUTDEV
3Тип используемого модуля памятиLUTMOD
4Количество адресных бит стоки [7:4] и столбца [3:0] для каждого прибораBitDEV
5Количество адресных бит на один банк и тип используемых банков памятиLUTDEV
6Количество одновременно регенерируемых банков микросхемы памятиBitDEV
7Длительность периода регенерации микросхем памяти в ms — tREFmsDEV
8Используемая версия протокола RDRAM LUTDEV
9Поле конфигурации использования устройств смешанного типаN/ADEV
10Минимальный интервал "Precharge-to-RAS" — tRP-R,MIN1/fRASDEV
11Минимальный интервал "RAS-to-Precharge" — tRAS-R,MIN1/fRASDEV
12Минимальный интервал "Activate-to-CAS" — tRCD-R,MIN1/fRASDEV
13Минимальный интервал "RAS-to-RAS" — tRR-R,MIN1/fRASDEV
14Минимальный интервал "Precharge-to-Precharge" — tPP-R,MIN1/fRASDEV
15Минимальная длительность tCYCLE для диапазона А128psDEV
16Максимальная длительность tCYCLE для диапазона А128psDEV
17Диапазон значений длительности задержки ядра tCDLY для диапазона АCycleDEV
18Диапазон значений tCLS и tCAS для диапазона АCycleDEV
19Минимальная длительность tCYCLE для диапазона B128psDEV
20Максимальная длительность tCYCLE для диапазона B128psDEV
21Диапазон значений длительности задержки ядра tCDLY для диапазона BCycleDEV
22Диапазон значений tCLS и tCAS для диапазона BCycleDEV
23Минимальная длительность tCYCLE для диапазона C128psDEV
24Максимальная длительность tCYCLE для диапазона C128psDEV
25Диапазон значений длительности задержки ядра tCDLY для диапазона CCycleDEV
26Диапазон значений tCLS и tCAS для диапазона CCycleDEV
27Минимальная длительность tCYCLE для диапазона D128psDEV
28Максимальная длительность tCYCLE для диапазона D128psDEV
29Диапазон значений длительности задержки ядра tCDLY для диапазона DCycleDEV
30Диапазон значений tCLS и tCAS для диапазона DCycleDEV
31Максимальное время выхода из деактивации (PDN) в фазе А — tPDNXA,MAXµsDEV
32Максимальное время выхода из деактивации (PDN) в фазе B — tPDNXB,MAX64 CFMDEV
33Максимальное время выхода из "дремоты" (NAP) в фазе А — tNAPXA,MAXnsDEV
34Максимальное время выхода из "дремоты" (NAP) в фазе B — tNAPXB,MAXnsDEV
35Максимальная и минимальная частоты функционирования — fIMAX [7:4] и fIMIN [3:0]MHzDEV
36Максимальная частота функционирования микросхем памяти — fIMAX [7:0]MHzDEV
37Минимальная частота функционирования микросхем памяти — fIMIN [7:0]MHzDEV
38Зарезервировано для характеристики внештатного функционирования — ODFN/AN/A
39Максимальный интервал между текущими операциями калибровки — tCCTRL,MAXmsDEV
40Максимальный интервал между операциями калибровки температуры — tTEMP,MAXmsDEV
41Минимальный интервал между разрешением и передачей команды (динамика формирования) проведения температурной калибровки — tTCE,MINCycleDEV
42Максимальный интервал "RAS-to-Precharge" — tRAS-R,MAXµsDEV
43Максимальное время пребывания микросхемы в режиме NAP — tNLIMIT,MAXµsDEV
44Описание тамингов ACTREFPT [7:4] и PCHREFPT [3:0]CycleDEV
45Описание тамингов CPCHREFPT_DC [7:4] и RDREFPT_DC [3:0]CycleDEV
46Описание тамингов RETREFPT_DC [7:4] и WRREFPT_DC [3:0]CycleDEV
47-49ЗарезервированоN/AN/A
50Частота подачи строба доступа к строке — fRAS [11:8], началоMHzDEV
51Частота подачи строба доступа к строке — fRAS [7:0], продолжениеMHzDEV
52Максимальная потребляемая мощность на максимальной частоте, минимальной частоте и максимальное значение температуры всех микросхем, установленных на модуле памяти — PMAX,HI, PMAX,LO и Tj соответственно°CDEV
53Наличие на модуле радиатора, термосенсора и температура на нем — HS и Tplate°CMOD
54Потребляемый ток в состоянии STBY на максимальной частоте (fIMAX) — PSTBY,HI1mADEV
55Потребляемый ток при средней нагрузке на максимальной частоте — PACTI,HI2mADEV
56Потребляемый ток при максимальной нагрузке на fIMAX — PACTRW,HI8mADEV
57Потребляемый ток в состоянии STBY на минимальной частоте (fIMIN) — PSTBY,LO1mADEV
58Потребляемый ток при средней нагрузке на минимальной частоте — PACTI,LO2mADEV
59Потребляемый ток при максимальной нагрузке на fIMIN — PACTRW,LO8mADEV
60Потребляемый ток в режиме "дремоты" — PNAP128 µADEV
61Зарезервировано для будущего параметра термоконтроля — PRESAN/ADEV
62Зарезервировано для будущего параметра термоконтроля — PRESBN/ADEV
63Контрольная сумма байт 0-62N/ASPD
64-71Код производителя модуля памяти (Manufacture ID Code), согласно JEP106N/AMOD
72Информация о производителе модуляN/AMOD
73-90Уникальный номер производителя модуляN/AMOD
91-92Код ревизии производителя модуляN/AMOD
93Год изготовления модуляN/AMOD
94Неделя изготовления модуляN/AMOD
95-98Серийный номер модуляN/AMOD
99Количество используемых микросхем памяти на модулеPCsMOD
100Ширина шины данных модуля памятиBitMOD
101-104Уникальное управление микросхемами памяти (один байт на 8 микросхем)BitMOD
105Напряжение питания [7:4] и интерфейс питающего протокола [3:0]LUTMOD
106Допустимое отклонение напряжения питанияLUTMOD
107ЗарезервированоN/AN/A
108-110ЗарезервированоN/AN/A
111ЗарезервированоN/AN/A
112ЗарезервированоN/AN/A
113ЗарезервированоN/AN/A
114Значение CDLY0/1 для значения длительности задержки ядра tCDLY=3CycleDEV
115Значение CDLY0/1 для значения длительности задержки ядра tCDLY=4CycleDEV
116Значение CDLY0/1 для значения длительности задержки ядра tCDLY=5CycleDEV
117Значение CDLY0/1 для значения длительности задержки ядра tCDLY=6CycleDEV
118Значение CDLY0/1 для значения длительности задержки ядра tCDLY=7CycleDEV
119Значение CDLY0/1 для значения длительности задержки ядра tCDLY=8CycleDEV
120Значение CDLY0/1 для значения длительности задержки ядра tCDLY=9CycleDEV
121Значение CDLY0/1 для значения длительности задержки ядра tCDLY=10CycleDEV
122Значение CDLY0/1 для значения длительности задержки ядра tCDLY=11CycleDEV
123Значение CDLY0/1 для значения длительности задержки ядра tCDLY=12CycleDEV
124Значение CDLY0/1 для значения длительности задержки ядра tCDLY=13CycleDEV
125Значение CDLY0/1 для значения длительности задержки ядра tCDLY=14CycleDEV
126Значение CDLY0/1 для значения длительности задержки ядра tCDLY=15CycleDEV
127Контрольная сумма байт 99-126N/ASPD
128-255"Свободное" поле для внесения дополнительной информацииN/AOEM
256+ЗарезервированоN/AOEM

Примечание: размерность (Units) характеризует единицы измерения указываемых данных; поле категории (FC — Field Category) указывает одну из четырех характеристик информационного поля; значение N/A (Not Available) указывает на неопределенность размерности параметра

Правильность записанных данных в EEPROM проверяется дважды (две контрольные суммы по адресам 63 и 127), поскольку карта программирования RIMM включает в адреса 99-126 строго обязательные (а не факультативные, как в стандартной схеме SPD) данные. Схема проверки выглядит следующим образом: 1 — складываются все данные в бинарном виде по адресам 0-62 и 99-126; 2 — исключаются биты [7:4], кроме младших бит байта [3:0] для каждого диапазона значений отдельно; 3 — полученные результаты сохраняются по адресам 63 и 127 для контрольных сумм 0-62 и 99-126 соответственно.

Более детальную информацию о описании и назначении всех информационных байт, использующихся в схеме последовательного детектирования SPD RIMM для описания RDRAM, регламентированного собственным стандартом, а также примеры карт программирования можно найти в документах [14]-[16] из "Списка использованных источников". Полную информацию о временных параметрах, аббревиатурах, используемых в Rambus DRAM, которые применяются в SPD RIMM, можно найти в документах [1], [2], [21], [22]. Примеры интерфейса модуля RIMM, монтаж микросхемы EEPROM и ее цоколевку можно найти в документах [23], [24].

"Практика" SPD: для чего это нужно

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

Микросхемы, которые используются для производства модулей памяти, в идеале проходят всестороннее тестирование в максимально жестких условиях, после чего прошедшие отбраковку приборы памяти развариваются по модулю и уже тестируются в составе конечного продукта. В процессе тестирования снимаются необходимые параметры, о которых шла речь в статье, и затем на основе значений показателей какой-то большой партии тестируемых модулей выводятся "средние" (оптимальные) параметры, которые и записываются в EEPROM (бывают еще более "лобовые" методы прошивки значений временных параметров) — производитель не будет записывать индивидуальные параметры для каждого отдельного модуля, поскольку это отнимает огромное время. Понятно, что из этой партии какие-то модули обладают характеристиками лучшими (иногда намного), чем записанные оптимальные значения, и есть шанс несколько поднять планку производительности. Эта схема является приближенной к идеальной — в подавляющем большинстве случаев на практике значения необходимых временных параметров уже известны (они описаны в соответствующих спецификациях на стандарт) и в SPD EEPROM их средние значения могут быть записаны уже заранее. Поэтому, если на модуле предусмотрен механизм защиты от записи, микросхема EEPROM может монтироваться на плату в одном монтажном цикле с микросхемами памяти. В случае незащищенного модуля, которые обычно встречаются, вариантов занесения данных в микросхему SPD довольно много. Собственно, данный технологический цикл у разных производителей может различаться, поэтому выше приведенная схема является лишь одним из примеров.

Начиная с этого момента ситуация кардинально меняется: любой конечный пользователь будет заинтересован в том, чтобы выжать из модуля памяти максимум на что он способен — будь то модуль со средними действительными характеристиками, или с намного лучшими средних. Физическое изолирование вывода WP (линию SWP просто подтягивают внешним резистором, обеспечивая постоянный высокий уровень сигнала), ответственного за "переключение" режима работы EEPROM (чтение/запись), является жесткой рекомендацией спецификации для производителей модулей памяти, однако на практике далеко не все придерживаются подобного рода требований. Конкретная реализация механизма защиты является скоре исключением, которое можно встретить разве что у именитых производителей модулей, поскольку обычно возможность перезаписи содержимого SPD открыта. Отдельно хочется обратить внимание на то, что механизм защиты может быть также жестко реализован конкретным производителем материнской платы физической изоляцией линии WP от компонента чипсета до разъема для модуля памяти. Для специалиста не составит труда написать программу, которая бы могла в этом случае "перепрошивать" содержимое EEPROM на модуле — необходимо только грамотно переписать карту программирования с учетом установки желаемых параметров и запрограммировать интегрированный контроллер интерфейса SMBus с учетом используемого транспортного протокола. Примером такой программы может служить "SPDWrite", написанная Владимиром Бобровым и Александром Щеголевым, — довольно простой по функциональности и четко работающий программатор. Первая версия SPDWrite полностью совместима пока только с мостом FW82371EB (PIIX4E), входящим в состав логического окружения i82440BX/ZX, однако в последующие версии программатора будет добавлена поддержка и других контроллеров периферийных компонент.

Если необходимо только просмотреть содержимое микросхемы SPD, то можно воспользоваться одной из следующих программ. Основную информацию о всех модулях памяти, присутствующих в системе, можно узнать при помощи программы "DIMM-ID", разработанную компанией RM Plc. Подробно карту программирования SPD EEPROM можно считать при помощи программы "SiSoft SIMM/DIMM/RIMM SPD Analyzer", входящий в комплект пакета SiSoft Sandra. Очень подробную информацию, включая дамп содержимого микросхемы и список известных производителей, предоставляет программа "On DIMM SPD Tools" нашего соотечественника Дмитрия Полтавцева. Еще одна разработка "DIMM SPD Information" также нашего соотечественника Константина Алешина предлагает довольно краткую информацию о модуле памяти, исходя из состояния всего лишь нескольких байт в микросхеме SPD. Программа "MemSPD", написанная Ray Van Tassle, поможет оценить скорость работы памяти и текущие тайминговые установки. Информацию о поддержке и текущем состоянии интерфейса SMBus может выдать программа "System-Management-Bus-Scanner" от немецкой фирмы c't. От этой же фирмы есть утилита "BIOS-Info", которая выдает основную информацию о версии системной BIOS, ее производителе и т.д. Однако самой, пожалуй, удобной программой по считыванию содержимого микросхемы памяти SPD EEPROM является "ctSPD" от все той же компании c't — предлагается как специально "урезанная" версия для пользователей Windows'9x, так и полная для всех разновидностей Windows ОС.

Хочется обратить особое внимание на то, что не все программы считывания данных с SPD EEPROM корректно указывают производителя модуля памяти, поскольку содержат в себе базу идентификационных кодов на какой-то определенный момент — обновление базы происходит через строго определенный период, согласно требований JCB-94-02, определяемых в рамках JC-42.3. Иными словами, если какая-то программа выдает информацию о том, что производитель модуля неизвестен или его невозможно определить, то скорее всего данного кода в ее базе просто нет. В этом случае следует воспользоваться любым "декодером", способным выдавать дамп содержимого микросхемы SPD EEPROM (например, SiSoft SPD Analyzer, On DIMM SPD Tools и ctSPD), посмотреть содержимое ячеек байт 64-71 исследуемого модуля памяти и сравнить считанный код с последним обновлением документа JEP106.

В случае же, если используется нормальный модуль с "изолированным" выводом WP, можно рекомендовать лишь два способа. Лобовым и самым простым решением является обычная "настройка подсистемы памяти в системном BIOS" (если такая возможность имеется) — параметр SDRAM Configuration устанавливается в положение Manual (установка этого параметра в значение "by SPD" говорит о том, что все параметры берутся из соответствующих записанных значений в микросхеме последовательного детектирования), после чего производится настройка необходимых установок, игнорируя значения, считываемые из микросхемы SPD. Конечно, возможности установки параметров через системный BIOS не такие гибкие, как это предоставляет механизм SPD, но, в целом, настройки подсистемы памяти, регулирующиеся через системный BIOS, являются основными. Стоит отметить, что далеко не каждый BIOS обладает широкими настройками — все еще зависит от конечного производителя материнской платы, используемого набора базовой логики и типа самого BIOS.

Вторым способом жестко изменить требуемые параметры, но уже непосредственно в микросхеме SPD EEPROM или просто поправить контрольную сумму (иногда бывает, что в SPD записывают неверное значение), можно воспользоваться одной из программ перезаписывания содержимого микросхем последовательного интерфейса: воспользоваться либо программой "PonyProg — Serial Device Programmer" от Claudio Lanconelli, которую можно найти на LancOS, либо оболочкой "IC-Prog Prototype Programmer" от Bonny Gijzen, свободно доступной на IC-Prog. Данные программаторы обладают дружественным GUI, работают в среде Windows/UNIX, имеют достаточно обширную базу поддерживаемых транспортных протоколов (не только Inter-IC) и типов устройств (не только EEPROM), совместимы с довольно большим количеством аппаратных интерфейсов, подключаемых к последовательному и параллельному портам ПК, и позволяют считывать, редактировать и перезаписывать данные прямо в оболочке. Проблема заключается лишь в том, что эти программы работают только с внешними специальными адаптерами (принципиальные схемы прилагаются в документации свободно доступной на соответствующих ресурсах) — поэтому микросхему EEPROM из модуля памяти необходимо выпаивать, перезаписывать данные и впаивать обратно. Примеры карт программирования для различных модулей памяти, использующих различные фундаментальные типы ДОЗУ, можно посмотреть в разделе "Приложения".

В целом, для пользователей у которых материнская плата имеет AWARD BIOS, перепрошивкой содержимого микросхемы SPD заниматься не стоит, поскольку все временные параметры, которые оказывают значительное влияние на производительность подсистемы памяти, могут регулироваться из этой BIOS. AMI BIOS также позволяет достаточно гибко настраивать тайминги работы памяти. Поэтому "физические" манипуляции с микросхемой SPD EEPROM имеют смысл для обладателей материнских плат, содержащих BIOS типа Phoenix, который используется, например, на всех продуктах от Intel. Конечной целью в таком случае является по большому счету исправление часто встречающейся неправильной контрольной суммы, что абсолютно не важно для AWARD/AMI, однако критично для Phoenix BIOS, поскольку неверное значение система воспринимает как неправильно считанные данные и последующая загрузка (точнее говоря — прохождение POST) становится проблематичной. Нет смысла говорить о том, что простое выпаивание SPD EEPROM без перепрограммирования не решит проблемы, поскольку присутствие этой микросхемы на модуле памяти с полностью корректными данными является обязательным условием для работы в системе с Phoenix BIOS.

И главное — не стоит забывать, что подобные процедуры вмешательства на "очень низком уровне" сопряжены с огромными трудностями о которых даже не имеет смысла говорить.

Список использованных источников

  1. JESD100-B, Terms, Definitions, and Letter Symbols for Microcomputers, Microprocessors, and Memory Integrated Circuits
  2. JESD99-A,Terms, Definitions, and Letter Symbols for Microelectronic Devices
  3. JEDEC Std No. 21-C-4.1.2 — Serial Presence Detect Standard, General Standard
  4. JEDEC Std No. 21-C-4.1.2.1 — Appendix A: Table of Fundamental Memory Types
  5. JEDEC Std No. 21-C-4.1.2.2 — Appendix B: Table(s) of Superset Memory Types
  6. JEDEC Std No. 21-C-4.1.2.3 — Appendix C: Specific PD's for Fast Page Mode or Extended Data Out DRAM
  7. JEDEC Std No. 21-C-4.1.2.5 — Appendix E: Specific PD's for Synchronous DRAM (SDRAM)
  8. JEDEC Std No. 21-C-4.1.2.6 — Appendix F: Specific PD's for Address Multiplexed ROMs (MXROM)
  9. JEDEC Std No. 21-C-4.1.2.7 — Appendix H: Table of ESDRAM Superset Attributes
  10. JEDEC Std No. 21-C-4.1.2.9 — Appendix V: Specific PD's for Virtual Channel SDRAM (VCSDRAM)
  11. SDRAM Module Serial Presence Detect Definitions
  12. PC SDRAM Serial Presence Detect (SPD) Specification, Revision 1.2B
  13. JEP106, Standard Manufacturer's Identification Code, Revision of JEP106I
  14. Direct Rambus SPD Specification, Version 1.2
  15. Rambus SPD Assembler User Guide, Revision 1.0
  16. Rambus SPD Assembler Excel Configuration List
  17. PC-133 HSDRAM 256MB, 512MB DIMM Preliminary Data Sheet
  18. 168-pin Enhanced SDRAM 8MB, 16MB, 32MB DIMM Preliminary Data Sheet
  19. 32M-word by 64-Bit Virtual Channel Dynamic RAM Module Unbuffered Type
  20. 32 Meg x64 DDR SDRAM DIMMs Module
  21. 256/288-Mbit Direct RDRAM
  22. 256/288-Mbit Direct RDRAM for Short Channel
  23. Direct Rambus RIMM Module Design Guide
  24. Direct Rambus RIMM Module Specification
  25. Smart Battery System Specifications
  26. The I2C-bus specification, Version 1.0
  27. The I2C-bus and how to use it (including specifications) 1995 update
  28. The I2C-bus and how to use it (including specifications) 1997 update
  29. The I2C-bus specification, Version 2.1
  30. Assigned I2C-bus addresses General
  31. I2C-bus allocation table General
  32. I2C address allocation table Selection guide
  33. ACCESS.bus Specifications, Version 2.2, ACCESS.bus Industry Group
  34. System Management Bus Specification, Revision 1.1
  35. System Management Bus BIOS Interface Specification, Revision 1.0
  36. ACPI Specifications, version 2.0
  37. PC SDRAM Specification, Revision 1.7
  38. 2-wire Serial EEPROM 2K (256x8), 4K (512x8), 8K (1024x8): AT24C02A, AT24C04A, AT24C08A

Приложения

  1. Пример карты программирования SPD для SDRAM DIMM

  2. Пример карты программирования SPD для SDRAM Registered DIMM

  3. Пример карты программирования SPD для ESDRAM DIMM

  4. Пример карты программирования SPD для HSDRAM DIMM

  5. Пример карты программирования SPD для VCSDRAM DIMM

  6. Пример карты программирования SPD для DDR SDRAM DIMM

  7. Пример карты программирования SPD для DRDRAM RIMM





30 июля 2002 Г.