Ke ЗЯН Дэниэл ЗЯО
Введение
В ряде новых цифровых сигнальных процессоров, например, в анонсированных к выпуску в 2007 году процессорах семейств Blackfin ADSP-BF54x и ADSP-BF52x, эта возможность реализована на аппаратном уровне при помощи интегрированного контроллера. Предлагаемая статья ориентирована, в первую очередь, на разработчиков, которые применяют или планируют применять не имеющие такой аппаратной поддержки процессоры Blackfin предыдущего поколения ADSP-BF53x в своих устройствах и хотели бы добавить в них возможности записи и воспроизведения объемных файлов с изображениями, аудио-, видеоданными и др.
Технология NAND флэш-памяти зародилась как альтернатива накопителям на жестких дисках для портативных устройств, предъявляющих особые требования к потребляемой мощности. Сегодня в большинстве сотовых телефонов, «карманных» компьютеров (Personal Digital Assistant, PDA), цифровых камер, портативных медиаплееров (Portable Media Player, PMP) и других мобильных вычислительных, коммуникационных и бытовых устройств для хранения больших объемов данных и операционных систем применяется NAND флэш-память.
В свою очередь, процессоры Blackfin хорошо подходят для применения в портативных системах по причине их малой рассеиваемой мощности, высокой производительности и «конвергентной» архитектуры. Поэтому все чаще возникает задача подключения NAND флэш-памяти к процессорам Blackfin.
Подключение NAND флэш-памяти
к процессорам ADSP-BF53x Blackfin
При создании систем цифровой обработки сигналов, особенно в системах обработки и воспроизведения видеоизображений и звука, зачастую возникает необходимость хранения и оперативной перезаписи больших объемов данных. Для таких задач идеально подходят микросхемы NAND флэш-памяти, которые обладают большей логической емкостью и гораздо меньшим временем записи-стирания по сравнению с традиционной NOR флэш-памятью. Поскольку NAND флэш-память имеет сложный внешний интерфейс с мультиплексированной шиной адреса, данных и команд, для работы с ней процессор должен формировать определенные комбинации команд и сигналов управления.
В этой статье обсуждается подключение к процессорам ADSP BF53x Blackfin NAND флэш-памяти как MLC-, так и SLC-типа. Статья сопровождается примерами функций низкоуровневого драйвера, работоспособность которого была проверена на аппаратной платформе, состоящей из оценочной платы ADSP-BF533 EZ-KIT LITE (ревизия 1.6) и подключенной к ней дочерней платы NAND флэш-памяти в среде VisualDSP++ 4.0 (с обновлением от апреля 2006 года).
Для того чтобы разработчики систем имели большую свободу действий, в статье описываются два подхода к реализации интерфейса. В качестве примера использовались микросхемы NAND флэш-памяти SLC-типа K9F2G08U0M производства Samsung и MLC-типа TC58NVG3D4CTG производства Toshiba.
NAND и NOR флэш-память
Микросхемы NOR флэш-памяти широко применяются в электронной индустрии. Они имеют простой интерфейс и годятся для прямого исполнения кода, что позволяет применять их в устройствах, не требующих хранения данных. NOR память обладает высокой скоростью чтения, однако ее быстродействие при записи и стирании невелико. По мере усложнения современных устройств от них требуется хранение все больших объемов данных и кода программ при меньшем времени записи и стирания. Все эти возможности предоставляет NAND флэш-память. Емкость современных микросхем NAND флэш-памяти варьируется от 8 до 512 Мбайт (16 Гбит макс. по данным на 2007 г. — прим. редактора). NAND память
представляет собой устройство ввода/вывода, и для выполнения любой операции с ней необходим достаточно сложный драйвер.
Ячейки памяти, обращение к которым происходит чаще, становятся более подверженными возникновению ошибок. Поэтому устройства NAND флэш-памяти обычно имеют дополнительную память, которая может использоваться файловой системой для замещения плохих блоков хорошими без уменьшения доступного объема. Файловые системы для NAND флэш-памяти, такие как JFFS2, обычно стараются обеспечивать равномерный износ по всему объему памяти для увеличения срока действия устройства.
NAND флэш-память: SLC и MLC
Сегодня на рынке представлены два различных типа устройств NAND флэш-памяти: с одноуровневыми (Single-Level-Cell, SLC) и многоуровневыми ячейками (Multi-LevelCell, MLC). Микросхемы MLC-типа способны хранить в одной ячейке памяти два или более битов, а микросхемы SLC-типа — только один бит данных.
Микросхемы MLC-типа, в отличие от микросхем SLC-типа, обладают намного большей емкостью, однако скорость выполнения операций чтения и записи у них ниже. Кроме того, требования к кодам, исправляющим ошибки (Error Correcting Codes, ECC), для устройств MLC-типа жестче, поскольку они в большей степени подвержены возникновению ошибок. Стоимость MLC флэш-памяти в пересчете на один бит намного меньше аналогичного параметра у SLC. Сравнение ха-
Таблица 1. Сравнение характеристик технологий SLC и MLC
Параметр SLC MLC
Логическая емкость Малая Большая
Скорость Высокая Низкая
ECC 1 бит на 528 байтов 4 бита на 528 байтов
Количество циклов записи-стирания 100 000 10 000
Стоимость Высокая Низкая
рактеристик устройств NAND флэш-памяти двух типов приведено в таблице 1.
MLC NAND флэш-память обладает хорошей производительностью, а ее низкая стоимость делает карты NAND флэш-памяти большой емкости более доступными, что позволяет значительно расширить возможности портативных устройств.
SLC NAND флэш-память больше подходит для нетривиальных задач, в которых предъявляются высокие требования к техническим характеристикам. Она имеет большое количество циклов записи-стирания, что обеспечивается за счет высокой износостойкости и надежности. Эти свойства SLC-памяти находят применение в твердотельных накопителях, устройствах, используемых для записи сейсмических данных, сетевом оборудовании, оборудовании HDTV, сканерах штрих-кодов, ударопрочных ПК, авиационных «черных ящиках», портативных устройствах хранения информации, а также «карманных» ПК и цифровых фотокамерах.
К типичным областям применения MLC NAND флэш-памяти относятся карты памяти цифровых видео- и фотокамер, USB флэш-накопители, МР3-плееры, мониторы для автомобильной диагностики, устройства GPS, аниматронные модели (роботы, имитирующие объекты живой природы), карты для видеоигр и различные электронные игрушки. Среди приложений, в которых могут использоваться микросхемы NAND памяти, изготовленные как по MLC, так и по SLC технологии — карты памяти для принтеров (хранение шрифтов), сотовые телефоны, телекоммуникационное оборудование, голосовая почта и телевизионные компьютерные приставки. Разделение областей применения SLC и MLC NAND флэш-памяти показано на рис. 1.
В NOR флэш-памяти и других традиционных SRAM-подобных устройствах используются раздельные шины адреса и данных и базовые управляющие сигналы. NAND флэш-память оптимизирована для пересылок больших блоков информации и имеет единый набор выводов I/O (ввода/вывода), который используется как для адреса, так и для данных.
В процессорах Blackfin порты NAND флэш-памяти можно отобразить в пространстве асинхронной памяти и обращаться к ним как к стандартному устройству, отображенному в карте памяти. Аппаратный интерфейс для SLC и MLC NAND флэш-памяти идентичен.
HDD повышенной надежности Запись сейсмических данных Сетевое оборудование HDTV PDA
Цифровые фотоаппараты Сканеры штрих-кодов ПК повышенной надежности Авиационные «черные ящики» Портативные системы хранения информации
SLC
- скорость
- износостойкость
- надежность
Цифровое видео Карты для цифровых фотоаппаратов USB флэш-накопители MP3
Автомобильная диагностика GSM (карты) Аниматронные модели Карты для видеоигр Электронные игрушки
MLC
меньшая стоимость большая емкость
Рис. 1. Типичные приложения памяти SLC- и MLC-типа
Базовый интерфейс NAND флэш-памяти
В устройствах NAND флэш-памяти выводы I/O используются и для адреса, и для данных, а также для приема команд. Управляющие сигналы и слова команд у устройств NAND флэш-памяти SLC- и MLC-типа совпадают, поэтому интерфейс с микросхемами памяти обоих типов для всех процессоров Blackfin универсален.
Обращение к флэш-памяти осуществляется по столбцам, страницам и блокам. Чтение и программирование (запись) выполняются на уровне страниц, а операции стирания — на уровне блоков.
NAND флэш-память поддерживает базовые команды — стирание блока (block erase), программирование (запись) страницы (page program), чтение состояния (read status) и чтение страницы (page read). Для обращения к устройству необходимо выставить низкий уровень сигнала на выводе разрешения выборки кристалла (CE#). Во время активного сигнала CE# NAND флэш-память может принимать байты от хоста при низком уровне сигнала разрешения записи (WE#) или выдавать данные на хост при низком уровне сигнала разрешения чтения (RE#). При высоком уровне CE# микросхема игнорирует сигналы WE# и RE#, и линии I/O находятся в третьем состоянии. Для посылки команд в устройство при активном сигнале CE# выставляется сигнал разрешения фиксации команды (CLE).
Сигнал разрешения фиксации адреса (ALE) используется для фиксации адреса в регистре адреса флэш-памяти. В таблице 2 показано, к каким внутренним регистрам происходит обращение при различных комбинациях CLE и ALE.
Интерфейс Samsung K9F2G08U0M
Микросхема K9F2G08U0M производства Samsung имеет конфигурацию 256 Мх8 бит (2 Гбит) с резервной емкостью 64 Мбит. Это устройство памяти является оптимальным решением для больших энергонезависимых запоминающих систем, таких как полупроводниковые файловые запоминающие системы, а также для портативных устройств, требующих применения энергонезависимой памяти.
Микросхема может работать в диапазоне напряжений питания от 2,7 до 3,6 В. Типичное время, затрачиваемое на программирование 2112-байтной страницы, составляет 200 мкс, а операция стирания 128-килобайт-ного блока может быть выполнена за 2 мс. Чтение любого байта страницы данных может быть выполнено за 30 нс. Выводы I/O служат портами ввода/вывода адреса и данных, а также входами команд. Одна страница в K9F2G08U0M состоит из 2112 байтов, а один блок — из 64 страниц. Структура страниц и блоков микросхемы флэш-памяти K9F2G08U0M показана на рис. 2.
Интерфейс Toshiba TC58NVG3D4CTG10
Микросхема TC58NVG3D4CTG10 производства Toshiba — это единое NAND электрически стираемое и программируемое постоянное запоминающее устройство (NAND E2PROM) емкостью 8 Гбит с напряжением питания
Таблица 2. Комбинации ALE/CLE
ALE CLE Выбранный регистр
0 0 Регистр данных
0 1 Регистр команд
1 0 Регистр адреса
1 1 Зарезервированная комбинация
28
ЦСП
128 К страниц (2048 блоков)
1 блок = 64 страницы (128 К + 4 К) байтов
1 страница = (2 К + 64) байтов 1 блок = (2 К + 64) байтов х 64 страницы = = (128 К +4 К) байтов 1 м/сх = (2 К + 64) байтов х 64 страницы х х 2048 блоков = 2112 Мбит
8 бит
2 кбайта
I/00-I/07
2 кбайта
64 байта
Рис. 2. Внутренняя организация микросхемы флэш-памяти K9F2G08U0M
3,3 В. Она имеет внутреннюю организацию из 4160 (4096+64) блоков по 128 страниц, каждая из которых, в свою очередь, содержит 2112 (2048+64) байтов.
Микросхема имеет два 2112-байтных статических регистра, которые позволяют пересылать считываемые и программируемые данные между регистром и массивом ячеек памяти с инкрементом в 2112 байтов. Операция стирания выполняется целыми блоками.
Подключение ЫДЫй флэш-памяти к процессору ДйБР-БРБЗх
Поскольку процессоры А08Р-БЕ53х Б1аскйп не имеют интегрированного контроллера ЫАЫБ флэш-памяти, для управления и обращения к подобной памяти используется программный драйвер. При подключении устройств ЫАЫБ памяти к процессору Б1аскйп могут применяться два подхода: с использованием выводов СРЮ или выводов БВГО.
Использование выводов вРЮ для интерфейса с ЫДЫР флэш-памятью
Первый подход заключается в формировании всех необходимых сигналов управления при помощи выводов I/O общего назначения
PF8 ► ALE
PF9 ► CLE
PF7 ► RD#
PF6 ► WR#
PF10 < R/B#
PF11 ► CS#
D7:0 < ► 1/07:0
BF533 K9F2G08U0M
Рис. 3. Использование GPIO для интерфейса с NAND флэш-памятью
(GPIO). Этот подход требует внимательного согласования необходимых задержек для соблюдения требований к времени обращения памяти.
На рис. 3 показаны связи между процессором ADSP-BF533 Blackfin и микросхемой флэш-памяти Samsung K95G08U0M.
Использование выводов EBIU для интерфейса с NAND флэш-памятью
Второй подход заключается в использовании для связи с NAND флэш-памятью модуля интерфейса внешней шины (External Bus Interface Unit, EBIU) и одного вывода GPIO. Для стандартных устройств NAND флэш-памяти необходимо, чтобы сигнал CE# сохранял достоверное значение во время операции чтения. Поэтому для сохранения совместимости как со стандартной NAND флэш-памятью, так и с NAND флэш-памятью, в которой таких требований к сигналу CE# не предъявляется (CEDC NAND, Chip Enable Don't Care NAND), этот сигнал формируется при помощи вывода GPIO. Все остальные сигналы формируются непосредственно интерфейсом EBIU.
На рис. 4 показаны связи между процессором ADSP-BF533 Blackfin и микросхемой флэш-памяти Samsung K95G08U0M.
A1 ► ALE
A2 > CLE
AOE# > RD#
AWE# > WR#
PF10 < R/B#
PF11 > CS#
D7:0 < > 1/07:0
BF533 K9F2G08U0M
Рис. 4. Использование EBIU для интерфейса с NAND флэш-памятью
К EBIU может быть подключено до четырех банков устройств памяти с различными временными характеристиками. Каждый банк, независимо от размера используемого устройства, занимает сегмент размером 1 Мбайт, поэтому разрывов между банками не будет только в том случае, если все они полностью заполнены. Синхронизация EBIU осуществляется сигналом тактовой синхронизации системы (SCLK), на частоте которого работают все устройства синхронной памяти, подключенные к процессору. Поскольку управление EBIU осуществляется автоматически контроллером асинхронной памяти процессора Blackfin, такой способ подключения NAND флэш-памяти прост и позволяет достичь оптимальной скорости обращения.
Разработка драйвера NAND флэш-памяти
Выше рассматривались два варианта построения интерфейса с микросхемами NAND флэш-памяти K9F2G08U0M производства Samsung и TC58NVG3D4CTG производства Toshiba. Этот раздел посвящен описанию базового драйвера для второго варианта и сопровождается примерами временных диаграмм для каждой из команд. В листинге 1 дан пример реализации функции стирания блока.
bool _NF_Block_Erase(unsigned int Block_Address){ unsigned char NAND_Data = 0;
NAND_Address_Table.Value = Block_Address << 12; Write_Command(0x60);
Write_Address
(NAND_Address_Table.NAND_Address.NAND_Address_A12_A19,
NAND_Address_Table.NAND_Address.NAND_Address_A20_A27,
NAND_Address_Table.NAND_Address.NAND_Address_A28,
NAND_Address_Table.NAND_Address.NAND_Address_A0_A7,
NAND_Address_Table.NAND_Address.NAND_Address_A8_A11,
0x03);
Write_Command(0xd0);
while(!Wait_NAND_RADY());
Write_Command(0x70);
delay(50000);
NAND_Data = *pNAND_DATA_REG;
NAND_Finish(); if(NAND_Data != 0xe0)//0xc0) return false; else return true;
}
Листинг 1. Функция стирания блока
В листинге 2 приведен пример реализации функции записи страницы.
В листинге 3 приведен пример реализации функции чтения страницы.
Базовые драйверы NAND флэш-памяти строятся на низкоуровневых операциях, таких как Write_Command(), Write_Address(), Wait_NAND_RDY() и Set_CE(). В этих операциях для манипуляции микросхемами флэш-памяти задействуются сигналы GPIO и линий адреса. В листинге 4 приведена реализация функции выдачи команды.
В листинге 5 приведена реализация функции управления сигналом CE#.
В листинге 6 приведена реализация функций записи регистров адреса и команд флэш-памяти.
ЦСП
29
Рис. 8. Команда чтения ID кристалла
bool _NF_Page_Write(unsigned int Block_Address,unsigned short Page_Address,unsigned char *psrc)
{
int i;
unsigned char NAND_Data; int NAND_Addr;
NAND_Addr = (Block_Address << 12) I Page_Address; NAND_Address_Table.Value = NAND_Addr; Write_Command(0x80);
Write_Address
(NAND_Address_Table.NAND_Address.NAND_Address_A0_A7,
NAND_Address_Table.NAND_Address.NAND_Address_A8_A11,
NAND_Address_Table.NAND_Address.NAND_Address_A12_A19,
NAND_Address_Table.NAND_Address.NAND_Address_A20_A27,
NAND_Address_Table.NAND_Address.NAND_Address_A28,
0x05);
delay(100);
for(i = 0;i<DATA_NUM;i++)
*pNAND_DATA_REG = *(psrc+i);
Write_Command(0x10);
while(!Wait_NAND_RADY());
Write_Command(0x70);
delay(5000);
NAND_Data = *pNAND_DATA_REG;
NAND_Finish(); if(NAND_Data != 0xe0) return false; else
return true;
}
Листинг 2. Функция записи страницы
Для чтения из устройства флэш-памяти и записи в него может использоваться механизм DMA. В данном случае программист должен гарантировать, что одновременно
bool _NF_Page_Read(unsigned int Block_Address,unsigned short Page_Address,unsigned char *pdes)
{
int i;
Write_Command(0x00);
Write_Address
(NAND_Address_Table.NAND_Address.NAND_Address_A0_A7,
NAND_Address_Table.NAND_Address.NAND_Address_A8_A11,
NAND_Address_Table.NAND_Address.NAND_Address_A12_A19,
NAND_Address_Table.NAND_Address.NAND_Address_A20_A27,
NAND_Address_Table.NAND_Address.NAND_Address_A28,
0x04);
Write_Command(0x30); while(!Wait_NAND_RADY()); for(i = 0;i<DATA_NUM;i++)
{
delay(600);
*(pdes+i) = *pNAND_DATA_REG;
}
NAND_Finish(); return true;
}
Листинг 3. Функция чтения страницы
с этим ни к одному из остальных банков внешней памяти не будет производиться обращений, инициируемых ядром или контроллером ЭМА. Любые подобные обращения могут вызывать выдачу на устройство флэш-памяти ложных импульсов ИБ# и/или WR#, что приведет к нарушению целостности реализуемого интерфейса и возникновению непредсказуемых результатов.
void Write_Command(unsigned char command)
{
Set_CE(0);
Write_NAND_FLASH_Com(command);
}
Листинг 4. Функция Write_Command
void Set_CE(bool state)
{
if(!state)
*pFIO_FLAG_D &= ~PF11; else
*pFIO_FLAG_D I= PF11;
}
Листинг 5. Функция Set_CE
void Write_NAND_FLASH_Com(unsigned char Write_Data)
{
*pNAND_COMMAND_REG = Write_Data;
}
void Write_NAND_FLASH_Addr(unsigned char Write_Data)
{
*pNAND_ADDRESS_REG = Write_Data;
}
Листинг 6. Функции Write_NAND_FLASH_Com и Write NAND FLASH Addr
На рис. 5-8 приведены временные диаграммы для описанного интерфейса, снятые с эк рана осциллографа.
Коды, исправляющие ошибки для NAND флэш-памяти
NAND флэш-память типа SLC и MLC для обнаружения и исправления ошибок в битах требует применения кодов, исправляющих ошибки (ECC). Для этих целей хорошо подходит алгоритм Рида-Соломона, который стал стандартным методом кодирования для обоих типов NAND флэш-памяти.
При разработке драйверов чтения-записи NAND флэш-памяти был реализован и интегрирован в драйверы кодер-декодер 72-разрядного кода Рида-Соломона (464,456,4).
Файловые системы NAND флэш-памяти
NAND флэш-память оптимизирована для файловых структур, в которых нет необходимости читать каждое слово по отдельности, а вместо этого производится по-секторный обмен данными, как при работе со стандартными накопителями на жестких дисках с файловыми системами, использующими таблицы размещения файлов (FAT).
В отличие от NOR флэш-памяти NAND флэш-память требует наличия механизма учета плохих блоков, такого как TrueFFS.
Для NAND флэш-памяти подходят уже применяемые в компьютерной индустрии файловые системы, такие как JFFS, JFFS2, FAT и т. д. Кроме того, существует единственная в своем роде файловая система, которая предназначена специально для NAND флэш-памяти и может использоваться с любой операционной системой — YAFFS (Yet Another Flash File System). В YAFFS для повышения надежности используется протоколирование коррекции ошибок и методы верификации. Эта файловая система специально разработана для работы в условиях ограничений NAND флэш-памяти и учитывает ее особенности, что позволяет достигать максимальной производительности. В последующих версиях драйвера будет добавлена реализация конкретной файловой системы для NAND флэш-памяти.
Заключение
Несмотря на то, что процессоры ADSP-BF53x Blackfin не имеют интегрированного NAND-контроллера, разработчики могут с лег-
костью подключать NAND флэш-память типа SLC и MLC к EBIU или GPIO. Оба варианта интерфейса не требуют добавления внешней логики. Код драйвера, сопровождающий эту статью, может быть использован разработчиками при реализации драйверов для других микросхем NAND флэш-памяти. ■
Литература
1. ADSP-BF533 Blackfin Embedded Processor Data Sheet, Rev. C, May, 2006. Analog Devices, Inc.
2. MLC NAND Performance for Consumer Applications, Toshiba America Electronic Components, Inc.
3. K9F2G08U0M 256Mx8 Bit/512Mx8-Bit NAND Flash Memory Data Sheet, Rev 1.2, October 31, 2005. Samsung Electronics, Inc.
4. TC58NVG3D4CTG 8 GBIT (1Gx8 BIT/512Mx16 BIT) CMOS NAND E2PROM (Multi-Level-Cell) Data Sheet, Toshiba Semiconductor Company.
5. Application Note for NAND Flash Memory, Rev. 2.0, December 1999, Memory Product & Technology Division from Samsung Electronics, Inc.
6. ADSP-BF533 Blackfin Processor Hardware Reference, Rev. 3.2, July 2006. Analog Devices, Inc.
7. Interfacing NAND Flash Memory with ADSP-2126x SHARC Processors (EE-279), Rev. 1, November 2005. Analog Devices, Inc.