Подключение NAND FLASH памяти к процессорам ADSP BF53x Blackfin
Введение
В ряде новых цифровых сигнальных процессоров, например, в анонсированных к выпуску в 2007 году процессорах семейств Blackfin ADSP-BF54x и ADSP-BF52x, эта возможность реализована на аппаратном уровне при помощи интегрированного контроллера. Предлагаемая статья ориентирована, в первую очередь, на разработчиков, которые применяют или планируют применять не имеющие такой аппаратной поддержки процессоры Blackfin предыдущего поколения ADSP-BF53x в своих устройствах и хотели бы добавить в них возможности записи и воспроизведения объемных файлов с изображениями, аудио-, видеоданными и др.
Технология NAND флэш-памяти зародилась как альтернатива накопителям на жестких дисках для портативных устройств, предъявляющих особые требования к потребляемой мощности. Сегодня в большинстве сотовых телефонов, «карманных» компьютеров (Personal Digital Assistant, PDA), цифровых камер, портативных медиаплееров (Portable Media Player, PMP) и других мобильных вычислительных, коммуникационных и бытовых устройств для хранения больших объемов данных и операционных систем применяется NAND флэш-память.
В свою очередь, процессоры Blackfin хорошо подходят для применения в портативных системах по причине их малой рассеиваемой мощности, высокой производительности и «конвергентной» архитектуры. Поэтому все чаще возникает задача подключения NAND флэш-памяти к процессорам Blackfin.
В этой статье обсуждается подключение к процессорам 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-Level-Cell, MLC). Микросхемы MLC-типа способны хранить в одной ячейке памяти два или более битов, а микросхемы SLC-типа — только один бит данных.
Микросхемы MLC-типа, в отличие от микросхем SLC-типа, обладают намного большей емкостью, однако скорость выполнения операций чтения и записи у них ниже. Кроме того, требования к кодам, исправляющим ошибки (Error Correcting Codes, ECC), для устройств MLC-типа жестче, поскольку они в большей степени подвержены возникновению ошибок. Стоимость MLC флэш-памяти в пересчете на один бит намного меньше аналогичного параметра у SLC. Сравнение характеристик устройств NAND флэш-памяти двух типов приведено в таблице 1.
MLC NAND флэш-память обладает хорошей производительностью, а ее низкая стоимость делает карты NAND флэш-памяти большой емкости более доступными, что позволяет значительно расширить возможности портативных устройств.
SLC NAND флэш-память больше подходит для нетривиальных задач, в которых предъявляются высокие требования к техническим характеристикам. Она имеет большое количество циклов записи-стирания, что обеспечивается за счет высокой износостойкости и надежности. Эти свойства SLC-памяти находят применение в твердотельных накопителях, устройствах, используемых для записи сейсмических данных, сетевом оборудовании, оборудовании HDTV, сканерах штрих-кодов, ударопрочных ПК, авиационных «черных ящиках», портативных устройствах хранения информации, а также «карманных» ПК и цифровых фотокамерах.
К типичным областям применения MLC NAND флэш-памяти относятся карты памяти цифровых видео- и фотокамер, USB флэш-накопители, MP3-плееры, мониторы для автомобильной диагностики, устройства GPS, аниматронные модели (роботы, имитирующие объекты живой природы), карты для видеоигр и различные электронные игрушки. Среди приложений, в которых могут использоваться микросхемы NAND памяти, изготовленные как по MLC, так и по SLC технологии — карты памяти для принтеров (хранение шрифтов), сотовые телефоны, телекоммуникационное оборудование, голосовая почта и телевизионные компьютерные приставки. Разделение областей применения SLC и MLC NAND флэш-памяти показано на рис. 1.
В NOR флэш-памяти и других традиционных SRAM-подобных устройствах используются раздельные шины адреса и данных и базовые управляющие сигналы. NAND флэш-память оптимизирована для пересылок больших блоков информации и имеет единый набор выводов I/O (ввода/вывода), который используется как для адреса, так и для данных.
В процессорах Blackfin порты NAND флэш-памяти можно отобразить в пространстве асинхронной памяти и обращаться к ним как к стандартному устройству, отображенному в карте памяти. Аппаратный интерфейс для SLC и MLC NAND флэш-памяти идентичен.
Базовый интерфейс 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 M×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 Гбит с напряжением питания 3,3 В. Она имеет внутреннюю организацию из 4160 (4096+64) блоков по 128 страниц, каждая из которых, в свою очередь, содержит 2112 (2048+64) байтов.
Микросхема имеет два 2112-байтных статических регистра, которые позволяют пересылать считываемые и программируемые данные между регистром и массивом ячеек памяти с инкрементом в 2112 байтов. Операция стирания выполняется целыми блоками.
Подключение NAND флэш-памяти к процессору ADSP-BF53x
Поскольку процессоры ADSP-BF53x Blackfin не имеют интегрированного контроллера NAND флэш-памяти, для управления и обращения к подобной памяти используется программный драйвер. При подключении устройств NAND памяти к процессору Blackfin могут применяться два подхода: с использованием выводов GPIO или выводов EBIU.
Использование выводов GPIO для интерфейса с NAND флэш-памятью
Первый подход заключается в формировании всех необходимых сигналов управления при помощи выводов I/O общего назначения (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.
К EBIU может быть подключено до четырех банков устройств памяти с различными временными характеристиками. Каждый банк, независимо от размера используемого устройства, занимает сегмент размером 1 Мбайт, поэтому разрывов между банками не будет только в том случае, если все они полностью заполнены. Синхронизация EBIU осуществляется сигналом тактовой синхронизации системы (SCLK), на частоте которого работают все устройства синхронной памяти, подключенные к процессору. Поскольку управление EBIU осуществляется автоматически контроллером асинхронной памяти процессора Blackfin, такой способ подключения NAND флэш-памяти прост и позволяет достичь оптимальной скорости обращения.
Разработка драйвера NAND флэш-памяти
Выше рассматривались два варианта построения интерфейса с микросхемами NAND флэш-памяти K9F2G08U0M производства Samsung и TC58NVG3D4CTG производства Toshiba. Этот раздел посвящен описанию базового драйвера для второго варианта и сопровождается примерами временных диаграмм для каждой из команд. В листинге 1 дан пример реализации функции стирания блока.
В листинге 2 приведен пример реализации функции записи страницы.
В листинге 3 приведен пример реализации функции чтения страницы.
Базовые драйверы NAND флэш-памяти строятся на низкоуровневых операциях, таких как Write_Command(), Write_Address(), Wait_NAND_RDY() и Set_CE(). В этих операциях для манипуляции микросхемами флэш-памяти задействуются сигналы GPIO и линий адреса. В листинге 4 приведена реализация функции выдачи команды.
В листинге 5 приведена реализация функции управления сигналом CE#.
В листинге 6 приведена реализация функций записи регистров адреса и команд флэш-памяти.
Для чтения из устройства флэш-памяти и записи в него может использоваться механизм DMA. В данном случае программист должен гарантировать, что одновременно с этим ни к одному из остальных банков внешней памяти не будет производиться обращений, инициируемых ядром или контроллером DMA. Любые подобные обращения могут вызывать выдачу на устройство флэш-памяти ложных импульсов RD# и/или WR#, что приведет к нарушению целостности реализуемого интерфейса и возникновению непредсказуемых результатов.
На рис. 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 флэш-памяти.
Заключение
Несмотря на то, что процессоры ADSPBF53x Blackfin не имеют интегрированного NAND-контроллера, разработчики могут с легкостью подключать NAND флэш-память типа SLC и MLC к EBIU или GPIO. Оба варианта интерфейса не требуют добавления внешней логики. Код драйвера, сопровождающий эту статью, может быть использован разработчиками при реализации драйверов для других микросхем NAND флэш-памяти.
Литература
- ADSP-BF533 Blackfin Embedded Processor Data Sheet, Rev. C, May, 2006. Analog Devices, Inc.
- MLC NAND Performance for Consumer Applications, Toshiba America Electronic Components, Inc.
- K9F2G08U0M 256M×8 Bit/512M×8-Bit NAND Flash Memory Data Sheet, Rev 1.2, October 31, 2005. Samsung Electronics, Inc.
- TC58NVG3D4CTG 8 GBIT (1G×8 BIT/512M×16 BIT) CMOS NAND E2PROM (Multi-Level-Cell) Data Sheet, Toshiba Semiconductor Company.
- Application Note for NAND Flash Memory, Rev. 2.0, December 1999, Memory Product & Technology Division from Samsung Electronics, Inc.
- ADSP-BF533 Blackfin Processor Hardware Reference, Rev. 3.2, July 2006. Analog Devices, Inc.
- Interfacing NAND Flash Memory with ADSP-2126x SHARC Processors (EE-279), Rev. 1, November 2005. Analog Devices, Inc.