Выпуск #10/2017
Д.Хьюз
Ключевые аспекты применения флеш-памяти во встраиваемых системах
Ключевые аспекты применения флеш-памяти во встраиваемых системах
Просмотры: 2943
Рассмотрены наиболее распространенные типы флеш-памяти и ключевые проблемы, которые разработчик должен принимать во внимание при создании встраиваемого приложения.
УДК 004.087.2
ВАК 05.27.00
DOI: 10.22184/1992-4178.2017.171.10.68.74
УДК 004.087.2
ВАК 05.27.00
DOI: 10.22184/1992-4178.2017.171.10.68.74
Теги: 3d nand emmc flash memory mlc nand nor sd-card sd-карта slc tlc usb-drive usb-накопитель флеш-память
Быстрое развитие технологии флеш-памяти за последние годы позволило достичь рекордных показателей по информационной емкости и стоимости в расчете на бит. Однако переход на более жесткие технологические нормы снизил ресурс этих устройств. Кроме того, применение флеш-памяти во встраиваемых системах, таких как Интернет вещей, влечет за собой необходимость учета дополнительных факторов и может затруднить достижение требований по эффективности, надежности и отказоустойчивости разрабатываемого приложения. Поэтому проектирование встраиваемой системы с использованием флеш-памяти требует от разработчика тщательного системного подхода. Рассмотрим наиболее распространенные типы флеш-памяти и ключевые проблемы, которые разработчик должен принимать во внимание при создании встраиваемого приложения.
ТИПЫ ФЛЕШ-ПАМЯТИ ДЛЯ ВСТРАИВАЕМЫХ ПРИЛОЖЕНИЙ[1]
Устройства флеш-памяти могут быть как съемными, так и постоянно интегрированными в систему. К сменным носителям относятся флеш-накопители USB, SD / SDHC / XDHX / MMC-карты и другие устройства. Несъемные носители – это микросхемы флеш-памяти типа NAND и NOR, а также чипы стандарта eMMC (embedded Multi Media Card), в которые кроме флеш-памяти интегрирован контроллер (рис.1).
Практически все съемные носители содержат одну и более микросхем флеш-памяти типа NAND и управляющий контроллер, который выполнен в виде заказной ИС или ПЛИС и обеспечивает уровень трансляции флеш-памяти (Flash Translation Layer – FTL). Ключевые особенности таких носителей – большая емкость памяти, интегрированный FTL-уровень, высокая скорость и доступность.
Однако с точки зрения применения сменных носителей во встраиваемых системах инженеры должны учитывать потенциальные риски. Большая часть этих носителей не способна надежно обрабатывать данные и, как правило, не рассчитана на использование во встраиваемых системах. SD-карты с маркировкой Industrial, то есть предназначенные для промышленного применения, отличаются от обычных устройств, как правило, только расширенным температурным диапазоном. Сменные носители хорошо подходят для потребительских товаров, но применение их в промышленных приложениях, таких как, например, регистраторы данных, проблематично. В большинстве случаев применение съемных носителей может быть сопряжено с риском появления ошибок в данных, они не могут обеспечить надежный контакт и не устойчивы к вибрации.
Сменные носители могут быть считаны только совместимой хост-системой, что зачастую вынуждает выбирать в качестве файловой системы FAT, известную своими ограничениями. Большинство носителей данного типа не могут обеспечить высокий уровень отказоустойчивости или возможность установки точек фиксации данных (commit points) для контроля состояния карты. И это реальная проблема – невозможно добиться безотказной работы, сохраняется риск нарушения целостности данных и файловой системы. Большая часть SD-карт оптимизирована для высокоскоростных операций в ущерб корректному поведению в случае непредвиденного сброса системы. Кроме того, в них не предусмотрена возможность установки различий между критичными и некритичными операциями.
Более высокий уровень надежности обеспечивают несъемные носители флеш-памяти, среди которых широко используются NAND-, NOR- и eMMC-память. Однако по сравнению с NOR-памятью применение NAND-памяти связано с необходимостью решения сложных задач на системном уровне. Рассмотрим особенности этих трех типов памяти и проблемы их использования во встраиваемых системах.
NAND-ПАМЯТЬ
NAND-память характеризуется низкой стоимостью хранения бита данных, а также высокой скоростью стирания и записи. Для упрощения схемного решения в NAND-памяти адресная шина мультиплексирована с шиной данных. Сегодня NAND-память – основная технология хранения данных, используемая в широком спектре устройств – от твердотельных дисков (SSD) до SD-карт и чипов eMMC. NAND-память выбирают, когда необходимо обеспечить высокую информационную емкость и производительность.
NAND-память организована в виде набора блоков, разделенных на физические страницы. Каждая страница содержит область данных и резервную область для размещения управляющей информации. Все более широкое распространение получает NAND-память, содержащая несколько уровней, адресуемых независимо и программируемых или стираемых параллельно.
Для технологии NAND-памяти характерны быстрые и значительные изменения. Первоначально флеш-память строилась на основе одноуровневых ячеек (single level cell – SLC), затем появились устройства на основе многоуровневых ячеек: MLC (multi level cell) и TLC (triple level cell). Сегодня наблюдается переход к 3D NAND – многослойной флеш-памяти с вертикальной компоновкой ячеек на кристалле. Примерно 15 лет назад NAND-устройства могли хранить до 32 Мбайт данных, сегодня – 128 Гбайт и более. (Закон Мура не поспевает за развитием NAND флеш-памяти!) Эти тенденции привели к повышению плотности элементов памяти и снижению стоимости в расчете на бит, однако изменили физическую природу флеш-памяти.
Раньше SLC-память могла выдерживать до 100 тыс. циклов стирания / записи при 1-битном коде исправления ошибок. Современные устройства NAND-памяти требуют использования 40-битного кода исправления ошибок на 528 бит, чтобы гарантировать всего 3 тыс. циклов стирания / записи. Возникла необходимость в решении и других технических проблем, в частности таких как случайная запись в парные страницы в MLC-памяти (page-pairing) и ошибки, мешающие чтению данных (read disturb). Вследствие этого для достижения требований по надежности следует совершенствовать программное обеспечение для управления NAND-памятью. Если в проекте требуется NAND-память с более чем 1-битным ECC, необходим микроконтроллер с поддержкой вычисления кода исправления ошибок, соответствующего используемой NAND-памяти.
Разновидностью флеш-памяти для встраиваемых систем является последовательная NAND-память, которая не отличается столь огромной информационной емкостью, как обычная NAND-память, но обладает двумя преимуществами: более простым интерфейсом SPI и (в большинстве случаев) встроенной функцией вычисления кода исправления ошибок. Поэтому можно обеспечить ее интеграцию с более широкой номенклатурой микроконтроллеров.
ВОПРОСЫ ПРИМЕНЕНИЯ NAND-ПАМЯТИ
Применение NAND-памяти во встраиваемых системах связано с необходимостью решения ряда проблем, мешающих достижению высокой надежности системы.
Выравнивание износа (wear leveling). Ячейки флеш-памяти имеют ограниченный срок службы и могут быть запрограммированы определенное число раз до тех пор, пока становятся ненадежными – фактически изнашиваются. Для повышения долговечности чипа используются специальные алгоритмы выравнивания износа – перемещение данных между физическими блоками, чтобы одни ячейки не использовались слишком интенсивно по сравнению с другими. Эти алгоритмы могут быть настроены точно в соответствии с требованиями к производительности системы.
Код исправления ошибок (ECC). Наивысшая скорость, с которой изнашиваются ячейки, определяется производителем флеш-памяти. Для того чтобы гарантировать корректность данных в соответствии с требованиями спецификации, используют коды исправления ошибок. Разрядность (число бит) применяемого для данного типа памяти кода исправления ошибок определяется интенсивностью битовых отказов для наихудшего случая.
Управление сбойными блоками (bad blocks). Устройства флеш-памяти содержат блоки, которые могут быть подвержены ошибкам или непригодны для использования. В процессе эксплуатации данные в годных блоках могут быть в дальнейшем повреждены из-за утечки заряда или при воздействии циклов записи в соседних областях кристалла. Для управления сбойными блоками и перераспределения неиспользуемых участков чипа применяется специальное ПО, которое гарантирует, что данные не искажены.
Ошибки, мешающие чтению данных (read disturb). Эти ошибки случаются, когда операция чтения на одной странице вызывает изменение одного или более бита на другой странице того же блока памяти. Выполнение множества операций чтения на страницах в пределах одного блока без промежуточного стирания этого блока повышает риск возникновения битовых ошибок.
Хотя NAND-память – ведущая технология для хранения больших массивов информации, при ее использовании нужно учитывать ряд особенностей. Характеристики отказоустойчивости каждого NAND-устройства, в том числе количество и признаки сбойных блоков, а также требования к коду исправления ошибок, различаются. Это означает, что требования к ECC-коду должны соответствовать интерфейсу контроллера NAND-памяти микроконтроллера. Для NAND-памяти также требуются специальные сервисы, в частности, выравнивание износа и управление сбойными блоками (рис.2).
УРОВЕНЬ ТРАНСЛЯЦИИ ФЛЕШ-ПАМЯТИ ДЛЯ NAND-УСТРОЙСТВ
В большинстве приложений из-за необходимости перераспределения сбойных блоков NAND-память нельзя рассматривать как линейный массив памяти. А в тех приложениях, где флеш-память стирается и перезаписывается множество раз, необходимо реализовать систему выравнивания износа для повышения срока службы устройства. Обе проблемы требуют логической трансляции физических блоков.
Эта задача решается путем использования программного уровня трансляции флеш-памяти (Flash Translation Layer – FTL). С точки зрения приложения FTL представляет собой массив логических секторов, которые маскируют исходный уровень сложности физического устройства, позволяя файловой системе использовать его подобно другим драйверам носителей.
Уровень трансляции флеш-памяти должен обеспечивать выравнивание износа. Известны два распространенных метода выравнивания износа – статический и динамический. При динамическом – система выбирает последний используемый блок для следующей операции записи. Этот метод менее эффективен, поскольку не учитываются блоки данных, содержимое которых остается неизменным.
При статическом выравнивании износа недоиспользованные блоки переставляются по всей памяти. Статическое выравнивание износа требует тщательной настройки, чтобы перестановка блоков чрезмерно не влияла на износ устройства. Это обычно достигается путем установки порогов, определяющих предельный уровень перестановки блоков. В таблице сравниваются статический и динамический методы выравнивания износа.
NOR-ПАМЯТЬ
NOR-память, предшественница NAND-памяти, нашла применение в ряде приложений, занимает существенную долю рынка встраиваемых устройств вследствие относительной простоты и надежности. Этот тип флеш-памяти не требует применения кодов исправления ошибок, чтобы обеспечить 100 тыс. циклов стирания / записи, не содержит сбойных блоков, возникающих при производстве изделия, и, кроме того, отличается более простой архитектурой. Плата за повышенную надежность – намного более длительное время стирания и записи. Однако с точки зрения обеспечения надежности ее применение (как и всех типов флеш-памяти) сопряжено с рядом проблем, что требует детального понимания технологии.
Предлагается NOR-память двух основных типов: параллельная, в которой адресная шина и шина данных непосредственно подключаются к микроконтроллеру, и последовательная, которая использует для коммуникаций только SPI-интерфейс (или подобный ему). Емкость последовательной NOR-памяти составляет, как правило, от 1 до 128 Мбайт. Емкость параллельной NOR-памяти может быть намного больше.
Если используемая в приложении NOR-память предназначена для интенсивной работы, требуется реализация уровня управления (часто FTL-уровня), чтобы обеспечить выравнивание износа. Уровень управления служит также для обработки любых сбойных блоков. NOR-память может быть намного более дорогостоящей по сравнению с альтернативными типами памяти. Хотя она и не требует применения кодов исправления ошибок, но чтобы использовать ее эффективно, необходимо обеспечить физическое отображение памяти для выравнивания износа.
eMMC-ПАМЯТЬ
Благодаря своим характеристикам eMMC-память позволяет решить многие из упомянутых выше проблем. Например, простой интерфейс eMMC-памяти, работающий в блоковом режиме, маскирует для пользователя сложную структуру флеш-памяти, в то же время уровень обслуживания задается производителем на блоковом уровне. Различные режимы записи позволяют пользователю оптимизировать производительность в зависимости от уровня критичности записываемых данных. Как правило, мета-данные файловой системы критичны, а файловые данные в меньшей степени, что также зависит от приложения и уровня отказоустойчивости файловой системы.
Кроме того, двунаправленный обмен параметрами позволяет eMMC-памяти оптимизировать работу в зависимости от свойств хост-системы. Применение eMMC-памяти дает возможность понизить остроту проблем вибрации и внепланового извлечения, характерных для съемной памяти, поскольку она поставляется в виде твердотельного чипа, установленного на целевую плату.
Устройства eMMC-памяти могут рассматриваться как базовые функциональные блоки для высоконадежных или детерминированных систем хранения, обладающие явными преимуществами по сравнению с другими подобными технологиями. Однако концепция любой детерминированной или высоконадежной системы требует рассматривать проект в целом и проверять обоснованность применения каждого компонента как индивидуально, так и на уровне системы.
ПРОБЛЕМЫ ФАЙЛОВОЙ СИСТЕМЫ ПРИ ИСПОЛЬЗОВАНИИ ФЛЕШ-ПАМЯТИ
Серьезной проблемой для встраиваемой системы может стать повреждение файловой системы или ее содержимого. Для того чтобы обеспечить тестирование и верификацию на стадии проектирования и реализации системы, разработчик должен обратить внимание на фундаментальные вопросы системного уровня, а именно: как обрабатывать операции над файлами и структурами каталогов, как обеспечить целостность данных во время сбоев питания или непредвиденного сброса системы, как верифицировать корректную работу флеш-памяти.
Обычно обработку операций над файлами и каталогами поручают встраиваемой файловой системе. Приложение выигрывает от использования файловой системы – абстрактной структуры хранилища массивов данных. Однако сама по себе файловая система не может гарантировать целостность данных и файловой системы как таковой. Какой бы метод обеспечения отказоустойчивости ни использовался, система остается зависимой от носителя данных и должна определять требуемый уровень сервиса от этого носителя.
Система, спроектированная с учетом обеспечения надежности, должна иметь ясное представление о критичных исключениях, таких как непредвиденный сброс или сбой питания, а также о том, как каждая часть системы будет обеспечивать требования используемых компонентов. Применение файловой системы, просто заявляющей о своей безотказности или о возможности регистрации событий, не гарантирует надежной работы без специального определения этих условий.
СБОИ ПИТАНИЯ, НЕПРЕДВИДЕННЫЙ СБРОС И ОТКАЗ СИСТЕМЫ
Во встраиваемых приложениях, когда данные (или мета-данные), обрабатываемые файловой системой, повреждаются, результат может быть катастрофичным. Например, файловую систему, которая хранится в NAND-памяти, нужно переформатировать, что будет означать потерю всех данных. По этой причине рекомендуется использовать систему, защищенную от отказов.
Подлинно отказоустойчивая файловая система будет гарантировать, что все мета-данные, которыми она управляет во флеш-памяти, всегда будут корректными и что любая операция записи во флеш-память, выполняемая приложением (обычно файловой системой), будет завершена атомарно. Атомарность операции записи означает, что операция будет завершена либо диск останется в том же состоянии, как и до инициализации записи. Следовательно, файловая система может гарантировать целостность передаваемых ей данных.
Чтобы обеспечить надежность файловой системы, каждый уровень системы – от уровня приложения до физического драйвера – должен определить, что требуется от смежного уровня. Это единственный способ обеспечения настоящей отказоустойчивости. Например, базовая файловая система FAT могла бы потребовать, чтобы множественные операции записи в различные области носителя были завершены атомарно. Но это логически невозможно гарантировать в системе, где может произойти непредвиденный сброс. Чтобы создать надежное приложение, отказоустойчивую файловую систему нужно использовать совместно с другой надежной файловой системой.
Можно отметить следующие требования к системе, защищенной от отказов (рис.3):
• после системного сброса файловая система останется в согласованном (совместимом) состоянии;
• файл, открытый для записи в момент непредвиденного сброса, вернется в исходное состояние, если только не была успешно завершена любая операция сброса (reset) или закрытия (close) этого файла. Таким образом, разработчик приложения полностью контролирует момент установки нового состояния файла независимо от иных действий файловой системы;
• отказоустойчивость любой файловой системы может быть гарантирована только тогда, когда низкоуровневый драйвер обеспечивает определенное качество обслуживания (quality of service – QoS).
Для файловой системы это определяется следующим образом:
• любая операция записи должна быть завершена успешно или возвращена с ошибкой. В противном случае файловая система должна быть перезапущена;
• все операции записи на носитель должны выполняться в такой последовательности, в которой они обеспечиваются драйвером;
• операция стирания должна быть завершена успешно или возвращена с ошибкой. В противном случае файловая система должна быть перезапущена.
На практике это означает, что аппаратные средства должны обеспечить определенный уровень защиты от снижения напряжения питания. Это будет гарантировать способность системы предпринять соответствующие действия, если напряжение, подаваемое на флеш-носитель, снизится относительно уровня, установленного спецификацией на устройство.
Примером отказоустойчивых систем могут служить продукты компании HCC Embedded (рис.4), которая предлагает файловые системы для всех типов флеш-памяти, в частности SafeFlash – высокоэффективную файловую систему для продуктов, критичным требованием которых является целостность данных, и TINY – полнофункциональную файловую систему для приложений с ограниченными ресурсами. Разработчик может выбрать оптимальную для его задачи файловую систему.
ПРОИЗВОДИТЕЛЬНОСТЬ
И ЭФФЕКТИВНОСТЬ СИСТЕМЫ
Чтобы достичь высокой производительности, используя сложные типы флеш-носителей, такие как многоуровневая NAND-память или массив NAND-чипов, необходимо соблюдение условия: FTL-уровень обеспечивает считывание, запись и стирание данных на нескольких устройствах параллельно. Теоретически это можно было бы обеспечить просто на уровне драйверов. Однако это привело бы к неэффективному использованию флеш-памяти и, кроме того, едва ли обеспечило бы настоящую отказоустойчивость. Лучше решить эту проблему на FTL-уровне, что может быть реализовано с помощью серийно выпускаемых продуктов.
При оценке производительности системы обычно замеряют отклик системы на операции непрерывного чтения, то есть чтения нефрагментированных данных (contiguous-read), непрерывной записи (contiguous-write), произвольного чтения (random-read) и произвольной записи (random-write). В общем случае достичь высокой производительности при непрерывном и произвольном чтении относительно просто. Непрерывную запись и, что более важно, произвольную запись гораздо труднее выполнить эффективно. Это характерно для всех типов флеш-памяти. Однако путем реализации усовершенствованных алгоритмов и более точной настройки системы можно существенно повысить производительность.
ВОПРОСЫ УПРАВЛЕНИЯ ПИТАНИЕМ
Разработчики должны применять эффективные методы управления питанием, чтобы случайно не стереть или не записать информацию во флеш-память, когда уровни питания выходят за пределы, установленные спецификацией производителя. Кроме того, могут возникнуть проблемы сохранения целостности блоков и данных. Правильно спроектированный FTL-уровень определяет требования к низкоуровневому драйверу, в частности к питанию, чтобы гарантировать отказоустойчивую работу. Разработчикам следует запрашивать нужные спецификации у поставщика программных средств. Когда напряжение питания падает до определенного уровня, подсистема детектирования сбоев должна оповестить об этом систему, чтобы устранить аварийную ситуацию. ●
ТИПЫ ФЛЕШ-ПАМЯТИ ДЛЯ ВСТРАИВАЕМЫХ ПРИЛОЖЕНИЙ[1]
Устройства флеш-памяти могут быть как съемными, так и постоянно интегрированными в систему. К сменным носителям относятся флеш-накопители USB, SD / SDHC / XDHX / MMC-карты и другие устройства. Несъемные носители – это микросхемы флеш-памяти типа NAND и NOR, а также чипы стандарта eMMC (embedded Multi Media Card), в которые кроме флеш-памяти интегрирован контроллер (рис.1).
Практически все съемные носители содержат одну и более микросхем флеш-памяти типа NAND и управляющий контроллер, который выполнен в виде заказной ИС или ПЛИС и обеспечивает уровень трансляции флеш-памяти (Flash Translation Layer – FTL). Ключевые особенности таких носителей – большая емкость памяти, интегрированный FTL-уровень, высокая скорость и доступность.
Однако с точки зрения применения сменных носителей во встраиваемых системах инженеры должны учитывать потенциальные риски. Большая часть этих носителей не способна надежно обрабатывать данные и, как правило, не рассчитана на использование во встраиваемых системах. SD-карты с маркировкой Industrial, то есть предназначенные для промышленного применения, отличаются от обычных устройств, как правило, только расширенным температурным диапазоном. Сменные носители хорошо подходят для потребительских товаров, но применение их в промышленных приложениях, таких как, например, регистраторы данных, проблематично. В большинстве случаев применение съемных носителей может быть сопряжено с риском появления ошибок в данных, они не могут обеспечить надежный контакт и не устойчивы к вибрации.
Сменные носители могут быть считаны только совместимой хост-системой, что зачастую вынуждает выбирать в качестве файловой системы FAT, известную своими ограничениями. Большинство носителей данного типа не могут обеспечить высокий уровень отказоустойчивости или возможность установки точек фиксации данных (commit points) для контроля состояния карты. И это реальная проблема – невозможно добиться безотказной работы, сохраняется риск нарушения целостности данных и файловой системы. Большая часть SD-карт оптимизирована для высокоскоростных операций в ущерб корректному поведению в случае непредвиденного сброса системы. Кроме того, в них не предусмотрена возможность установки различий между критичными и некритичными операциями.
Более высокий уровень надежности обеспечивают несъемные носители флеш-памяти, среди которых широко используются NAND-, NOR- и eMMC-память. Однако по сравнению с NOR-памятью применение NAND-памяти связано с необходимостью решения сложных задач на системном уровне. Рассмотрим особенности этих трех типов памяти и проблемы их использования во встраиваемых системах.
NAND-ПАМЯТЬ
NAND-память характеризуется низкой стоимостью хранения бита данных, а также высокой скоростью стирания и записи. Для упрощения схемного решения в NAND-памяти адресная шина мультиплексирована с шиной данных. Сегодня NAND-память – основная технология хранения данных, используемая в широком спектре устройств – от твердотельных дисков (SSD) до SD-карт и чипов eMMC. NAND-память выбирают, когда необходимо обеспечить высокую информационную емкость и производительность.
NAND-память организована в виде набора блоков, разделенных на физические страницы. Каждая страница содержит область данных и резервную область для размещения управляющей информации. Все более широкое распространение получает NAND-память, содержащая несколько уровней, адресуемых независимо и программируемых или стираемых параллельно.
Для технологии NAND-памяти характерны быстрые и значительные изменения. Первоначально флеш-память строилась на основе одноуровневых ячеек (single level cell – SLC), затем появились устройства на основе многоуровневых ячеек: MLC (multi level cell) и TLC (triple level cell). Сегодня наблюдается переход к 3D NAND – многослойной флеш-памяти с вертикальной компоновкой ячеек на кристалле. Примерно 15 лет назад NAND-устройства могли хранить до 32 Мбайт данных, сегодня – 128 Гбайт и более. (Закон Мура не поспевает за развитием NAND флеш-памяти!) Эти тенденции привели к повышению плотности элементов памяти и снижению стоимости в расчете на бит, однако изменили физическую природу флеш-памяти.
Раньше SLC-память могла выдерживать до 100 тыс. циклов стирания / записи при 1-битном коде исправления ошибок. Современные устройства NAND-памяти требуют использования 40-битного кода исправления ошибок на 528 бит, чтобы гарантировать всего 3 тыс. циклов стирания / записи. Возникла необходимость в решении и других технических проблем, в частности таких как случайная запись в парные страницы в MLC-памяти (page-pairing) и ошибки, мешающие чтению данных (read disturb). Вследствие этого для достижения требований по надежности следует совершенствовать программное обеспечение для управления NAND-памятью. Если в проекте требуется NAND-память с более чем 1-битным ECC, необходим микроконтроллер с поддержкой вычисления кода исправления ошибок, соответствующего используемой NAND-памяти.
Разновидностью флеш-памяти для встраиваемых систем является последовательная NAND-память, которая не отличается столь огромной информационной емкостью, как обычная NAND-память, но обладает двумя преимуществами: более простым интерфейсом SPI и (в большинстве случаев) встроенной функцией вычисления кода исправления ошибок. Поэтому можно обеспечить ее интеграцию с более широкой номенклатурой микроконтроллеров.
ВОПРОСЫ ПРИМЕНЕНИЯ NAND-ПАМЯТИ
Применение NAND-памяти во встраиваемых системах связано с необходимостью решения ряда проблем, мешающих достижению высокой надежности системы.
Выравнивание износа (wear leveling). Ячейки флеш-памяти имеют ограниченный срок службы и могут быть запрограммированы определенное число раз до тех пор, пока становятся ненадежными – фактически изнашиваются. Для повышения долговечности чипа используются специальные алгоритмы выравнивания износа – перемещение данных между физическими блоками, чтобы одни ячейки не использовались слишком интенсивно по сравнению с другими. Эти алгоритмы могут быть настроены точно в соответствии с требованиями к производительности системы.
Код исправления ошибок (ECC). Наивысшая скорость, с которой изнашиваются ячейки, определяется производителем флеш-памяти. Для того чтобы гарантировать корректность данных в соответствии с требованиями спецификации, используют коды исправления ошибок. Разрядность (число бит) применяемого для данного типа памяти кода исправления ошибок определяется интенсивностью битовых отказов для наихудшего случая.
Управление сбойными блоками (bad blocks). Устройства флеш-памяти содержат блоки, которые могут быть подвержены ошибкам или непригодны для использования. В процессе эксплуатации данные в годных блоках могут быть в дальнейшем повреждены из-за утечки заряда или при воздействии циклов записи в соседних областях кристалла. Для управления сбойными блоками и перераспределения неиспользуемых участков чипа применяется специальное ПО, которое гарантирует, что данные не искажены.
Ошибки, мешающие чтению данных (read disturb). Эти ошибки случаются, когда операция чтения на одной странице вызывает изменение одного или более бита на другой странице того же блока памяти. Выполнение множества операций чтения на страницах в пределах одного блока без промежуточного стирания этого блока повышает риск возникновения битовых ошибок.
Хотя NAND-память – ведущая технология для хранения больших массивов информации, при ее использовании нужно учитывать ряд особенностей. Характеристики отказоустойчивости каждого NAND-устройства, в том числе количество и признаки сбойных блоков, а также требования к коду исправления ошибок, различаются. Это означает, что требования к ECC-коду должны соответствовать интерфейсу контроллера NAND-памяти микроконтроллера. Для NAND-памяти также требуются специальные сервисы, в частности, выравнивание износа и управление сбойными блоками (рис.2).
УРОВЕНЬ ТРАНСЛЯЦИИ ФЛЕШ-ПАМЯТИ ДЛЯ NAND-УСТРОЙСТВ
В большинстве приложений из-за необходимости перераспределения сбойных блоков NAND-память нельзя рассматривать как линейный массив памяти. А в тех приложениях, где флеш-память стирается и перезаписывается множество раз, необходимо реализовать систему выравнивания износа для повышения срока службы устройства. Обе проблемы требуют логической трансляции физических блоков.
Эта задача решается путем использования программного уровня трансляции флеш-памяти (Flash Translation Layer – FTL). С точки зрения приложения FTL представляет собой массив логических секторов, которые маскируют исходный уровень сложности физического устройства, позволяя файловой системе использовать его подобно другим драйверам носителей.
Уровень трансляции флеш-памяти должен обеспечивать выравнивание износа. Известны два распространенных метода выравнивания износа – статический и динамический. При динамическом – система выбирает последний используемый блок для следующей операции записи. Этот метод менее эффективен, поскольку не учитываются блоки данных, содержимое которых остается неизменным.
При статическом выравнивании износа недоиспользованные блоки переставляются по всей памяти. Статическое выравнивание износа требует тщательной настройки, чтобы перестановка блоков чрезмерно не влияла на износ устройства. Это обычно достигается путем установки порогов, определяющих предельный уровень перестановки блоков. В таблице сравниваются статический и динамический методы выравнивания износа.
NOR-ПАМЯТЬ
NOR-память, предшественница NAND-памяти, нашла применение в ряде приложений, занимает существенную долю рынка встраиваемых устройств вследствие относительной простоты и надежности. Этот тип флеш-памяти не требует применения кодов исправления ошибок, чтобы обеспечить 100 тыс. циклов стирания / записи, не содержит сбойных блоков, возникающих при производстве изделия, и, кроме того, отличается более простой архитектурой. Плата за повышенную надежность – намного более длительное время стирания и записи. Однако с точки зрения обеспечения надежности ее применение (как и всех типов флеш-памяти) сопряжено с рядом проблем, что требует детального понимания технологии.
Предлагается NOR-память двух основных типов: параллельная, в которой адресная шина и шина данных непосредственно подключаются к микроконтроллеру, и последовательная, которая использует для коммуникаций только SPI-интерфейс (или подобный ему). Емкость последовательной NOR-памяти составляет, как правило, от 1 до 128 Мбайт. Емкость параллельной NOR-памяти может быть намного больше.
Если используемая в приложении NOR-память предназначена для интенсивной работы, требуется реализация уровня управления (часто FTL-уровня), чтобы обеспечить выравнивание износа. Уровень управления служит также для обработки любых сбойных блоков. NOR-память может быть намного более дорогостоящей по сравнению с альтернативными типами памяти. Хотя она и не требует применения кодов исправления ошибок, но чтобы использовать ее эффективно, необходимо обеспечить физическое отображение памяти для выравнивания износа.
eMMC-ПАМЯТЬ
Благодаря своим характеристикам eMMC-память позволяет решить многие из упомянутых выше проблем. Например, простой интерфейс eMMC-памяти, работающий в блоковом режиме, маскирует для пользователя сложную структуру флеш-памяти, в то же время уровень обслуживания задается производителем на блоковом уровне. Различные режимы записи позволяют пользователю оптимизировать производительность в зависимости от уровня критичности записываемых данных. Как правило, мета-данные файловой системы критичны, а файловые данные в меньшей степени, что также зависит от приложения и уровня отказоустойчивости файловой системы.
Кроме того, двунаправленный обмен параметрами позволяет eMMC-памяти оптимизировать работу в зависимости от свойств хост-системы. Применение eMMC-памяти дает возможность понизить остроту проблем вибрации и внепланового извлечения, характерных для съемной памяти, поскольку она поставляется в виде твердотельного чипа, установленного на целевую плату.
Устройства eMMC-памяти могут рассматриваться как базовые функциональные блоки для высоконадежных или детерминированных систем хранения, обладающие явными преимуществами по сравнению с другими подобными технологиями. Однако концепция любой детерминированной или высоконадежной системы требует рассматривать проект в целом и проверять обоснованность применения каждого компонента как индивидуально, так и на уровне системы.
ПРОБЛЕМЫ ФАЙЛОВОЙ СИСТЕМЫ ПРИ ИСПОЛЬЗОВАНИИ ФЛЕШ-ПАМЯТИ
Серьезной проблемой для встраиваемой системы может стать повреждение файловой системы или ее содержимого. Для того чтобы обеспечить тестирование и верификацию на стадии проектирования и реализации системы, разработчик должен обратить внимание на фундаментальные вопросы системного уровня, а именно: как обрабатывать операции над файлами и структурами каталогов, как обеспечить целостность данных во время сбоев питания или непредвиденного сброса системы, как верифицировать корректную работу флеш-памяти.
Обычно обработку операций над файлами и каталогами поручают встраиваемой файловой системе. Приложение выигрывает от использования файловой системы – абстрактной структуры хранилища массивов данных. Однако сама по себе файловая система не может гарантировать целостность данных и файловой системы как таковой. Какой бы метод обеспечения отказоустойчивости ни использовался, система остается зависимой от носителя данных и должна определять требуемый уровень сервиса от этого носителя.
Система, спроектированная с учетом обеспечения надежности, должна иметь ясное представление о критичных исключениях, таких как непредвиденный сброс или сбой питания, а также о том, как каждая часть системы будет обеспечивать требования используемых компонентов. Применение файловой системы, просто заявляющей о своей безотказности или о возможности регистрации событий, не гарантирует надежной работы без специального определения этих условий.
СБОИ ПИТАНИЯ, НЕПРЕДВИДЕННЫЙ СБРОС И ОТКАЗ СИСТЕМЫ
Во встраиваемых приложениях, когда данные (или мета-данные), обрабатываемые файловой системой, повреждаются, результат может быть катастрофичным. Например, файловую систему, которая хранится в NAND-памяти, нужно переформатировать, что будет означать потерю всех данных. По этой причине рекомендуется использовать систему, защищенную от отказов.
Подлинно отказоустойчивая файловая система будет гарантировать, что все мета-данные, которыми она управляет во флеш-памяти, всегда будут корректными и что любая операция записи во флеш-память, выполняемая приложением (обычно файловой системой), будет завершена атомарно. Атомарность операции записи означает, что операция будет завершена либо диск останется в том же состоянии, как и до инициализации записи. Следовательно, файловая система может гарантировать целостность передаваемых ей данных.
Чтобы обеспечить надежность файловой системы, каждый уровень системы – от уровня приложения до физического драйвера – должен определить, что требуется от смежного уровня. Это единственный способ обеспечения настоящей отказоустойчивости. Например, базовая файловая система FAT могла бы потребовать, чтобы множественные операции записи в различные области носителя были завершены атомарно. Но это логически невозможно гарантировать в системе, где может произойти непредвиденный сброс. Чтобы создать надежное приложение, отказоустойчивую файловую систему нужно использовать совместно с другой надежной файловой системой.
Можно отметить следующие требования к системе, защищенной от отказов (рис.3):
• после системного сброса файловая система останется в согласованном (совместимом) состоянии;
• файл, открытый для записи в момент непредвиденного сброса, вернется в исходное состояние, если только не была успешно завершена любая операция сброса (reset) или закрытия (close) этого файла. Таким образом, разработчик приложения полностью контролирует момент установки нового состояния файла независимо от иных действий файловой системы;
• отказоустойчивость любой файловой системы может быть гарантирована только тогда, когда низкоуровневый драйвер обеспечивает определенное качество обслуживания (quality of service – QoS).
Для файловой системы это определяется следующим образом:
• любая операция записи должна быть завершена успешно или возвращена с ошибкой. В противном случае файловая система должна быть перезапущена;
• все операции записи на носитель должны выполняться в такой последовательности, в которой они обеспечиваются драйвером;
• операция стирания должна быть завершена успешно или возвращена с ошибкой. В противном случае файловая система должна быть перезапущена.
На практике это означает, что аппаратные средства должны обеспечить определенный уровень защиты от снижения напряжения питания. Это будет гарантировать способность системы предпринять соответствующие действия, если напряжение, подаваемое на флеш-носитель, снизится относительно уровня, установленного спецификацией на устройство.
Примером отказоустойчивых систем могут служить продукты компании HCC Embedded (рис.4), которая предлагает файловые системы для всех типов флеш-памяти, в частности SafeFlash – высокоэффективную файловую систему для продуктов, критичным требованием которых является целостность данных, и TINY – полнофункциональную файловую систему для приложений с ограниченными ресурсами. Разработчик может выбрать оптимальную для его задачи файловую систему.
ПРОИЗВОДИТЕЛЬНОСТЬ
И ЭФФЕКТИВНОСТЬ СИСТЕМЫ
Чтобы достичь высокой производительности, используя сложные типы флеш-носителей, такие как многоуровневая NAND-память или массив NAND-чипов, необходимо соблюдение условия: FTL-уровень обеспечивает считывание, запись и стирание данных на нескольких устройствах параллельно. Теоретически это можно было бы обеспечить просто на уровне драйверов. Однако это привело бы к неэффективному использованию флеш-памяти и, кроме того, едва ли обеспечило бы настоящую отказоустойчивость. Лучше решить эту проблему на FTL-уровне, что может быть реализовано с помощью серийно выпускаемых продуктов.
При оценке производительности системы обычно замеряют отклик системы на операции непрерывного чтения, то есть чтения нефрагментированных данных (contiguous-read), непрерывной записи (contiguous-write), произвольного чтения (random-read) и произвольной записи (random-write). В общем случае достичь высокой производительности при непрерывном и произвольном чтении относительно просто. Непрерывную запись и, что более важно, произвольную запись гораздо труднее выполнить эффективно. Это характерно для всех типов флеш-памяти. Однако путем реализации усовершенствованных алгоритмов и более точной настройки системы можно существенно повысить производительность.
ВОПРОСЫ УПРАВЛЕНИЯ ПИТАНИЕМ
Разработчики должны применять эффективные методы управления питанием, чтобы случайно не стереть или не записать информацию во флеш-память, когда уровни питания выходят за пределы, установленные спецификацией производителя. Кроме того, могут возникнуть проблемы сохранения целостности блоков и данных. Правильно спроектированный FTL-уровень определяет требования к низкоуровневому драйверу, в частности к питанию, чтобы гарантировать отказоустойчивую работу. Разработчикам следует запрашивать нужные спецификации у поставщика программных средств. Когда напряжение питания падает до определенного уровня, подсистема детектирования сбоев должна оповестить об этом систему, чтобы устранить аварийную ситуацию. ●
Отзывы читателей