Подключение NAND FLASH памяти к процессорам ADSP BF53x Blackfin

№ 6’2007
При создании систем цифровой обработки сигналов, особенно в системах обработки и воспроизведения видеоизображений и звука, зачастую возникает необходимость хранения и оперативной перезаписи больших объемов данных. Для таких задач идеально подходят микросхемы NAND флэш-памяти, которые обладают большей логической емкостью и гораздо меньшим временем записи-стирания по сравнению с традиционной NOR флэш-памятью. Поскольку NAND флэш-память имеет сложный внешний интерфейс с мультиплексированной шиной адреса, данных и команд, для работы с ней процессор должен формировать определенные комбинации команд и сигналов управления.

Введение

В ряде новых цифровых сигнальных процессоров, например, в анонсированных к выпуску в 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.

Таблица 1. Сравнение характеристик технологий SLC и MLC
Сравнение характеристик технологий SLC и MLC

MLC NAND флэш-память обладает хорошей производительностью, а ее низкая стоимость делает карты NAND флэш-памяти большой емкости более доступными, что позволяет значительно расширить возможности портативных устройств.

SLC NAND флэш-память больше подходит для нетривиальных задач, в которых предъявляются высокие требования к техническим характеристикам. Она имеет большое количество циклов записи-стирания, что обеспечивается за счет высокой износостойкости и надежности. Эти свойства SLC-памяти находят применение в твердотельных накопителях, устройствах, используемых для записи сейсмических данных, сетевом оборудовании, оборудовании HDTV, сканерах штрих-кодов, ударопрочных ПК, авиационных «черных ящиках», портативных устройствах хранения информации, а также «карманных» ПК и цифровых фотокамерах.

К типичным областям применения MLC NAND флэш-памяти относятся карты памяти цифровых видео- и фотокамер, USB флэш-накопители, MP3-плееры, мониторы для автомобильной диагностики, устройства GPS, аниматронные модели (роботы, имитирующие объекты живой природы), карты для видеоигр и различные электронные игрушки. Среди приложений, в которых могут использоваться микросхемы NAND памяти, изготовленные как по MLC, так и по SLC технологии — карты памяти для принтеров (хранение шрифтов), сотовые телефоны, телекоммуникационное оборудование, голосовая почта и телевизионные компьютерные приставки. Разделение областей применения SLC и MLC NAND флэш-памяти показано на рис. 1.

Типичные приложения памяти SLC- и MLC-типа
Рис. 1. Типичные приложения памяти SLC- и MLC-типа

В 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.

Таблица 2. Комбинации ALE/CLE
Комбинации ALE/CLE

Интерфейс 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.

Внутренняя организация микросхемы флэш-памяти K9F2G08U0M
Рис. 2. Внутренняя организация микросхемы флэш-памяти K9F2G08U0M

Интерфейс 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.

Использование GPIO для интерфейса с NAND флэш-памятью
Рис. 3. Использование GPIO для интерфейса с NAND флэш-памятью

Использование выводов 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 для интерфейса с NAND флэш-памятью
Рис. 4. Использование EBIU для интерфейса с NAND флэш-памятью

К 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 приведены временные диаграммы для описанного интерфейса, снятые с экрана осциллографа.

Команда стирания
Рис. 5. Команда стирания
Команда записи
Рис. 6. Команда записи
Команда чтения
Рис. 7. Команда чтения
Команда чтения ID кристалла
Рис. 8. Команда чтения ID кристалла

Коды, исправляющие ошибки для 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 флэш-памяти.

Литература

  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 256M×8 Bit/512M×8-Bit NAND Flash Memory Data Sheet, Rev 1.2, October 31, 2005. Samsung Electronics, Inc.
  4. TC58NVG3D4CTG 8 GBIT (1G×8 BIT/512M×16 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *