Модуль интерфейса внешней шины процессоров Blackfin
Добавил(а) microsin
В этой статье описан модуль библиотеки SSL (драйвер ADI), работающий с модулем интерфейса внешней шины (external bus interface unit, EBIU) процессора Blackfin (перевод главы 4 документации [1]). EBIU позволяет осуществлять конфигурирование контроллера асинхронной памяти (FLASH) и интерфейса SDRAM или DDR. Он также позволяет автоматически менять настройки в ответ на изменения тактовой частоты системы.
Рассматриваются следующие вопросы:
• Использование модуля EBIU • Справочник по API EBIU • Публичные типы данных и перечисления модуля EBIU • Установка управляющих значений в модуле EBIU
Общее назначение модуля EBIU - позволить модулю управления питанием [2] настраивать контроллер SDRAM или DDR процессора в соответствии с изменениями тактовой частоты системной шины (system clock, SCLK). Вызовы функций API adi_pwr_SetFreq и adi_pwr_SetMaxFreqForVolt настраивают параметры контроллера SDRAM в соответствии с выбранной частотой SCLK, что поддерживается модулем EBIU, когда он инициализирован. Дополнительную информацию по службе управления питанием и её API см. статью [2].
Использование модуля EBIU осуществляется стандартным способом, в соответствии с идеологией библиотек системных служб (SSL) компании Analog Devices (ADI). Функция adi_ebiu_Init вызывается для установки соответствующих значений, перечисленных в даташите на используемую микросхему внешней памяти. После этого скорость обновления (refresh rate) для SDRAM или DDR автоматически подстраивается каждый раз, когда модуль управления питанием [2] тактовую частоту системной шины SCLK. Контроллер асинхронной памяти (память FLASH) не настраивается автоматически, но его можно явно переконфигурировать вызовом функции adi_ebiu_Control. В разделе "Использование модуля EBIU" предоставлено пошаговое описание, как работать с модулем EBIU. Также предоставлен соответствующий пример кода.
Модуль EBIU использует недвусмысленную систему именования функций, констант и определений, что обеспечивает отсутствие конфликтов с другими программными модулями ADI или других компаний. Все значений перечислений (enum) и операторы typedef используют префикс ADI_EBIU_, а функции и глобальные переменные используют эквивалентный префикс в нижнем регистре adi_ebiu_.
Для каждого процессора имеется 2 версии библиотеки, соответствующие конфигурациям Debug и Release системы программирования VisualDSP++. В дополнение к обычным опциям по умолчанию в конфигурации Debug, функции API выполняют проверки переданных в них аргументов, и сообщают об ошибках соответствующими кодами, если это необходимо. В версии Release библиотеки большинство функций вернут только 2 кода результата: ADI_EBIU_RESULT_SUCCESS для успешного завершения вызова, или ADI_EBIU_RESULT_NOT_INITIALIZED, когда модуль EBIU не был инициализирован перед вызовом этой функции.
[Использование модуля EBIU]
Первый шаг в использовании модуля EBIU состоит в установке необходимых параметров для используемых интерфейсов внешней памяти. На этом шаге в функцию adi_ebiu_Init передается список пар команда-значение. Подробно необходимая информация дана во врезке с описанием функции adi_ebiu_Init (см. раздел "Справочник по API EBIU"). Количество строк в таблице и информация, которые должны быть в таблице, зависит от индивидуальной аппаратной конфигурации системы (от типа подключенной внешней памяти).
В следующем примере предполагается, что конфигурируется плата разработчика ADSP-BF533 EZ-KIT Lite (Rev 2.1). Для неё следующим образом указывается таблица пар команда-значение:
/* Поле регистра управления асинхронной памятью, разрешающее тактирование */
ADI_EBIU_ASYNCH_CLKOUT clkout_enable = ADI_EBIU_ASYNCH_CLKOUT_ENABLE;
/* Поле регистра управления асинхронной памятью, выбирающее нужные банки,
которые должны быть разрешены */
ADI_EBIU_ASYNCH_BANK_ENABLE banks_enable = ADI_EBIU_ASYNCH_BANK0_1_2_3;
/* Параметры времени банков асинхронной памяти, для всех 4 банков
используются одинаковые значения, задаваемые либо в циклах, либо
в единицах времени, но не обоими этими способами */
ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_trans_time =
{
ADI_EBIU_BANK_ALL,
{
ADI_EBIU_ASYNCH_TT_4_CYCLES, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
}
ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_setup_time =
{
ADI_EBIU_BANK_ALL,
{
ADI_EBIU_ASYNCH_ST_3_CYCLES, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
}
};
ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_hold_time =
{
ADI_EBIU_BANK_ALL,
{
ADI_EBIU_ASYNCH_HT_2_CYCLES, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
}
};
ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_read_access_time =
{
ADI_EBIU_BANK_ALL,
{
0xB, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
}
};
ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_write_access_time =
{
ADI_EBIU_BANK_ALL,
{
7, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
}
};
ADI_EBIU_ASYNCH_BANK_VALUE asynch_bank_ardy_enable =
{
ADI_EBIU_BANK_ALL, { ardy_enable: ADI_EBIU_ASYNCH_ARDY_DISABLE }
};
ADI_EBIU_ASYNCH_BANK_VALUE asynch_bank_ardy_polarity =
{
ADI_EBIU_BANK_ALL, { ardy_polarity: ADI_EBIU_ASYNCH_ARDY_POLARITY_LOW }
};
/* Параметры времени SDRAM, устанавливаемые по её даташиту */// Установка min TWR на длительность 1 такт SCLK + 7.5 нс:
ADI_EBIU_TIMING_VALUE twrmin =
{
1,{7500, ADI_EBIU_TIMING_UNIT_PICOSEC}
};
// Установка периода обновления 8192 тактов за 64 мс:
ADI_EBIU_TIMING_VALUE refresh =
{
8192,{64, ADI_EBIU_TIMING_UNIT_MILLISEC}
};
// Установка min TRAS на 44 нс:
ADI_EBIU_TIME trasmin = {44, ADI_EBIU_TIMING_UNIT_NANOSEC};
// Установка min TRP на 20 нс:
ADI_EBIU_TIME trpmin = {20, ADI_EBIU_TIMING_UNIT_NANOSEC};
ADI_EBIU_TIME trcdmin = {20, ADI_EBIU_TIMING_UNIT_NANOSEC};
// Установка min TRCD на 20 нс:
u32 cl_threshold =100; /* установка порога cl на 100 МГц */// Размер банка 64 MB:
ADI_EBIU_SDRAM_BANK_VALUE bank_size =
{
0, { size: ADI_EBIU_SDRAM_BANK_64MB }
};
// Адрес столбца имеет разрядность 10 бит:
ADI_EBIU_SDRAM_BANK_VALUE bank_width =
{
0, { width: ADI_EBIU_SDRAM_BANK_COL_10BIT }
};
/* Заполнение таблицы команд с использованием заданных выше значений */
ADI_EBIU_COMMAND_PAIR ebiu_init_table[] =
{
{ ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE, (void*)&bank_size },
{ ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH, (void*)&bank_width },
{ ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD, (void*)cl_threshold },
{ ADI_EBIU_CMD_SET_SDRAM_TRASMIN, (void*)&trasmin },
{ ADI_EBIU_CMD_SET_SDRAM_TRPMIN, (void*)&trpmin },
{ ADI_EBIU_CMD_SET_SDRAM_TRCDMIN, (void*)&trcdmin },
{ ADI_EBIU_CMD_SET_SDRAM_TWRMIN, (void*)&twrmin },
{ ADI_EBIU_CMD_SET_SDRAM_REFRESH, (void*)&refresh },
{ ADI_EBIU_CMD_SET_ASYNCH_CLKOUT_ENABLE, (void*)&clkout_enable },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_ENABLE, (void*)&banks_enable },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_TRANSITION_TIME, (void*)&asynch_bank_trans_time },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_READ_ACCESS_TIME, (void*)&asynch_bank_read_access_time },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_WRITE_ACCESS_TIME, (void*)&asynch_bank_write_access_time },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_SETUP_TIME, (void*)&asynch_bank_setup_time },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_HOLD_TIME, (void*)&asynch_bank_hold_time },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_ENABLE, (void*)&asynch_bank_ardy_enable },
{ ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_POLARITY, (void*)&asynch_bank_ardy_polarity },
// Маркер конца таблицы команд:
{ ADI_EBIU_CMD_END, 0 }
};
};
Второй аргумент в вызове функции adi_ebiu_Init зарезервирован, и должен быть установлен в 0. Модуль EBIU должен быть инициализирован до модуля управления питанием, чтобы последующие вызовы adi_pwr_SetFreq или adi_pwr_SetMaxFreqForVolt модуля управления питанием автоматически настраивали SDRAM или DDR.
Для иллюстрации того, что требуется для процессоров Blackfin, чтобы поддерживать работу памяти DDR, ниже приведена соответствующая таблица команд. Замените параметры SDRAM, показанные в таблице выше, на параметры DDR, показанные ниже, и добавьте команды управления контроллером асинхронной памяти, показанные в примере выше.
// Количество тактов между одной активной командой и следующей:
ADI_EBIU_TIMING_VALUE RC =
{
8, {60, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов между активной командой и командой precharge:
ADI_EBIU_TIMING_VALUE RAS =
{
6, {42, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов между командой precharge и активной командой:
ADI_EBIU_TIMING_VALUE RP =
{
2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов для SDRAM, чтобы восстановиться из сигнала REFRESH:
ADI_EBIU_TIMING_VALUE RFC =
{
10, {72, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов между последней записью данных// до следующей команды чтения:
ADI_EBIU_TIMING_VALUE WTR =
{
2, {7500, ADI_EBIU_TIMING_UNIT_PICOSEC }
};
// Время восстановления записи (write recovery time)// составляет 2 или 3 такта:
ADI_EBIU_TIMING_VALUE tWR =
{
2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов от установки режима:
ADI_EBIU_TIMING_VALUE tMRD =
{
2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов от активной команды до следующей// операции R/W (чтение или запись):
ADI_EBIU_TIMING_VALUE RCD =
{
2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
// Количество тактов от одного сигнала REFRESH// до следующего:
ADI_EBIU_TIMING_VALUE REFI =
{
1037, {7777, ADI_EBIU_TIMING_UNIT_NANOSEC }
};
ADI_EBIU_COMMAND_PAIR ebiu_init_table[] =
{
// Команда для установки интервала обновления (refresh):
{ ADI_EBIU_CMD_SET_DDR_REFI, (void*)&REFI },
// Команда для установки периода автообновления (auto refresh):
{ ADI_EBIU_CMD_SET_DDR_RFC, (void*)&RFC },
// Команда для установки времени precharge - active
{ ADI_EBIU_CMD_SET_DDR_RP, (void*)&RP },
// Команда для установки времени active - precharge
{ ADI_EBIU_CMD_SET_DDR_RAS, (void*)&RAS }
// Команда для установки времени active - active
{ ADI_EBIU_CMD_SET_DDR_RC, (void*)&RC },
// Команда для установки времени write - read
{ ADI_EBIU_CMD_SET_DDR_WTR, (void*)&WTR },
// Команда для установки размера устройства:
{ ADI_EBIU_CMD_SET_DDR_DEVICE_SIZE, (void*)0 },
// Команда для установки количества тактов от выставления R/W// до появления первых достоверных данных:
{ ADI_EBIU_CMD_SET_DDR_CAS, (void*)2 },
// Команда для установки ширины устройства:
{ ADI_EBIU_CMD_SET_DDR_DEVICE_WIDTH, (void*)2 },
// Команда для установки количества внешних банков:
{ ADI_EBIU_CMD_SET_DDR_EXTERNAL_BANKS, (void*)0 },
// Команда для установки ширины данных:
{ ADI_EBIU_CMD_SET_DDR_DATA_WIDTH, (void*)2 },
// Команда для установки времени восстановления записи// (write recovery time):
{ ADI_EBIU_CMD_SET_DDR_WR, (void*)&tWR },
// Команда для установки количества тактов от установки// режима до следующей команды:
{ ADI_EBIU_CMD_SET_DDR_MRD, (void*)&tMRD },
// Команда для установки количества тактов от активной// команды до выставления read-write:
{ ADI_EBIU_CMD_SET_DDR_RCD, (void*)&RCD },
// Маркер конца таблицы команд:
{ ADI_EBIU_CMD_END, 0 }
};
В приведенном выше примере кода обратите внимание на то, что минимальное значение TWR SDRAM определено как структура ADI_EBIU_TIMING_VALUE, которая состоит из двух главных частей: количество тактов и количество единиц времени, в данном случае пикосекунд. Такое представление отражает определение, которое можно найти в соответствующем даташите на SDRAM, где это значение указано как один такт SCLK плюс 7.5 нс. Для периода восстановления данных SDRAM (refresh) эта структура выражает время, которое берется для указанного количества тактов обновления (refresh cycles). Код примера показывает, что период обновления (refresh period) составляет 64 миллисекунды, которые занимают 8192 такта.
Для аппаратуры, использующей модуль Micron SDRAM, таблица команд может получить аббревиатуру, чтобы просто указать тип модуля и размер банка, как это показано ниже, с добавлением команд настройки контроллера асинхронной памяти, если это необходимо:
Дальнейшие изменения могут быть сделаны в любой момент путем передачи пар команда-значение или таблиц пар команда-значение в функцию adi_ebiu_Control. Например, чтобы передать одну парку команда-значение для разрешения самостоятельного обновления данных в SDRAM во время отсутствия активности (self-refresh), может использоваться следующий код:
Поскольку настройки SDRAM жестко привязаны к частоте системной шины (system clock, SCLK), прямое использование функции adi_ebiu_AdjustSDRAM из приложения пользователя не требуется, потому что это делается автоматически соответствующим кодом модуля управления питанием [2], когда меняется частота SCLK.
[Справочник по API EBIU]
В этой секции приведено подробное описание функций API модуля EBIU.
Для переданной в эту функцию частоты системной шины (system clock, SCLK) вычисляются и устанавливаются следующие параметры для SDRAM: TRAS, TRP, TRCD и TWR в регистре EBIU_SDGCTL, и значение RDIV в регистре EBIU_SDRRC. Эта функция вычисляет и устанавливает следующие параметры для DDR: RAS, RP, RFC, REFI и RC в регистре DDRCTL0, и RCD, MRD и WR в регистре DDRCTL1.
Эта функция используется главным образом модулем управления питанием [2], чтобы гарантировать, что настройки SDRAM оптимальны для текущей частоты SCLK процессора.
Функция adi_ebiu_AdjustSDRAM выполнит возврат, не делая никаких изменений, если SDRAM не была ранее успешно инициализирована вызовом adi_ebiu_Init.
ADI_EBIU_RESULT adi_ebiu_AdjustSDRAM (u32 fsclk);
Аргумент:
fsclk
Частота системной шины (SCLK) в Гц.
Возвращаемое значение:
ADI_EBIU_RESULT_SUCCESS
Успешное завершение функции.
ADI_EBIU_RESULT_NOT_INITIALIZED
SDRAM не была успешно инициализирована, или работа SDRAM не была разрешена.
Функция adi_ebiu_Control() позволяет конфигурировать регистры EBIU SDRAM и EBIU DDR в соответствии с парами команда-значение, которые могут передаваться в эту функцию тремя разными способами (см. также описание типа ADI_EBIU_COMMAND_PAIR).
См. также описание ADI_EBIU_COMMAND и раздел "Перечисления для параметра Value команд" для получения полного списка команд и связанных с ними значений для обоих типов интерфейсов, SDRAM и DDR, и для интерфейса асинхронной памяти (FLASH).
Значение из перечисления ADI_EBIU_COMMAND, которое определяет команду и назначение связанного аргумента Value.
Value
Значение, требуемое для определенной команды.
Возвращаемое значение:
ADI_EBIU_RESULT_SUCCESS
Успешное завершение функции.
ADI_EBIU_RESULT_BAD_COMMAND
Команда не распознана.
ADI_EBIU_RESULT_NOT_INITIALIZED
Модуль EBIU не был инициализирован.
ADI_EBIU_RESULT_INVALID_SDRAM_SRFS
Задано недопустимое значение для самообновления данных динамической памяти (self-refresh SDRAM). См. описание ADI_EBIU_SDRAM_SRFS.
ADI_EBIU_RESULT_INVALID_SDRAM_PUPSD
Задано недопустимое значение для задержки запуска при включении (power-up start delay). См. описание ADI_EBIU_SDRAM_EBUFE.
ADI_EBIU_RESULT_INVALID_SDRAM_PSM
Задано недопустимое значение для настройки последовательности включения динамической памяти (SDRAM power-up sequence). См. описание ADI_EBIU_SDRAM_PUPSD.
ADI_EBIU_RESULT_INVALID_SDRAM_EBUFE
Задано недопустимое значение для настройки внешней буферизации. См. описание ADI_EBIU_SDRAM_SRFS.
ADI_EBIU_RESULT_INVALID_SDRAM_FBBRW
Задано недопустимое значение для параметра back-to-back, read-to-write. См. описание ADI_EBIU_SDRAM_FBBRW.
ADI_EBIU_RESULT_INVALID_SDRAM_CDDBG
Задано недопустимое значение для запрета управления при предоставлении шины (control disable during bus grant). См. описание ADI_EBIU_SDRAM_CDDBG.
ADI_EBIU_RESULT_INVALID_SDRAM_EBE
Недопустимый выбор разрешения SDRAM. См. описание ADI_EBIU_SDRAM_ENABLE.
Функция adi_ebiu_GetConfigSize() вернет количество байт, требуемое для сохранения данных текущей конфигурации. Это значение также доступно через макрос ADI_EBIU_SIZEOF_CONFIG.
size_tadi_ebiu_GetConfigSize (void);
Возвращаемое значение: размер структуры данных конфигурации.
Функция adi_ebiu_Init инициализирует модуль EBIU. В настоящее время модуль конфигурируется для поддержки либо контроллера DDR, либо контроллера SDRAM, плюс для поддержки контроллера асинхронной памяти. Для службы EBIU, которая поддерживает SRDRAM, функция adi_ebiu_Init устанавливает значения регистров EBIU_SDGCTL, EBIU_SDBCTL и EBIU_SDRRC, чтобы их содержимое отражало корректную конфигурацию памяти SDRAM, подключенной к процессору. Для службы EBIU, которая поддерживает DDR, функция adi_ebiu_Init настраивает регистры управления контроллера DDR: DDRCTL0, DDRCTL1 и DDRCTL2. Для успешной инициализации контроллера SDRAM или DDR в функцию adi_ebiu_Init должен быть передан определенный набор значений, как это обозначено таблицами 4-1 (для SDRAM) и 4-2 (для DDR).
Таблица 4-1. Значения для инициализации SDRAM.
Описание
Команда
Тип Value
Размер банка
ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE
ADI_EBIU_SDRAM_BANK_VALUE
Ширина адреса столбца банка
ADI_EBIU_CMD_SET_SDRAM_BANK_COLUMN_WIDTH
ADI_EBIU_SDRAM_BANK_VALUE
Порог латентности CAS1 (МГц)
ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD
u32
Минимальное значение TRAS2 (нс)
ADI_EBIU_CMD_SET_SDRAM_TRASMIN
ADI_EBIU_TIME
Минимальное значение TRP3 (нс)
ADI_EBIU_EBIU_CMD_SET_SDRAM_TRPMIN
ADI_EBIU_TIME
Минимальное значение TRCD4 (нс)
ADI_EBIU_CMD_SET_SDRAM_TRCDMIN
ADI_EBIU_TIME
Минимальное значение TWR5 (такты, нс)
ADI_EBIU_CMD_SET_SDRAM_TWRMIN
ADI_EBIU_TIMING_VALUE
Период обновления данных (такты, мс)
ADI_EBIU_CMD_SET_SDRAM_REFRESH
ADI_EBIU_TIMING_VALUE
Примечания к таблице 4-1:
1 Строб адреса столбца (Column address strobe). 2 Требуемая задержка между выдачей команды Bank Activate и команды Precharge, и между командой Self-Refresh и командой выхода из состояния самообновления данных (self-refresh). 3 Требуемая задержка между выдачей команды Precharge и командами Bank Activate, Auto-Refresh или Self-Refresh. 4 Требуемая задержка между выдачей команды Bank Activate и началом первой команды чтения/записи. 5 Требуемая задержка между командой Write и командой Precharge.
Таблица 4-2. Значения для инициализации DDR.
Описание
Команда
Тип Value
Ширина данных
ADI_EBIU_CMD_SET_DDR_DATA_WIDTH
u32
Количество внешних банков
ADI_EBIU_CMD_SET_DDR_EXTERNAL_BANKS
u32
Ширина устройства
ADI_EBIU_CMD_SET_DDR_DEVICE_WIDTH
u32
Размер устройства
ADI_EBIU_CMD_SET_DDR_DEVICE_SIZE
u32
Интервал автообновления
ADI_EBIU_CMD_SET_DDR_REFI
ADI_EBIU_TIMING_VALUE
Период команды автообновления
ADI_EBIU_CMD_SET_DDR_RFC
ADI_EBIU_TIMING_VALUE
Интервал между командой R/W и достоверными данными
ADI_EBIU_CMD_SET_DDR_CAS
u32
Интервал между активной командой и командой R/W
ADI_EBIU_CMD_SET_DDR_RCD
ADI_EBIU_TIMING_VALUE
Интервал между активными командами
ADI_EBIU_CMD_SET_DDR_RC
ADI_EBIU_TIMING_VALUE
Интервал между активной командой и командой Precharge
ADI_EBIU_CMD_SET_DDR_RAS
ADI_EBIU_TIMING_VALUE
Интервал между командой Precharge и активной командой
ADI_EBIU_CMD_SET_DDR_RP
ADI_EBIU_TIMING_VALUE
Интервал между установкой регистра режима и следующей командой
ADI_EBIU_CMD_SET_DDR_MRD
ADI_EBIU_TIMING_VALUE
Интервал между записью и чтением
ADI_EBIU_CMD_SET_DDR_WTR
ADI_EBIU_TIMING_VALUE
Время восстановления записи
ADI_EBIU_CMD_SET_DDR_WR
ADI_EBIU_TIMING_VALUE
При успешной инициализации модуля EBIU последующие вызовы adi_ebiu_AdjustSDRAM подстраивают скорость обновления данных SDRAM (refresh rate) в регистрах EBIU_SDRRC или DDRCTL0, чтобы они соответствовали указанной частоте системной шины SCLK. Когда используется несколько банков памяти, для каждого банка должны быть указаны соответствующие пары команда-значение ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE и ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH.
Если конфигурация системы использует SDRAM с низким потреблением энергии (low power 2.5V), то должны быть инициализированы следующие значения:
Описание
Команда
Тип Value
Регистр разрешения расширенного режима
ADI_EBIU_CMD_SET_SDRAM_EMREN
ADI_EBIU_SDRAM_EMREN
Самообновление частичного массива
ADI_EBIU_CMD_SET_SDRAM_PASR
ADI_EBIU_PASR
Самообновление с температурной компенсацией
ADI_EBIU_CMD_SET_SDRAM_TCSR
ADI_EBIU_SDRAM_TCSR
В функцию adi_ebiu_Init могут быть переданы дополнительные пары команда-значение, которые могут быть переданы впоследствии в функцию adi_ebiu_Control. См. описание функции adi_ebiu_Control для получения описания этих пар команда-значение.
Функция adi_ebiu_Init должна быть вызвана только 1 раз, но вызовов настроек службы управления питанием, чтобы SDRAM была настроена в соответствии с изменениями SCLK. Последующие вызовы функции adi_ebiu_Init игнорируются.
Адрес таблицы пар команда-значение, как это определено в описании ADI_EBIU_COMMAND, и разделе "Перечисления для параметра Value команд". Последней командой в таблице должна быть команда ADI_EBIU_CMD_END.
Reserved
Значение u16, зарезервированное для будущего использования.
В режиме отладки при инициализации SDRAM функция adi_ebiu_Init возвращает следующие значения:
ADI_EBIU_RESULT_SUCCESS
Успешное завершение функции.
ADI_EBIU_RESULT_FAILED
Обычная ошибка.
ADI_EBIU_RESULT_BAD_COMMAND
Недопустимая пара команда-значение.
ADI_EBIU_RESULT_ALREADY_INITIALIZED
Модуль EBIU уже был инициализирован.
ADI_EBIU_RESULT_INVALID_SDRAM_SCTLE
Указано недопустимое значение SCTLE.
ADI_EBIU_RESULT_INVALID_SDRAM_MODULE
Указан недопустимый тип модуля памяти.
ADI_EBIU_RESULT_INVALID_SDRAM_BANK_SIZE
Указан недопустимый размер банка.
ADI_EBIU_RESULT_INVALID_SDRAM_COL_WIDTH
Указана недопустимая ширина адреса столбца.
ADI_EBIU_RESULT_INVALID_SDRAM_TWRMIN
Указано недопустимое значение TWRMIN.
ADI_EBIU_RESULT_INVALID_SDRAM_EMREN
Указано недопустимое значение EMREN.
ADI_EBIU_RESULT_INVALID_SDRAM_PASR
Указано недопустимое значение PASR.
ADI_EBIU_RESULT_INVALID_SDRAM_TCSR
Указано недопустимое значение TCSR.
В режиме отладки при инициализации DDR функция adi_ebiu_Init возвращает следующие значения:
ADI_EBIU_RESULT_SUCCESS
Успешное завершение функции.
ADI_EBIU_RESULT_FAILED
Обычная ошибка.
ADI_EBIU_RESULT_BAD_COMMAND
Недопустимая управляющая команда.
ADI_EBIU_RESULT_INVALID_DDR_MODULE
Указан недопустимый тип модуля памяти.
ADI_EBIU_RESULT_INVALID_DDR_REFI
Указан недопустимый интервал автообновления.
ADI_EBIU_RESULT_INVALID_DDR_RFC
Указан недопустимый период команды автообновления.
ADI_EBIU_RESULT_INVALID_DDR_RP
Указан недопустимый интервал Precharge - Active.
ADI_EBIU_RESULT_INVALID_DDR_RAS
Указан недопустимый интервал Active - Precharge.
ADI_EBIU_RESULT_INVALID_DDR_RC
Указан недопустимый интервал Active - Active.
ADI_EBIU_RESULT_INVALID_DDR_WTR
Указан недопустимый интервал запись - чтение.
ADI_EBIU_RESULT_INVALID_DDR_DEVICE_SIZE
Недопустимый размер устройства.
ADI_EBIU_RESULT_INVALID_DDR_DEVICE_WIDTH
Недопустимая ширина устройства.
ADI_EBIU_RESULT_INVALID_DDR_EXTERNAL_BANKS
Недопустимое количество внешних банков.
ADI_EBIU_RESULT_INVALID_DDR_DATA_WIDTH
Недопустимая ширина данных.
ADI_EBIU_RESULT_INVALID_DDR_WR
Недопустимое время восстановления записи.
ADI_EBIU_RESULT_INVALID_DDR_MRD
Недопустимый выбор регистра режима.
ADI_EBIU_RESULT_INVALID_DDR_RCD
Недопустимый интервал Active - R/W.
ADI_EBIU_RESULT_INVALID_DDR_CAS
Недопустимая задержка R/W - достоверные данные.
ADI_EBIU_RESULT_INVALID_DDR_PASR
Недопустимый запрос на частичное самообновление массива.
ADI_EBIU_RESULT_INVALID_DDR_SOFT_RESET
Недопустимый запрос мягкого сброса.
ADI_EBIU_RESULT_INVALID_DDR_SELF_REFRESH_REQUEST
Недопустимый запрос самообновления.
ADI_EBIU_RESULT_INVALID_DDR_MOBILE_DDR_ENABLE
Недопустимый запрос mobile DDR enable.
ADI_EBIU_RESULT_ALREADY_INITIALIZED
Служба EBIU уже была инициализирована.
В режиме отладки при инициализации контроллера асинхронной памяти (FLASH) функция adi_ebiu_Init возвращает следующие значения:
ADI_EBIU_RESULT_SUCCESS
Успешное завершение функции.
ADI_EBIU_RESULT_FAILED
Обычная ошибка.
ADI_EBIU_RESULT_INVALID_ASYNCH_CLKOUT_ENABLE
Недопустимый выбор для разрешения CLKOUT.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ENABLE
Недопустимый выбор для разрешения банка.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_NUMBER
В аргументе команды указан недопустимый номер банка.
Функция adi_ebiu_LoadConfig восстанавливает значения текущей конфигурации из области памяти, на которую указывает аргумент hConfig. Контроллер SDRAM сбрасывается.
Функция adi_ebiu_SaveConfig() сохраняет значения текущей конфигурации в область памяти, на которую указывает аргумент hConfig. В настоящее время сохраняется только конфигурация SDRAM.
Все публичные функции модуля EBIU возвращают код из перечисляемого типа ADI_EBIU_RESULT. Обратите внимание, что коды возврата, относящиеся к SDRAM, обычно начинаются с текста ADI_EBIU_RESULT_INVALID_SDRAM, в то время как коды возврата, относящиеся к DDR, начинаются с текста ADI_EBIU_RESULT_INVALID_DDR. В таблице 4-3 перечислены возможные значения кодов возврата модуля EBIU.
Таблица 4-3. Значения перечисления ADI_EBIU_RESULT.
Код возврата
Описание
ADI_EBIU_RESULT_SUCCESS
Успешное завершение функции.
ADI_EBIU_RESULT_FAILED
Обычная ошибка.
ADI_EBIU_RESULT_BAD_COMMAND
Указана недопустимая управляющая команда.
ADI_EBIU_RESULT_NOT_INITIALIZED
Вызов функции был проигнорирован и не было выполнено никаких действий, потому что модуль EBIU не был инициализирован.
ADI_EBIU_RESULT_INVALID_SDRAM_EBE
Указано недопустимое значение для поля EBE регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_BANK_SIZE
Указано недопустимое значение для поля EBSZ регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_COL_WIDTH
Указано недопустимое значение для поля EBCAW регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_CDDBG
Указано недопустимое значение для поля CDDBG регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_EBUFE
Указано недопустимое значение для поля EBUFE регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_EMREN
Указано недопустимое значение для поля EMREN регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_FBBRW
Указано недопустимое значение для поля FBBRW регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_PASR
Указано недопустимое значение для поля PASR регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_PSM
Указано недопустимое значение для поля PSM регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_PUPSD
Указано недопустимое значение для поля PUPSD регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_SRFS
Указано недопустимое значение для поля SRFS регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_TCSR
Указано недопустимое значение для поля TCSR регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_TWRMIN
Указано недопустимое значение для TWRMIN, проводящее к тому, что TWR больше 3.
ADI_EBIU_RESULT_NO_MEMORY
Недостаточно памяти для загрузки/сохранения конфигурации.
ADI_EBIU_RESULT_INVALID_EZKIT
Недопустимая ревизия платы разработчика EZ-KIT.
ADI_EBIU_RESULT_INVALID_SDRAM_SCTLE
Недопустимое значение SCTLE.
ADI_EBIU_RESULT_INVALID_SDRAM_MODULE
Недопустимый тип модуля SDRAM.
ADI_EBIU_RESULT_INVALID_IVG
Недопустимый уровень IVG (приоритет) для поддерживающего прерывания (только для двухядерных процессоров).
ADI_EBIU_RESULT_INVALID_SDRAM_BANK
Указан недопустимый номер банка.
ADI_EBIU_RESULT_INVALID_SDRAM_SCK1E
Недопустимое значение SCK1E.
ADI_EBIU_RESULT_INVALID_DDR_MODULE
Недопустимый тип модуля SDRAM (DDR).
ADI_EBIU_RESULT_INVALID_DDR_REFI
Недопустимый интервал обновления данных динамической памяти.
ADI_EBIU_RESULT_INVALID_DDR_RFC
Недопустимый интервал автообновления данных динамической памяти.
Здесь тип ADI_EBIU_TIMING_UNIT это перечисление, значения которого определены в таблице ниже.
ADI_EBIU_TIMING_UNIT_MILLISEC
Поле value в структуре ADI_EBIU_TIME указано в миллисекундах (мс, ms).
ADI_EBIU_TIMING_UNIT_MICROSEC
Поле value в структуре ADI_EBIU_TIME указано в микросекундах (мкс, mks).
ADI_EBIU_TIMING_UNIT_NANOSEC
Поле value в структуре ADI_EBIU_TIME указано в наносекундах (нс, ns).
ADI_EBIU_TIMING_UNIT_PICOSEC
Поле value в структуре ADI_EBIU_TIME указано в пикосекундах (пс, ps).
ADI_EBIU_TIMING_UNIT_FEMTOSEC
Поле value в структуре ADI_EBIU_TIME указано в фемтосекундах (фс, fs).
Действительные значения в этом перечислении используются как множители в целочисленной арифметике модуля. Для значения в миллисекундах, которое используется как значение управления логикой, здесь имеется исключение, потому что в данном случае значение перечисления не используется как множитель.
Разработчики могут использовать полный диапазон единиц, чтобы указывать значения интервалов времени как беззнаковое 32-битное целое число. Например, SDRAM на плате разработчика ADSP-BF533 EZ-KIT Lite имеет минимальное значение TWR, равное 1 такт SCLK и 7.5 нс. Передаваемое значение времени должно быть указано как 7500 пс. Таким образом, значение ADI_EBIU_TIME должно быть указано следующим образом:
ADI_EBIU_TIME time = {7500, ADI_EBIU_TIMING_UNIT_PICOSEC};
Определенные значения времени требуются для корректной установки регистров управления SDRAM в соответствии с подходящим даташитом на процессор. Время указывается как количество тактов SCLK в комбинации со значением времени, указанном в одной из возможных единиц (например, в наносекундах или миллисекундах).
Чтобы упростить передачу таких значений в функцию adi_ebiu_Init, определена структура ADI_EBIU_TIMING_VALUE:
Здесь ADI_EBIU_TIME определено так, как показано в предыдущей врезке. Например, SDRAM на плате разработчика ADSP-BF533 EZ-KIT Lite имеет минимальное значение TWR, равное 1 такт SCLK и 7.5 нс. С использованием структуры ADI_EBIU_TIMING_VALUE это значение времени может быть передано следующим образом:
Контроллер асинхронной памяти поддерживает несколько разных интерфейсов, так что предоставляется структура, которая позволяет задавать параметры времени либо в тактах, либо в единицах времени, однако нельзя использовать одновременно оба вида единиц времени.
Если параметр указывается в тактах, то значение напрямую записывается в регистр. Если значение указывается в единицах времени, то они преобразуются в такты на базе системной частоты 133 МГц, и преобразованное значение записывается в регистр.
Значения времени для настройки регистров управления асинхронной памятью, должны быть вычислены на основе даташита на используемое устройство памяти.
Эта структура используется для указания параметров времени интерфейса асинхронной памяти, как это показано ниже. Она содержит другие 2 структуры ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE (см. их описание в соответствующих врезках).
Из-за того, что многие параметры EBIU привязаны к определенному банку памяти, и указывают двоичное значение наподобие разрешено и запрещено (enabled, disabled), предоставляется структура, которая содержит номер банка вместе с объединением (union) трех различных перечислений, которые имеют два возможных значения.
Структура ADI_EBIU_ASYNCH_BANK_VALUE, показанная ниже, используется для полярности ARDY, которая может быть либо low, либо high (см. описание ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY). Она же используется для разрешения функции ARDY, которая может быть либо разрешена, либо запрещена (см. описание ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE). Также она используется для поля разрешения 16-битной упаковки (относится только к процессорам ADSP-BF561), когда может быть либо разрешена 16-битная упаковка, либо запрещена (32-битная упаковка), см. описание ADI_EBIU_ASYNCH_BANK_DATA_PATH.
Чтобы установить управляющие значения в модуле EBIU, пользователь передает пары команда-значение (пары типа ADI_EBIU_COMMAND_PAIR) в функции adi_ebiu_Init и adi_ebiu_Control (либо по отдельности каждая пара, либо пары в виде таблицы). Обратите внимание, что функция adi_ebiu_Init позволяет передавать только таблицу пар команда-значение. В этой секции описана структура пары команда-значение и допустимые команды.
The ADI_EBIU_COMMAND is used to control/access the configuration of the EBIU module. It is used in an ADI_EBIU_COMMAND_PAIR couplet to set a configuration value in calls to adi_ebiu_Init and adi_ebiu_Control. Note that SDRAM-related commands typically begin with the text ADI_EBIU_CMD_SET_SDRAM while DDR-related commands typically begin with the text ADI_EBIU_CMD_SET_DDR.
Таблица 4-4. Команды EBIU (Command) и связанные с ними значения (Value).
Command
Value
Общие команды, которые используются в обоих функциях adi_ebiu_Control и adi_ebiu_Init.
ADI_EBIU_CMD_END
Определяет конец таблицы команда-значение.
ADI_EBIU_CMD_SET_SDRAM_EBUFE
Значение ADI_EBIU_SDRAM_FBBRW, которая разрешает или запрещает быстрые операции back-to-back чтения/записи. См. описание ADI_EBIU_SDRAM_FBBRW.
ADI_EBIU_CMD_SET_SDRAM_CDDBG
Значение ADI_EBIU_SDRAM_CDDBG, которое указывает разрешить или запретить сигналы управления SDRAM, когда внешнему контроллеру предоставлен интерфейс управления памятью. См. описание ADI_EBIU_SDRAM_CDDBG.
ADI_EBIU_CMD_SET_SDRAM_PUPSD
Значение ADI_EBIU_SDRAM_PUPSD, которое указывает, должна ли быть последовательность запуска (power-up start sequence) задержана на 15 тактов SCLK. См. описание ADI_EBIU_SDRAM_PUPSD.
ADI_EBIU_CMD_SET_SDRAM_PSM
Значение ADI_EBIU_SDRAM_PSM, которое задает порядок событий в последовательности запуска. См. описание ADI_EBIU_SDRAM_PSM.
ADI_EBIU_CMD_SET_ASYNCH_BANK_TRANSITION_TIME
Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени перехода либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_READ_ACCESS_TIME
Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени доступа на чтение либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_WRITE_ACCESS_TIME
Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени доступа на запись либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_SETUP_TIME
Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени установки (setup time) либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_HOLD_TIME
Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени удержания либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
Ниже даны команды, которые передаются только в функцию adi_ebiu_Init.
ADI_EBIU_CMD_SET_SDRAM_MODULE
Значение ADI_EBIU_SDRAM_MODULE_TYPE, содержащее сконфигурированный модуль компании Micron. Это значение при использовании применяется ко всем банкам. См. описание ADI_EBIU_SDRAM_MODULE_TYPE.
ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE
Адрес структуры ADI_EBIU_SDRAM_BANK_VALUE, содержащей номер внешнего банка и его размер. См. описание ADI_EBIU_SDRAM_BANK_VALUE и ADI_EBIU_SDRAM_BANK_SIZE.
ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH
Адрес структуры ADI_EBIU_SDRAM_BANK_VALUE, содержащей номер внешнего банка и ширину его адреса. См. описание ADI_EBIU_SDRAM_BANK_VALUE и ADI_EBIU_SDRAM_BANK_COL_WIDTH.
ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD
Значение u32, указывающее порок частоты SCLK, который определяет используемое значение латентности CAS.
ADI_EBIU_CMD_SET_SDRAM_TRASMIN
Значение ADI_EBIU_TIME, устанавливающее минимальное значение TRAS в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIME.
ADI_EBIU_CMD_SET_SDRAM_TRPMIN
Значение ADI_EBIU_TIME, устанавливающее минимальное значение TRP в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIME.
ADI_EBIU_CMD_SET_SDRAM_TRCDMIN
Значение ADI_EBIU_TIME, устанавливающее минимальное значение TRCD в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIME.
ADI_EBIU_CMD_SET_SDRAM_TWRMIN
Значение ADI_EBIU_TIMING_VALUE, устанавливающее минимальное значение TWR в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIMING_VALUE.
ADI_EBIU_CMD_SET_SDRAM_REFRESH
Значение ADI_EBIU_TIMING_VALUE, устанавливающее максимальное значение tREF в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIMING_VALUE.
ADI_EBIU_CMD_SET_SDGCTL_REG
Слово u32, содержащее значение регистра EBIU_SDGCTL целиком.
ADI_EBIU_CMD_SET_SDBCTL_REG
Слово u16, содержащее значение регистра EBIU_SDBCTL целиком.
ADI_EBIU_CMD_SET_SDRAM_EMREN
Значение ADI_EBIU_SDRAM_EMREN, указывающее, используется ли SDRAM с малым потреблением энергии (low power 2.5V). См. описание ADI_EBIU_SDRAM_MODULE_TYPE.
ADI_EBIU_CMD_SET_SDRAM_PASR
Значение ADI_EBIU_SDRAM_PASR, указывающее, какой из банков обновляется. Применимо только к low power SDRAM. См. описание ADI_EBIU_CMD_SET_SDRAM_PASR.
ADI_EBIU_CMD_SET_SDRAM_TCSR
Значение ADI_EBIU_SDRAM_TCSR, указывающее температурно компенсированное значение самообновления. Эта команда может использоваться только для low power SDRAM. См. описание ADI_EBIU_SDRAM_TCSR.
ADI_EBIU_CMD_SET_SDRAM_SCTLE
Значение ADI_EBIU_SDRAM_SCTLE, указывающее, должен ли быть разрешен SDC (контроллер SDRAM). См. описание ADI_EBIU_CMD_SET_SDRAM_SCTLE.
ADI_EBIU_CMD_SET_DDR_DATA_WIDTH
Устанавливает ширину данных DDR.
ADI_EBIU_CMD_SET_DDR_EXTERNAL_BANKS
Устанавливает количество внешних банков DDR.
ADI_EBIU_CMD_SET_DDR_DEVICE_WIDTH
Устанавливает ширину устройства памяти DDR.
ADI_EBIU_CMD_SET_DDR_DEVICE_SIZE
Устанавливает размер устройства памяти.
ADI_EBIU_CMD_SET_DDR_REFI
Устанавливает интервал автообновления динамической памяти DDR.
ADI_EBIU_CMD_SET_DDR_RFC
Устанавливает период команды автообновления.
ADI_EBIU_CMD_SET_DDR_CAS
Устанавливает латентность CAS DDR: количество тактов от R/W до первых достоверных данных.
ADI_EBIU_CMD_SET_DDR_RCD
Устанавливает интервал между активной командой и выставлением R/W.
ADI_EBIU_CMD_SET_DDR_RC
Устанавливает интервал между следующими друг за другом командами активации DDR.
ADI_EBIU_CMD_SET_DDR_RAS
Устанавливает интервал DDR Active - Precharge.
ADI_EBIU_CMD_SET_DDR_RP
Устанавливает интервал DDR Precharge - Active.
ADI_EBIU_CMD_SET_DDR_MRD
Устанавливает интервал DDR между установкой регистра режима и следующей командой.
ADI_EBIU_CMD_SET_DDR_WTR
Устанавливает интервал DDR между командами записи и чтения.
ADI_EBIU_CMD_SET_DDR_WR
Устанавливает время восстановления DDR.
ADI_EBIU_CMD_SET_DDR_PASR
Устанавливает частичное восстановление массива DDR, используется только для mobile DDR. См. описание ADI_EBIU_DDR_PASR.
ADI_EBIU_CMD_SET_DDR_SOFT_RESET
Выдача мягкого сброса DDR.
ADI_EBIU_CMD_MOBILE_DDR_ENABLE
Разрешает mobile DDR.
ADI_EBIU_CMD_SET_FREQ_AS_MHZ
Устанавливает частоту DDR в мегагерцах.
ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_ENABLE
Значение ADI_EBIU_ASYNCH_BANK_VALUE, указывающее номер банка и ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE, задающее, должен ли оцифровываться вход ARDY для этого банка. См. описание ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE.
ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_POLARITY
Значение ADI_EBIU_ASYNCH_BANK_VALUE, указывающее номер банка и ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY, задающее полярность входа ARDY для этого банка. ARDY показывает завершение времени доступа. См. описание ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY.
Эта команда используется только для процессоров ADSP-BF561. Значение ADI_EBIU_ASYNCH_BANK_VALUE, указывающее номер банка и ADI_EBIU_ASYNCH_BANK_DATA_PATH, задающее, разрешена ли 16-битная упаковка для этого банка. См. описание ADI_EBIU_ASYNCH_BANK_DATA_PATH.
ADI_EBIU_CMD_SET_ASYNCH_BANK_ENABLE
Значение ADI_EBIU_ASYNCH_BANK_ENABLE, указывающее, какой банк должен быть разрешен. См. описание ADI_EBIU_ASYNCH_BANK_ENABLE.
ADI_EBIU_CMD_SET_ASYNCH_CLKOUT_ENABLE
Значение ADI_EBIU_ASYNCH_CLKOUT, указывающее, должен ли быть разрешен или запрещен CLKOUT в глобальном регистре управления асинхронной памятью. См. описание ADI_EBIU_ASYNCH_CLKOUT.
ADI_EBIU_CMD_SET_ASYNCH_AMGCTL
16-битное числовое значение, использующееся для одновременной установки всех полей глобального регистра управления асинхронной памятью.
ADI_EBIU_CMD_SET_ASYNCH_AMBCTL0
32-битное числовое значение, использующееся для одновременной установки всех полей регистра 0 управления асинхронным банком памяти.
ADI_EBIU_CMD_SET_ASYNCH_AMBCTL1
32-битное числовое значение, использующееся для одновременной установки всех полей регистра 1 управления асинхронным банком памяти.
Команды, которые передаются только в функцию adi_ebiu_Control.
ADI_EBIU_CMD_PAIR
Используется, чтобы указать функции adi_ebiu_Control, что передается одна пара команда-значение.
ADI_EBIU_CMD_TABLE
Используется, чтобы указать функции adi_ebiu_Control, что передается таблица пар команда-значение.
ADI_EBIU_CMD_SET_SDRAM_ENABLE
Значение ADI_EBIU_SDRAM_ENABLE разрешает/запрещает внешнюю SDRAM. См. описание ADI_EBIU_SDRAM_ENABLE.
ADI_EBIU_CMD_SET_SDRAM_SRFS
Значение ADI_EBIU_SDRAM_SRFS, разрешающее/запрещающее самообновление SDRAM при отсутствии активности. См. описание ADI_EBIU_SDRAM_SRFS.
Тип данных ADI_EBIU_COMMAND_PAIR позволяет разработчикам генерировать таблицу команд управления для передачи в модуль EBIU с помощью функций adi_ebiu_Init и adi_ebiu_Control:
Следующие перечисления используются для указания информации, необходимой для настройки контроллера SDRAM. Также см. описание значений в Engineer-to-Engineer Note EE-2101 [3].
Это перечисление указывает тип модуля SDRAM, когда для инициализации контроллера SDRAM используется команда ADI_EBIU_CMD_SET_SDRAM_MODULE. Значение перечисления содержат относящуюся к модулю информацию, такую как скорость (speed grade) и настройки конфигурации. Размер банка внешней памяти также должен быть указан с помощью команды ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE. Из-за того, что платы разработчика EZ-KIT Lite компании Analog Devices содержат SDRAM компании Micron, эта информация относится только к микросхемам памяти Micron. Список допустимых значений этого перечисления находится в заголовочном файле API adi_pwr.h.
Это перечисление указывает, что используется ли SDRAM с пониженным энергопотреблением (low power 2.5V). Это перечисление соответствует биту EMREN в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_EMREN_DISABLE
Mobile low power SDRAM отсутствует.
ADI_EBIU_SDRAM_EMREN_ENABLE
Mobile low power SDRAM присутствует.
Значение по умолчанию задается следующим макросом:
Когда используется SDRAM с пониженным энергопотреблением (low power 2.5V), это перечисление задает банк для обновления. Перечисление соответствует битам PASR в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_PASR_ALL
Обновить все 4 банка SDRAM.
ADI_EBIU_SDRAM_PASR_INT01
Обновляются внутренние банки 0 и 1 SDRAM.
ADI_EBIU_PASR_INT0_ONLY
Обновляется только внутренний банк 0.
Значение по умолчанию задается следующим макросом:
Когда используется SDRAM с пониженным энергопотреблением (low power 2.5V), это перечисление задает температурно-компенсированное значение для самообновления. Перечисление соответствует битам TCSR в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_TCSR_45DEG
Банки SDRAM обновляются, если температура превышает 45°С.
ADI_EBIU_SDRAM_TCSR_85DEG
Банки SDRAM обновляются, если температура превышает 85°С.
Значение по умолчанию задается следующим макросом:
Это перечисление указывает, нужно ли разрешить или запретить для EBIU выполнять самообновление SDRAM во время периодов отсутствия активности. Это перечисление соответствует биту SRFS в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_SRFS_DISABLE
Запрещает самообновление SDRAM во время отсутствия активности.
ADI_EBIU_SDRAM_SRFS_ENABLE
Разрешает самообновление SDRAM во время отсутствия активности.
Значение по умолчанию задается следующим макросом:
Это перечисление указывает, нужно ли для EBIU использовать внешние буферы, когда несколько устройств SDRAM подключены к внешней шине параллельно. Это перечисление соответствует биту EBUFE в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_EBUFE_DISABLE
Запрещает использование внешних буферов.
ADI_EBIU_SDRAM_EBUFE_ENABLE
Разрешает использование внешних буферов.
Значение по умолчанию задается следующим макросом:
Это перечисление указывает, должна ли быть задержана на 15 тактов SCLK последовательность старта при включении питания power-up start sequence. Это перечисление соответствует биту PUPSD в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_PUPSD_NODELAY
Отсутствие задержки.
ADI_EBIU_SDRAM_EBUFE_ENABLE
Действует задержка 15 тактов SCLK.
Значение по умолчанию задается следующим макросом:
Это перечисление задает последовательность включения SDRAM (power-up sequence). Это перечисление соответствует биту PSM в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_PSM_REFRESH_FIRST
SDC (контроллер SDRAM) выполняет команду Precharge All, за которой идет 8 циклов автообновления, и затем команда загрузки регистра режима (Load Mode Register).
ADI_EBIU_SDRAM_PSM_REFRESH_LAST
SDC (контроллер SDRAM) выполняет команду Precharge All, за которой идет команда загрузки регистра режима (Load Mode Register), и затем следует 8 циклов автообновления.
Значение по умолчанию задается следующим макросом:
Это перечисление задает, использует ли EBIU быстрый доступ back-to-back read-write, чтобы позволить операции чтения и записи SDRAM в следующих друг за другом циклах. Это перечисление соответствует биту FBBRW в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_FBBRW_DISABLE
Режим доступа fast back-to-back read-write запрещен.
ADI_EBIU_SDRAM_FBBRW_ENABLE
Режим доступа fast back-to-back read-write разрешен.
Значение по умолчанию задается следующим макросом:
Это перечисление разрешает или запрещает сигналы управления SDRAM, когда к интерфейсу внешней памяти параллельно подключен внешний контроллер SDRAM. Это перечисление соответствует биту CDDBG в регистре EBIU_SDGCTL.
ADI_EBIU_SDRAM_CDDBG_DISABLE
Запрещает сигналы управления микросхемами памяти SDRAM, когда внешний интерфейс памяти предоставляется внешнему контроллеру.
ADI_EBIU_SDRAM_CDDBG_ENABLE
Разрешает сигналы управления микросхемами памяти SDRAM.
Значение по умолчанию задается следующим макросом:
Это перечисление используется, чтобы указать номер банка 0, 1, 2 или 3 для тех команд, в которых указывается номер банка. Это перечисление также можно использовать, чтобы указать все банки.
Это перечисление используется, чтобы указать, какие банки разрешены. Перечисление соответствует битам AMBEN в глобальном регистре управления асинхронной памятью.
Это перечисление задает, разрешен CLKOUT для доступа к внешней памяти. Перечисление соответствует битам AMCKEN в глобальном регистре управления асинхронной памятью.
Это перечисление относится только к процессору ADSP-BF561. Оно задает, разрешена ли 16-битная упаковка на шине асинхронной памяти. Перечисление соответствует битам BXPEN в глобальном регистре управления асинхронной памятью, где X это номер банка.
Каждый асинхронный банк может быть запрограммирован для оцифровки входа ARDY, что позволяет расширить время доступа к банку. Анализ уровня на выводе ARDY определяет, насколько долго должно быть увеличено время доступа. Это перечисление указывает, должен или нет анализироваться сигнал ARDY. Оно соответствует биту BXRDYEN (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).
Если анализ сигнала ARDY разрешен (см. предыдущую врезку), то это перечисление определяет, по какому уровню должен анализироваться сигнал ARDY (т. е. полярность ARDY). Перечисление соответствует биту BXRDYPOL (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).
Время удержания для контроллера асинхронной памяти указывается в поле bank_time структуры ADI_EBIU_ASYNCH_BANK_TIMING. Это поле имеет тип ADI_EBIU_TIMING_VALUE, которое в данном случае может указывать либо количество тактов, либо значение ADI_EBIU_TIME, но одновременно оба способа указания времени использовать нельзя.
Когда используются такты, перечисление ADI_EBIU_ASYNCH_HOLD_TIME задает количество тактов времени удержания. Оно соответствует биту BXHT (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).
Время установки для контроллера асинхронной памяти указывается в поле bank_time структуры ADI_EBIU_ASYNCH_BANK_TIMING. Это поле имеет тип ADI_EBIU_TIMING_VALUE, которое в данном случае может указывать либо количество тактов, либо значение ADI_EBIU_TIME, но одновременно оба способа указания времени использовать нельзя.
Когда используются такты, перечисление ADI_EBIU_ASYNCH_SETUP_TIME задает количество тактов времени установки. Оно соответствует биту BXST (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).
Время перехода для контроллера асинхронной памяти указывается в поле bank_time структуры ADI_EBIU_ASYNCH_BANK_TIMING. Это поле имеет тип ADI_EBIU_TIMING_VALUE, которое в данном случае может указывать либо количество тактов, либо значение ADI_EBIU_TIME, но одновременно оба способа указания времени использовать нельзя.
Когда используются такты, перечисление ADI_EBIU_ASYNCH_TRANSITION_TIME задает количество тактов времени перехода. Оно соответствует биту BXTT (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).
Это перечисление задает нагрузочную способность шины (drive strength) для устройства памяти. Это значение записывается в поле DS регистра EBIU_DDRCTL3. Перечисление ADI_EBIU_DDR_MOBILE_DS используется только для микросхем mobile DDR. Для не мобильных DDR см. ADI_EBIU_DDR_DS. Возможные значения перечисления ADI_EBIU_DDR_MOBILE_DS перечислены в таблице ниже.
Это перечисление задает нагрузочную способность шины (drive strength) для устройства памяти. Это значение записывается в поле DS регистра EBIU_DDRCTL3. Перечисление ADI_EBIU_DDR_DS используется только для микросхем не мобильных DDR. Для мобильных DDR см. ADI_EBIU_DDR_MOBILE_DS. Возможные значения перечисления ADI_EBIU_DDR_DS перечислены в таблице ниже.
ADI_EBIU_DDR_DS_FULL
00: полная нагрузочная способность.
ADI_EBIU_DDR_DS_REDUCED
01: сниженная нагрузочная способность (по умолчанию).
Это перечисление задает значение для частичного самообновления массива (partial array self-refresh), которое записывается в поле PASR регистра EBIU_DDRCTL3. Это поле доступно только для микросхем мобильных DDR. Возможные значения перечисления ADI_EBIU_DDR_PASR перечислены в таблице ниже.