Современная индустрия время от времени вводит в употребление новые технологии ДОЗУ, которые обретают черты индивидуальности, начиная от архитектурных особенностей ядра и интерфейсных схем, и заканчивая форм-фактором модуля памяти. Однако ни один современный модуль памяти не может обойтись без крайне необходимого компонента — микросхемы 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 в двоичном коде.
Пример проверки контрольной суммы | |||
Адресные байты | Двоичное значение | Десятичное представление | Комментарий |
0 | 00100100 | 36 | |
1 | 11111110 | 254 | |
2 | 00000000 | 0 | |
3 | 00000000 | 0 | |
… | 00000000 | 0 | |
… | … | … | |
60 | 00000000 | 0 | |
61 | 00000000 | 0 | |
62 | 00000000 | ||
290 | Сумма всех десятичных цифр | ||
290/256 | Деление для получения целого числа | ||
34 | Сохранение остатка | ||
00100010 | Преобразование остатка в двоичный код | ||
63 | 00100010 | 34 | Занесение преобразованного числа в байт 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-62 | Checksum |
64-71 | Идентификационный код производителя по JEP106 | LUT |
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=80kHz | 5mA |
ISB | Ток в состоянии готовности | VIN=GND или VCC | 100 µA |
ILI | Входной ток утечки | VIN=GND или VCC | 10 µA |
ILO | Выходной ток утечки | VOUT=GND или VCC | 10 µA |
VIL | Низкий уровень входного напряжения | VCC x0.3 V | |
VIH | Высокий уровень входного напряжения | VCC x0.7 V | |
VOL | Низкий уровень выходного напряжения | IOL=3.0mA | 0.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 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
3 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
… | x | x | x | x | x | x | x | x |
128 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
… | x | x | x | x | x | x | x | x |
255 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Так, микросхема SPD EEPROM, содержащая объем полезной информации, составляющий, например, 128 байт будет в поле байта 1 содержать шестнадцатиричное значение 80h (двоичная последовательность 10000000), а микросхема, использующая все 256 байт — значение FFh (двоичная последовательность 11111111).
Различные фундаментальные архитектуры используемого типа памяти характеризуются байтом 2, который также кодируется по схеме прямого преобразования. Рассмотрим фрагмент таблицы "битовой классификации" для характеристики используемого фундаментального типа ДОЗУ.
Кодирование в SPD фундаментального типа ДОЗУ (байт 2) | ||||||||
Тип памяти | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
Reserved | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
FPM DRAM | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
EDO DRAM | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Pipelined Nibble | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
SDRAM | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Multiplexed ROM | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
DDR SGRAM | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
DDR SDRAM | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
VC SDRAM | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
… | x | x | x | x | x | x | x | x |
Отсюда видно, что байт 2 в модуле памяти, использующем, например, фундаментальный тип ДОЗУ VCSDRAM будет содержать значение 08h, а, скажем, SDRAM — 04h.
Байт 9 характеризует временной цикл с максимальной задержкой сигнала CAS# (CL), что, понятно, является составной цифровой величиной. Данный байт использует таблицу указателей (LUT), применяя схему разделения байта на две "группы", поскольку временные параметры могут быть не просто целыми числами, а и содержать дробные значения. Так, с учетом разбиения таблицы на "точки входа", поле более важных бит именуют субполе А (Subfield A), а менее важных — субполе В (Subfield B). Поэтому для кодирования информа-ции, ее в данном случае делят на две составляющие — целые и дробные значения, соответственно прямо кодирующиеся в субполях А и В.
Временной цикл с максимальной задержкой сигнала CAS# (байт 9) | ||||||||
Наносекунды | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
Кодирование целого значения временного цикла (в наносекундах) — субполе А | ||||||||
1ns | 0 | 0 | 0 | 0 | Смотреть значения субполя В | |||
2ns | 0 | 0 | 0 | 1 | ||||
3ns | 0 | 0 | 1 | 0 | ||||
4ns | 0 | 0 | 1 | 1 | ||||
5ns | 0 | 1 | 0 | 0 | ||||
… | х | х | х | х | ||||
15ns | 1 | 1 | 1 | 1 | ||||
Кодирование дробного значения временного цикла (в наносекундах) — субполе B | ||||||||
+0ns | Смотреть значения субполя А | 0 | 0 | 0 | 0 | |||
+0.1ns | 0 | 0 | 0 | 1 | ||||
+0.2ns | 0 | 0 | 1 | 0 | ||||
+0.3ns | 0 | 0 | 1 | 1 | ||||
+0.4ns | 0 | 1 | 0 | 0 | ||||
+0.5ns | 0 | 1 | 0 | 1 | ||||
… | х | х | х | х |
Таким образом получается, что если необходимо задать время цикла, равное, например, 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=Page | TBD | TBD | BL=16 | BL=8 | BL=4 | BL=2 | BL=1 |
1 или 0 | 1 или 0 | 1 или 0 | 1 или 0 | 1 или 0 | 1 или 0 | 1 или 0 | 1 или 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) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reduced (0.25x) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Reduced (0.5x) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Extended (2x) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Extended (4x) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Extended (8x) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
TBD | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
… | 0 | х | х | х | х | х | х | х |
Периоды в режиме саморегенерации (SR) | ||||||||
Normal (15.625 µs) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reduced (0.25x) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Reduced (0.5x) | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Extended (2x) | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Extended (4x) | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Extended (8x) | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
TBD | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
… | 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=100kHz | 5.0 µA |
ISVdd1 | Ток в состоянии готовности | VIN=GND или SVDD | 100 µA |
ISLI | Входной ток утечки | VIN=GND или SVDD | 10 µA |
ISLO | Выходной ток утечки | VOUT=GND или SVDD | 10 µA |
VSIL | Низкий уровень входного напряжения | SVDD x0.3 V | |
VSIH | Высокий уровень входного напряжения | SVDD x0.7 V | |
VSOL | Низкий уровень выходного напряжения | IOL=3.0mA | 0.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 | |||
Байт | Назначение | Units | FC |
0 | Номер текущей версии SPD | LUT | SPD |
1 | Общее количество байт информации в микросхеме SPD | LUT | SPD |
2 | Тип используемых микросхем памяти | LUT | DEV |
3 | Тип используемого модуля памяти | LUT | MOD |
4 | Количество адресных бит стоки [7:4] и столбца [3:0] для каждого прибора | Bit | DEV |
5 | Количество адресных бит на один банк и тип используемых банков памяти | LUT | DEV |
6 | Количество одновременно регенерируемых банков микросхемы памяти | Bit | DEV |
7 | Длительность периода регенерации микросхем памяти в ms — tREF | ms | DEV |
8 | Используемая версия протокола RDRAM | LUT | DEV |
9 | Поле конфигурации использования устройств смешанного типа | N/A | DEV |
10 | Минимальный интервал "Precharge-to-RAS" — tRP-R,MIN | 1/fRAS | DEV |
11 | Минимальный интервал "RAS-to-Precharge" — tRAS-R,MIN | 1/fRAS | DEV |
12 | Минимальный интервал "Activate-to-CAS" — tRCD-R,MIN | 1/fRAS | DEV |
13 | Минимальный интервал "RAS-to-RAS" — tRR-R,MIN | 1/fRAS | DEV |
14 | Минимальный интервал "Precharge-to-Precharge" — tPP-R,MIN | 1/fRAS | DEV |
15 | Минимальная длительность tCYCLE для диапазона А | 128ps | DEV |
16 | Максимальная длительность tCYCLE для диапазона А | 128ps | DEV |
17 | Диапазон значений длительности задержки ядра tCDLY для диапазона А | Cycle | DEV |
18 | Диапазон значений tCLS и tCAS для диапазона А | Cycle | DEV |
19 | Минимальная длительность tCYCLE для диапазона B | 128ps | DEV |
20 | Максимальная длительность tCYCLE для диапазона B | 128ps | DEV |
21 | Диапазон значений длительности задержки ядра tCDLY для диапазона B | Cycle | DEV |
22 | Диапазон значений tCLS и tCAS для диапазона B | Cycle | DEV |
23 | Минимальная длительность tCYCLE для диапазона C | 128ps | DEV |
24 | Максимальная длительность tCYCLE для диапазона C | 128ps | DEV |
25 | Диапазон значений длительности задержки ядра tCDLY для диапазона C | Cycle | DEV |
26 | Диапазон значений tCLS и tCAS для диапазона C | Cycle | DEV |
27 | Минимальная длительность tCYCLE для диапазона D | 128ps | DEV |
28 | Максимальная длительность tCYCLE для диапазона D | 128ps | DEV |
29 | Диапазон значений длительности задержки ядра tCDLY для диапазона D | Cycle | DEV |
30 | Диапазон значений tCLS и tCAS для диапазона D | Cycle | DEV |
31 | Максимальное время выхода из деактивации (PDN) в фазе А — tPDNXA,MAX | µs | DEV |
32 | Максимальное время выхода из деактивации (PDN) в фазе B — tPDNXB,MAX | 64 CFM | DEV |
33 | Максимальное время выхода из "дремоты" (NAP) в фазе А — tNAPXA,MAX | ns | DEV |
34 | Максимальное время выхода из "дремоты" (NAP) в фазе B — tNAPXB,MAX | ns | DEV |
35 | Максимальная и минимальная частоты функционирования — fIMAX [7:4] и fIMIN [3:0] | MHz | DEV |
36 | Максимальная частота функционирования микросхем памяти — fIMAX [7:0] | MHz | DEV |
37 | Минимальная частота функционирования микросхем памяти — fIMIN [7:0] | MHz | DEV |
38 | Зарезервировано для характеристики внештатного функционирования — ODF | N/A | N/A |
39 | Максимальный интервал между текущими операциями калибровки — tCCTRL,MAX | ms | DEV |
40 | Максимальный интервал между операциями калибровки температуры — tTEMP,MAX | ms | DEV |
41 | Минимальный интервал между разрешением и передачей команды (динамика формирования) проведения температурной калибровки — tTCE,MIN | Cycle | DEV |
42 | Максимальный интервал "RAS-to-Precharge" — tRAS-R,MAX | µs | DEV |
43 | Максимальное время пребывания микросхемы в режиме NAP — tNLIMIT,MAX | µs | DEV |
44 | Описание тамингов ACTREFPT [7:4] и PCHREFPT [3:0] | Cycle | DEV |
45 | Описание тамингов CPCHREFPT_DC [7:4] и RDREFPT_DC [3:0] | Cycle | DEV |
46 | Описание тамингов RETREFPT_DC [7:4] и WRREFPT_DC [3:0] | Cycle | DEV |
47-49 | Зарезервировано | N/A | N/A |
50 | Частота подачи строба доступа к строке — fRAS [11:8], начало | MHz | DEV |
51 | Частота подачи строба доступа к строке — fRAS [7:0], продолжение | MHz | DEV |
52 | Максимальная потребляемая мощность на максимальной частоте, минимальной частоте и максимальное значение температуры всех микросхем, установленных на модуле памяти — PMAX,HI, PMAX,LO и Tj соответственно | °C | DEV |
53 | Наличие на модуле радиатора, термосенсора и температура на нем — HS и Tplate | °C | MOD |
54 | Потребляемый ток в состоянии STBY на максимальной частоте (fIMAX) — PSTBY,HI | 1mA | DEV |
55 | Потребляемый ток при средней нагрузке на максимальной частоте — PACTI,HI | 2mA | DEV |
56 | Потребляемый ток при максимальной нагрузке на fIMAX — PACTRW,HI | 8mA | DEV |
57 | Потребляемый ток в состоянии STBY на минимальной частоте (fIMIN) — PSTBY,LO | 1mA | DEV |
58 | Потребляемый ток при средней нагрузке на минимальной частоте — PACTI,LO | 2mA | DEV |
59 | Потребляемый ток при максимальной нагрузке на fIMIN — PACTRW,LO | 8mA | DEV |
60 | Потребляемый ток в режиме "дремоты" — PNAP | 128 µA | DEV |
61 | Зарезервировано для будущего параметра термоконтроля — PRESA | N/A | DEV |
62 | Зарезервировано для будущего параметра термоконтроля — PRESB | N/A | DEV |
63 | Контрольная сумма байт 0-62 | N/A | SPD |
64-71 | Код производителя модуля памяти (Manufacture ID Code), согласно JEP106 | N/A | MOD |
72 | Информация о производителе модуля | N/A | MOD |
73-90 | Уникальный номер производителя модуля | N/A | MOD |
91-92 | Код ревизии производителя модуля | N/A | MOD |
93 | Год изготовления модуля | N/A | MOD |
94 | Неделя изготовления модуля | N/A | MOD |
95-98 | Серийный номер модуля | N/A | MOD |
99 | Количество используемых микросхем памяти на модуле | PCs | MOD |
100 | Ширина шины данных модуля памяти | Bit | MOD |
101-104 | Уникальное управление микросхемами памяти (один байт на 8 микросхем) | Bit | MOD |
105 | Напряжение питания [7:4] и интерфейс питающего протокола [3:0] | LUT | MOD |
106 | Допустимое отклонение напряжения питания | LUT | MOD |
107 | Зарезервировано | N/A | N/A |
108-110 | Зарезервировано | N/A | N/A |
111 | Зарезервировано | N/A | N/A |
112 | Зарезервировано | N/A | N/A |
113 | Зарезервировано | N/A | N/A |
114 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=3 | Cycle | DEV |
115 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=4 | Cycle | DEV |
116 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=5 | Cycle | DEV |
117 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=6 | Cycle | DEV |
118 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=7 | Cycle | DEV |
119 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=8 | Cycle | DEV |
120 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=9 | Cycle | DEV |
121 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=10 | Cycle | DEV |
122 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=11 | Cycle | DEV |
123 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=12 | Cycle | DEV |
124 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=13 | Cycle | DEV |
125 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=14 | Cycle | DEV |
126 | Значение CDLY0/1 для значения длительности задержки ядра tCDLY=15 | Cycle | DEV |
127 | Контрольная сумма байт 99-126 | N/A | SPD |
128-255 | "Свободное" поле для внесения дополнительной информации | N/A | OEM |
256+ | Зарезервировано | N/A | OEM |
Примечание: размерность (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.
И главное — не стоит забывать, что подобные процедуры вмешательства на "очень низком уровне" сопряжены с огромными трудностями о которых даже не имеет смысла говорить.
Список использованных источников
- JESD100-B, Terms, Definitions, and Letter Symbols for Microcomputers, Microprocessors, and Memory Integrated Circuits
- JESD99-A,Terms, Definitions, and Letter Symbols for Microelectronic Devices
- JEDEC Std No. 21-C-4.1.2 — Serial Presence Detect Standard, General Standard
- JEDEC Std No. 21-C-4.1.2.1 — Appendix A: Table of Fundamental Memory Types
- JEDEC Std No. 21-C-4.1.2.2 — Appendix B: Table(s) of Superset Memory Types
- JEDEC Std No. 21-C-4.1.2.3 — Appendix C: Specific PD's for Fast Page Mode or Extended Data Out DRAM
- JEDEC Std No. 21-C-4.1.2.5 — Appendix E: Specific PD's for Synchronous DRAM (SDRAM)
- JEDEC Std No. 21-C-4.1.2.6 — Appendix F: Specific PD's for Address Multiplexed ROMs (MXROM)
- JEDEC Std No. 21-C-4.1.2.7 — Appendix H: Table of ESDRAM Superset Attributes
- JEDEC Std No. 21-C-4.1.2.9 — Appendix V: Specific PD's for Virtual Channel SDRAM (VCSDRAM)
- SDRAM Module Serial Presence Detect Definitions
- PC SDRAM Serial Presence Detect (SPD) Specification, Revision 1.2B
- JEP106, Standard Manufacturer's Identification Code, Revision of JEP106I
- Direct Rambus SPD Specification, Version 1.2
- Rambus SPD Assembler User Guide, Revision 1.0
- Rambus SPD Assembler Excel Configuration List
- PC-133 HSDRAM 256MB, 512MB DIMM Preliminary Data Sheet
- 168-pin Enhanced SDRAM 8MB, 16MB, 32MB DIMM Preliminary Data Sheet
- 32M-word by 64-Bit Virtual Channel Dynamic RAM Module Unbuffered Type
- 32 Meg x64 DDR SDRAM DIMMs Module
- 256/288-Mbit Direct RDRAM
- 256/288-Mbit Direct RDRAM for Short Channel
- Direct Rambus RIMM Module Design Guide
- Direct Rambus RIMM Module Specification
- Smart Battery System Specifications
- The I2C-bus specification, Version 1.0
- The I2C-bus and how to use it (including specifications) 1995 update
- The I2C-bus and how to use it (including specifications) 1997 update
- The I2C-bus specification, Version 2.1
- Assigned I2C-bus addresses General
- I2C-bus allocation table General
- I2C address allocation table Selection guide
- ACCESS.bus Specifications, Version 2.2, ACCESS.bus Industry Group
- System Management Bus Specification, Revision 1.1
- System Management Bus BIOS Interface Specification, Revision 1.0
- ACPI Specifications, version 2.0
- PC SDRAM Specification, Revision 1.7
- 2-wire Serial EEPROM 2K (256x8), 4K (512x8), 8K (1024x8): AT24C02A, AT24C04A, AT24C08A
Приложения
Пример карты программирования SPD для SDRAM DIMM
Пример карты программирования SPD для SDRAM Registered DIMM
Пример карты программирования SPD для ESDRAM DIMM
Пример карты программирования SPD для HSDRAM DIMM
Пример карты программирования SPD для VCSDRAM DIMM
Пример карты программирования SPD для DDR SDRAM DIMM
Пример карты программирования SPD для DRDRAM RIMM