Mtd устройства что это: 4.2 MTD — Технологическое Устройство Памяти

4.2 MTD — Технологическое Устройство Памяти

Глава 4, Хранение данных во встраиваемых системах

60

Как бы вы хотели получать доступ к разделам, как к необработанным данным, или вы хотели бы использовать файловую систему? Простые разделы могут быть полезны для загрузчика, потому что не будет необходимости в файловой системе; вы можете выделить сектор флеш-памяти для хранения данных конфигурации загрузки, а остальные секторы для хранения кода загрузчика. Тем не менее, для разделов, содержащих данные Linux, безопаснее идти через файловые системы. Выбор файловой системы для данных также играет важную роль в создании карты флеш-памяти.

Как бы вы хотели делать обновления? Обновления на встроенной системе может быть выполнено на работающей системе или через загрузчик. В случае, если обновления предполагают изменение только данных для чтения (как это обычно бывает), то лучше разделить флеш-память на разделы только для чтения и только для записи, так что вам не придётся делать резервного копирования и восстановления для читаемых/ записываемых данных.

Рисунок 4.1 показывает карту флеш-памяти для 4 Мб флеш-памяти, содержащей загрузчик, образ ОС и приложения. Как видно, только читаемые данные хранятся в файловой системе CRAMFS, которая является файловой системы только для чтения, а читаемые и записываемые данные хранятся в файловой системе JFFS2, которая является файловой системой для чтения и записи.

Рисунок 4.1 Карта памяти для 4-х Мб флеш-памяти.

MTD означает Memory Technology Device, Технологическое Устройство Памяти, и является подсистемой, используемой для управления устройствами хранения данных, находящихся на плате. Является ли MTD отдельным классом набора драйверов, как символьные или блочные? Простой ответ: нет. Тогда в чём заключается работа MTD и когда и как устройства флеш-памяти включаются в подсистему MTD? Как на MTD устройство будут помещаться файловые системы? На эти вопросы отвечают следующие подразделы.

61Разработка и внедрение системы на встраиваемом Linux

4.2.1Модель MTD

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

Обычно жёсткие диски имеют сектор, который делится по размерам страницы (обычно 4096 байт). Стандартным значением является 512 байт. Модель файловой системы Linux, особенно буфер кэша (кэш памяти между файловой системой и уровнем блочного устройства), основана на этом предположении. Микросхемы флеш-памяти, с другой стороны, имеют большие размеры сектора; стандартный размер составляет 64 Кб.

Секторы флеш-памяти обычно перед записью в них должны быть стёрты; операции записи и стирания могут быть независимыми, что зависит от программного обеспечения, использующего флэш-память.

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

Обычные файловые системы не могут быть использованы поверх флеш-памяти, потому что это проходит через буферный кэш. Обычный дисковый ввод-вывод медленный; чтобы ускорить его, используется кэш в памяти, называемой кэш-буфером, который хранит данные для ввода-вывода на диск. Пока эти данные не записаны обратно на диск, файловая система находится в неустойчивом состоянии. (Это и является причиной, почему вы должны выключать ОС на ПК перед выключением его питания.) Тем не менее, встроенные системы могут быть выключены без надлежащего завершения работы и всё же иметь непротиворечивые данные; так что обычные файловые системы и модель блочного устройства не очень подходят для встраиваемых систем.

Традиционным методом, используемым для доступа к флеш-памяти, является FTL, то есть Flash Translation Layer, Уровень Трансляции Флеш-памяти. Этот уровень эмулирует на флеш-памяти поведение блочного устройства, чтобы обеспечить на них работу обычных файловых систем. Однако, создание новой файловой системы или нового драйвера флешпамяти, работающего с FTL, является сложной задачей и это является причиной изобретения подсистемы MTD. (Владельцем подсистемы MTD является Дэвид Вудхаус, а разработки, связанные с MTD, можно получить на веб-сайте http://www.linuxmtd.infradead.org/. Подсистема MTD была создана как часть основного ядра версии 2.4.) Решение MTD вышеуказанных проблем простое: рассматривать устройства памяти как устройства памяти, а не как диски. Поэтому вместо изменения низкоуровневых драйверов или введения уровня трансляции, измените приложение, чтобы использовать устройства памяти такими, как они есть. MTD очень привязано к приложениям; подсистема MTD состоит из двух частей: драйверы и приложения.

Подсистема MTD не реализует новый вид драйвера, но скорее она связывает любое устройство с драйверами символьных и блочных устройств. Когда драйвер зарегистрирован в подсистеме MTD, она экспортирует такое устройство в оба этих вида драйверов. Почему это делается именно так? Символьное устройство может позволить непосредственный доступ к устройству памяти с использованием стандартных вызовов open/read/write/ ioctl. Но в случае, если вы захотите смонтировать обычную файловую систему на такое устройство памяти с помощью традиционного метода, вы сможете также смонтировать её используя блочный драйвер.

Глава 4, Хранение данных во встраиваемых системах

62

Мы разберёмся с каждым уровнем на Рисунке 4.1, но перед этим давайте разберёмся с двумя устройствами, которые в настоящее время поддерживаются MTD: микросхемы флешпамяти и флеш-диски.

4.2.2 Микросхемы флеш-памяти

Рассмотрим различные микросхемы флеш-памяти, поддерживаемые подсистемой MTD. Устройства флеш-памяти поставляются в двух вариантах: NAND и NOR флеш-память. Хотя оба варианта созданы примерно в одно время (NOR была представлена Intel, а NAND — Toshiba в конце 1980 года), NOR быстрее вошла в мир встраиваемых устройств, поскольку она проще в использовании. Однако, когда встраиваемые системы эволюционировали к необходимости иметь больше места для хранения (например, медиаплееры и цифровые камеры), для приложений хранения данных стала популярной NAND Flash.

Уровень MTD также первоначально развивался вокруг NOR Flash, а поддержка NAND была добавлена позднее. Таблица 4.1 сравнивает два этих типа флеш-памяти.

Таблица 4.1 Сравнение NOR и NAND Flash

 

NOR

NAND

 

 

 

Доступ к данным

К данным можно обращаться в

В микросхемах NAND флеш

 

случайном порядке, так же как к

пространство разделено на

 

SRAM. Операциями с флеш-

блоки, которые также

 

памятью могут быть:

разделены на страницы. Каждая

 

Процедура чтения: чтение

страница разделена на

 

содержимого флеш-памяти.

обычные данные и

 

Процедура стирания: стирание

дополнительные (out-of-band)

 

— это процесс установки всех

данные. Дополнительные

 

битов флеш-памяти в 1.

данные используются для того,

 

Стирание в микросхемах NOR

чтобы хранить метаданные,

 

происходит в терминах блоков

такие как ECC (Error-Correction

 

(называемых областями

Code, Код для коррекции

 

стирания).

ошибок) данные и информацию

 

Процедура записи: запись — это

о неисправном блоке. NAND

 

процесс изменения во флеш-

флеш, как и NOR флеш, имеет

 

памяти 1 в 0. После того, как бит

три основные операции:

 

стал 0, он не может быть

чтение, стирание и запись.

 

записан, пока блок не будет

Однако, в отличие от NOR, к

 

стёрт, что означает установку

данным которой можно

 

всех битов в блоке в 1.

обращаться в произвольном

 

 

порядке, чтение и запись в

 

 

NAND флеш выполняются в

 

 

терминах страниц, тогда как

 

 

стирание происходит в

 

 

терминах блоков.

 

 

 

Подключение к

Подключается как обычное

Существуют несколько способов

плате

устройство SRAM к шинам

подключения NAND флеш к

 

адреса и данных процессора.

CPU, зависящих от

 

 

производителя. Для доступа к

 

 

 

63 Разработка и внедрение системы на встраиваемом Linux

 

 

NAND выполняется соединение

 

 

выводов данных и команд к

 

 

обычно 8 выводам ввода-

 

 

вывода на микросхеме флеш-

 

 

памяти.

 

 

 

Выполнение кода

Код может быть выполнен прямо

Если код находится в NAND

 

из NOR, поскольку она

флеш, для запуска он нуждается

 

подключена непосредственно к

в копировании в память.

 

шинам адреса и данных.

 

 

 

 

Производительность

Флеш-память NOR

Флеш-память NAND

 

характеризуется медленным

характеризуется быстрым

 

стиранием, медленной записью

стиранием, быстрой записью и

 

и быстрым чтением.

быстрым чтением.

 

 

 

Неисправные блоки

Неисправные блоки в

Эти микросхемы были

 

микросхемах NOR флеш не

разработаны в основном как

 

ожидаются, поскольку они были

устройства хранения медиа-

 

разработаны, чтобы хранить

данных с более низкой ценой,

 

системные данные.

поэтому стоит ожидать, что они

 

 

имеют неисправные блоки.

 

 

Обычно такие микросхемы

 

 

флеш-памяти поставляются с

 

 

помеченными неисправными

 

 

участками. Также сектора NAND

 

 

флеш больше страдают от

 

 

проблемы переключения битов,

 

 

когда бит становится

 

 

перевернутым во время записи;

 

 

это обнаруживается

 

 

алгоритмами коррекции ошибок,

 

 

называемых ECC/EDC, которые

 

 

выполняются либо в

 

 

оборудовании, либо в

 

 

программном обеспечении.

 

 

 

Применение

В основном используются для

Используются главным образом в

 

выполнения кода. На NOR флеш

качестве устройств хранения

 

могут находиться загрузчики,

для встраиваемых систем,

 

потому что код из такой флеш-

таких как приставки к

 

памяти может быть выполнен

телевизорам и MP3-плееры.

 

напрямую. Такая флеш-память

Если вы планируете

 

довольно дорогая и она

использовать плату только с

 

обеспечивает меньшие

NAND, вам придётся добавить

 

плотности памяти и имеет

дополнительное ПЗУ загрузки.

 

относительно более короткую

Они предлагают высокие

 

продолжительность жизни

плотности при более низких

 

(приблизительно 100 000 циклов

ценах и имеют более

 

стирания).

длительный срок службы (около

 

 

10 в 6-ой степени циклов

 

 

стирания).

 

 

 

Memory Technology Device (MTD) support

Skip to content

Найти: Close

Memory Technology Device (MTD) support

Memory Technology Devices are flash, RAM and similar chips, often used for solid state file systems on embedded devices. This option will provide the generic support for MTD drivers to register themselves with the kernel and for potential users of MTD devices to enumerate the devices which are present and obtain a handle on them. It will also allow you to select individual drivers for particular hardware and users of MTD devices. If unsure, say N.

Устройства памяти — это флэш-память, оперативная память и аналогичные микросхемы, которые часто используются для создания твердотельных файловых систем на встроенных устройствах. Эта опция обеспечит общую поддержку для драйверов MTD для регистрации себя в ядре и для потенциальных пользователей устройств MTD для перечисления имеющихся устройств и получения указателя на них. Это также позволит вам выбрать отдельные драйверы для конкретного оборудования и пользователей устройств MTD.

Если не уверены, скажите N.

Debugging

This turns on low-level debugging for the entire MTD sub-system. Normally, you should say N.

Включает низкоуровневую отладку для всей подсистемы MTD.

Обычно вы должны сказать N.

MTD concatenating support

Support for concatenating several MTD devices into a single (virtual) one. This allows you to have -for example- a JFFS(2) file system spanning multiple physical flash chips. If unsure, say Y.

Поддержка объединения нескольких устройств MTD в одно (виртуальное). Это позволяет вам иметь, например, файловую систему JFFS (2), охватывающую несколько физических флеш-чипов.

Если не уверены, скажите Y.

MTD partitioning support

If you have a device which needs to divide its flash chip(s) up into multiple ‘partitions’, each of which appears to the user as a separate MTD device, you require this option to be enabled. If unsure, say ‘Y’.

Note, however, that you don’t need this option for the DiskOnChip devices. Partitioning on NFTL ‘devices’ is a different — that’s the ‘normal’ form of partitioning used on a block device.

Если у вас есть устройство, которому необходимо разделить свои флеш-чип(ы) на несколько «разделов», каждый из которых представляется пользователю как отдельное устройство MTD, вам необходимо включить эту опцию. Если вы не уверены, скажите «Y».

Обратите внимание, что вам не нужна эта опция для устройств DiskOnChip. Разбиение на «устройствах» в NFTL отличается — это «нормальная» форма разбиения, используемая на блочных устройствах.

Direct char device access to MTD devices

This provides a character device for each MTD device present in the system, allowing the user to read and write directly to the memory chips, and also use ioctl() to obtain information about the device, or to erase parts of it.

Предоставляет символьное устройство для каждого устройства MTD, присутствующего в системе, позволяя пользователю читать и записывать данные непосредственно в микросхемы памяти, а также использовать ioctl () для получения информации об устройстве или для его удаления.

Caching block device access to MTD devices

Although most flash chips have an erase size too large to be useful as block devices, it is possible to use MTD devices which are based on RAM chips in this manner. This block device is a user of MTD devices performing that function.

At the moment, it is also required for the Journalling Flash File System(s) to obtain a handle on the MTD device when it’s mounted (although JFFS and JFFS2 don’t actually use any of the functionality of the mtdblock device).

Later, it may be extended to perform read/erase/modify/write cycles on flash chips to emulate a smaller block size. Needless to say, this is very unsafe, but could be useful for file systems which are almost never written to.

You do not need this option for use with the DiskOnChip devices. For those, enable NFTL support (CONFIG_NFTL) instead.

Хотя большинство флэш-чипов имеют слишком большой размер стирания, чтобы их можно было использовать в качестве блочных устройств, таким образом можно использовать устройства MTD, основанные на чипах ОЗУ. Это блочное устройство является пользователем устройств MTD, выполняющих эту функцию.

В настоящий момент также требуется, чтобы Journalling Flash файловая система(ы) получала дескриптор устройства MTD при его монтировании (хотя JFFS и JFFS2 фактически не используют никаких функций устройства mtdblock).

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

Вам не нужна эта опция для использования с устройствами DiskOnChip. Для них включите поддержку NFTL (CONFIG_NFTL).

Readonly block device access to MTD devices

This allows you to mount read-only file systems (such as cramfs) from an MTD device, without the overhead (and danger) of the caching driver.

You do not need this option for use with the DiskOnChip devices. For those, enable NFTL support (CONFIG_NFTL) instead.

Позволяет вам монтировать файловые системы только для чтения (например, cramfs) с устройства MTD без лишних затрат (и опасности) драйвера кэширования.

Вам не нужна эта опция для использования с устройствами DiskOnChip. Для них включите поддержку NFTL (CONFIG_NFTL).

FTL (Flash Translation Layer) support

This provides support for the original Flash Translation Layer which is part of the PCMCIA specification. It uses a kind of pseudo- file system on a flash device to emulate a block device with 512-byte sectors, on top of which you put a ‘normal’ file system.

You may find that the algorithms used in this code are patented unless you live in the Free World where software patents aren’t legal — in the USA you are only permitted to use this on PCMCIA hardware, although under the terms of the GPL you’re obviously permitted to copy, modify and distribute the code as you wish. Just not use it.

Обеспечивает поддержку оригинального Flash Translation Layer, который является частью спецификации PCMCIA. Он использует своего рода псевдофайловую систему на флэш-устройстве для эмуляции блочного устройства с 512-байтовыми секторами, поверх которого вы помещаете «нормальную» файловую систему.

Вы можете обнаружить, что алгоритмы, используемые в этом коде, запатентованы, если вы не живете в Свободном мире, где патенты на программное обеспечение не являются законными — в США вам разрешено использовать это только на оборудовании PCMCIA, хотя согласно условиям GPL вам, разумеется, разрешено копировать, модифицировать и распространять код по своему усмотрению. Просто не используйте это.

NFTL (NAND Flash Translation Layer) support

This provides support for the NAND Flash Translation Layer which is used on M-Systems’ DiskOnChip devices. It uses a kind of pseudo- file system on a flash device to emulate a block device with 512-byte sectors, on top of which you put a ‘normal’ file system.

You may find that the algorithms used in this code are patented unless you live in the Free World where software patents aren’t legal — in the USA you are only permitted to use this on DiskOnChip hardware, although under the terms of the GPL you’re obviously permitted to copy, modify and distribute the code as you wish. Just not use it.

Обеспечивает поддержку NAND Flash Translation Layer, который используется на устройствах DiskOnChip компании M-Systems. Он использует своего рода псевдофайловую систему на флэш-устройстве для эмуляции блочного устройства с 512-байтовыми секторами, поверх которого вы помещаете «нормальную» файловую систему.

Вы можете обнаружить, что алгоритмы, используемые в этом коде, запатентованы, если вы не живете в Свободном мире, где патенты на программное обеспечение не являются законными — в США вам разрешено использовать это только на оборудовании DiskOnChip, хотя на условиях GPL вам, разумеется, разрешено копировать, модифицировать и распространять код по своему усмотрению. Просто не используйте это.

Write support for NFTL

Support for writing to the NAND Flash Translation Layer, as used on the DiskOnChip.

Поддержка записи в NAND, используется в устройствах типа ДискНаКристале.

INFTL (Inverse NAND Flash Translation Layer) support

This provides support for the Inverse NAND Flash Translation Layer which is used on M-Systems’ newer DiskOnChip devices. It uses a kind of pseudo-file system on a flash device to emulate a block device with 512-byte sectors, on top of which you put a ‘normal’ file system.

You may find that the algorithms used in this code are patented unless you live in the Free World where software patents aren’t legal — in the USA you are only permitted to use this on DiskOnChip hardware, although under the terms of the GPL you’re obviously permitted to copy, modify and distribute the code as you wish. Just not use it.

Обеспечивает поддержку обратного уровня NAND Flash Translation Layer, который используется на более новых устройствах DiskOnChip компании M-Systems. Он использует своего рода псевдофайловую систему на флэш-устройстве для эмуляции блочного устройства с 512-байтовыми секторами, поверх которого вы помещаете «нормальную» файловую систему.

Вы можете обнаружить, что алгоритмы, используемые в этом коде, запатентованы, если вы не живете в Свободном мире, где патенты на программное обеспечение не являются законными — в США вам разрешено использовать это только на оборудовании DiskOnChip, хотя на условиях GPL вам, разумеется, разрешено копировать, модифицировать и распространять код по своему усмотрению. Просто не используйте это.

Resident Flash Disk (Flash Translation Layer) support

This provides support for the flash translation layer known as the Resident Flash Disk (RFD), as used by the Embedded BIOS of General Software. There is a blurb at:

http://www.gensw.com/pages/prod/bios/rfd.htm

Обеспечивает поддержку уровня трансляции флэш-памяти, известного как Resident Flash Disk (RFD), который используется встроенным BIOS общего программного обеспечения. Существует реклама на:

http://www.gensw.com/pages/prod/bios/rfd.htm

RAM/ROM/Flash chip drivers

Detect flash chips by Common Flash Interface (CFI) probe

The Common Flash Interface specification was developed by Intel, AMD and other flash manufactures that provides a universal method for probing the capabilities of flash devices. If you wish to support any device that is CFI-compliant, you need to enable this option. Visit <http://www.amd.com/products/nvd/overview/cfi.html> for more information on CFI.

Спецификация Common Flash Interface была разработана Intel, AMD и другими производителями флэш-памяти, которая предоставляет универсальный метод для исследования возможностей флэш-устройств. Если вы хотите поддерживать любое устройство, совместимое с CFI, вам необходимо включить эту опцию. Посетите <http://www.amd.com/products/nvd/overview/cfi.html> для получения дополнительной информации о CFI.

Detect non-CFI AMD/JEDEC-compatible flash chips

This option enables JEDEC-style probing of flash chips which are not compatible with the Common Flash Interface, but will use the common CFI-targetted flash drivers for any chips which are identified which are in fact compatible in all but the probe method. This actually covers most AMD/Fujitsu-compatible chips, and will shortly cover also non-CFI Intel chips (that code is in MTD CVS and should shortly be sent for inclusion in Linus’ tree)

Эта опция позволяет выполнять тестирование флэш-чипов в стиле JEDEC, которые не совместимы с интерфейсом Common Flash, но будет использовать общие флэш-драйверы, нацеленные на CFI, для любых идентифицированных чипов, которые на самом деле совместимы со всеми, кроме метода зонда. На самом деле это относится к большинству AMD/Fujitsu-совместимых чипов и в скором времени охватит также чипы Intel без CFI (этот код находится в CVS MTD и вскоре должен быть отправлен для включения в дерево Линуса)

Flash chip driver advanced configuration options

If you need to specify a specific endianness for access to flash chips, or if you wish to reduce the size of the kernel by including support for only specific arrangements of flash chips, say ‘Y’. This option does not directly affect the code, but will enable other configuration options which allow you to do so.

If unsure, say ‘N’.

Если вам нужно указать конкретный порядок байтов для доступа к флеш-чипам или вы хотите уменьшить размер ядра, включив поддержку только определенных типов флеш-чипов, скажите «Y». Этот параметр напрямую не влияет на код, но включает другие параметры конфигурации, которые позволяют вам это делать.

Если не уверены, скажите «N».

Support for Intel/Sharp flash chips

The Common Flash Interface defines a number of different command sets which a CFI-compliant chip may claim to implement. This code provides support for one of those command sets, used on Intel StrataFlash and other parts.

Common Flash Interface определяет ряд различных наборов команд, которые CFI-совместимый чип может реализовывать. Этот код обеспечивает поддержку одного из этих наборов команд, используемых в Intel StrataFlash и других частях.

Support for AMD/Fujitsu flash chips

The Common Flash Interface defines a number of different command sets which a CFI-compliant chip may claim to implement. This code provides support for one of those command sets, used on chips including the AMD Am29LV320.

Common Flash Interface определяет ряд различных наборов команд, которые CFI-совместимый чип может реализовывать. Этот код обеспечивает поддержку одного из этих наборов команд, используемых на чипах, включая AMD Am29LV320.

И т.д.

Self-contained MTD device drivers

NAND Flash Device Drivers

OneNAND Flash Device Driver

Retry failed commands (erase/program)

Some chips, when attached to a shared bus, don’t properly filter bus traffic that is destined to other devices. This broken behavior causes erase and program sequences to be aborted when the sequences are mixed with traffic for other devices.

SST49LF040 (and related) chips are know to be broken.

Некоторые микросхемы, подключенные к общей шине, неправильно фильтруют трафик шины, предназначенный для других устройств. Это нарушенное поведение приводит к тому, что последовательности стирания и программы отменяются, когда последовательности смешиваются с трафиком для других устройств.

Известно, что чипы SST49LF040 (и связанные с ними) сломаны.

Support for ST (Advanced Architecture) flash chips

The Common Flash Interface defines a number of different command sets which a CFI-compliant chip may claim to implement. This code provides support for one of those command sets.

Common Flash Interface определяет ряд различных наборов команд, которые CFI-совместимый чип может реализовывать. Этот код обеспечивает поддержку одного из этих наборов команд.

Support for RAM chips in bus mapping

This option enables basic support for RAM chips accessed through a bus mapping driver.

Эта опция включает базовую поддержку микросхем ОЗУ, доступ к которым осуществляется через драйвер отображения шины.

Support for ROM chips in bus mapping

This option enables basic support for ROM chips accessed through a bus mapping driver.

Эта опция включает базовую поддержку микросхем ПЗУ, доступ к которым осуществляется через драйвер отображения шины.

Support for absent chips in bus mapping

This option enables support for a dummy probing driver used to allocated placeholder MTD devices on systems that have socketed or removable media. Use of this driver as a fallback chip probe preserves the expected registration order of MTD device nodes on the system regardless of media presence. Device nodes created with this driver will return -ENODEV upon access.

Этот параметр включает поддержку фиктивного пробного драйвера, используемого для распределенных устройств MTD-заполнителей в системах с сокетами или со съемными носителями. Использование этого драйвера в качестве запасного чип-зонда сохраняет ожидаемый порядок регистрации узлов устройства MTD в системе независимо от наличия носителя. Узлы устройства, созданные с помощью этого драйвера, вернут -ENODEV при доступе.

Mapping drivers for chip access

Support non-linear mappings of flash chips

This causes the chip drivers to allow for complicated paged mappings of flash chips.

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

И т.д.

Self-contained MTD device drivers

NAND Flash Device Drivers

OneNAND Flash Device Driver

Понравилось это:

Нравится Загрузка…

Рубрики

РубрикиВыберите рубрикуLinux  (262)   Kubernetes  (96)   Mikrotik  (12)   Puppet  (5)   Мониторинг  (17)   Почта  (5)Mac  (1)Windows  (22)Без рубрики  (206)Виртуалки  (11)   Vmware  (2)Железо  (6)Мемо  (11)Новости  (2)Про жизнь  (98)   Война  (24)   Здоровье  (4)   Мысли  (13)   Настроение  (13)Программирование  (21)   java  (14)Работа  (147)   Devops  (9)   VOIP  (6)   Курсы  (97)Разное  (15)Спорт  (3)Это  (148)   идиотизмы  (22)   креатив  (8)   лохотрон  (12)   негатив  (39)   позитив  (52)   приколы  (22)   странное  (9)   черный пиар  (18)

Метки

CI|CD (1) devops (17) ekasticsearch (1) java (4) kubernetes (95) linux (53) mac (1) mikrotik (11) openvpn (1) rancher (1) routing (2) voip (3) youtube (1) виртуалки (5) документация (1) жизня (2) здоровье (2) идиотизмы (2) курсы (58) логи (2) мониторинг (18) музыка (1) настроение (2) негатив (3) новости (1) переводы (1) позитив (2) почта (1) приколы (1) прог (1) программирование (8) про жизнь (4) работа (2) черный пиар (1) это (3)

Архив

Архив Выберите месяц Январь 2023  (1) Декабрь 2022  (1) Ноябрь 2022  (1) Октябрь 2022  (1) Сентябрь 2022  (2) Август 2022  (2) Июль 2022  (3) Июнь 2022  (1) Май 2022  (1) Март 2022  (6) Февраль 2022  (5) Январь 2022  (2) Декабрь 2021  (9) Ноябрь 2021  (3) Октябрь 2021  (3) Сентябрь 2021  (1) Август 2021  (3) Июль 2021  (6) Июнь 2021  (2) Май 2021  (5) Апрель 2021  (6) Март 2021  (1) Февраль 2021  (1) Январь 2021  (3) Декабрь 2020  (4) Ноябрь 2020  (4) Октябрь 2020  (3) Сентябрь 2020  (5) Август 2020  (4) Июль 2020  (9) Июнь 2020  (3) Май 2020  (2) Апрель 2020  (6) Март 2020  (2) Декабрь 2019  (2) Октябрь 2019  (4) Август 2019  (6) Июль 2019  (1) Июнь 2019  (4) Май 2019  (9) Апрель 2019  (8) Март 2019  (2) Октябрь 2018  (2) Сентябрь 2018  (1) Август 2018  (1) Июнь 2018  (4) Май 2018  (1) Февраль 2018  (1) Январь 2018  (1) Ноябрь 2017  (1) Октябрь 2017  (2) Сентябрь 2017  (1) Июнь 2017  (2) Апрель 2017  (1) Март 2017  (5) Февраль 2017  (1) Январь 2017  (2) Декабрь 2016  (1) Июль 2016  (1) Апрель 2016  (1) Февраль 2016  (2) Январь 2016  (2) Декабрь 2015  (5) Ноябрь 2015  (7) Октябрь 2015  (9) Сентябрь 2015  (8) Июль 2015  (2) Март 2015  (1) Февраль 2015  (1) Июль 2014  (1) Июль 2013  (1) Май 2013  (1) Апрель 2013  (1) Февраль 2013  (2) Январь 2013  (1) Декабрь 2012  (1) Ноябрь 2012  (1) Октябрь 2012  (7) Сентябрь 2012  (2) Август 2012  (3) Июль 2012  (2) Июнь 2012  (2) Май 2012  (1) Апрель 2012  (3) Март 2012  (6) Январь 2012  (2) Декабрь 2011  (7) Ноябрь 2011  (3) Октябрь 2011  (4) Сентябрь 2011  (2) Август 2011  (8) Июль 2011  (1) Июнь 2011  (3) Май 2011  (2) Апрель 2011  (4) Март 2011  (14) Февраль 2011  (8) Январь 2011  (2) Декабрь 2010  (2) Ноябрь 2010  (2) Сентябрь 2010  (1) Август 2010  (3) Июль 2010  (3) Июнь 2010  (3) Май 2010  (3) Апрель 2010  (1) Март 2010  (2) Февраль 2010  (4) Январь 2010  (3) Декабрь 2009  (3) Ноябрь 2009  (5) Октябрь 2009  (8) Сентябрь 2009  (7) Август 2009  (5) Июль 2009  (13) Июнь 2009  (10) Май 2009  (15) Апрель 2009  (6) Март 2009  (12) Февраль 2009  (6) Январь 2009  (5) Декабрь 2008  (9) Ноябрь 2008  (8) Октябрь 2008  (7) Сентябрь 2008  (14) Август 2008  (21) Июль 2008  (19) Июнь 2008  (9) Май 2008  (12) Апрель 2008  (11) Март 2008  (16) Февраль 2008  (16) Январь 2008  (18) Декабрь 2007  (16) Ноябрь 2007  (15) Октябрь 2007  (22) Сентябрь 2007  (23) Август 2007  (2) Июль 2007  (3) Март 2006  (2) Февраль 2006  (6) Январь 2006  (7) Декабрь 2005  (15) Ноябрь 2005  (3)

Я там

Мои твиты

%d такие блоггеры, как:

    Подсистема

    Memory Technology Device (MTD) для Linux.

    Содержание

    1. Обзор MTD
    2. МТД API
    3. МПД-тесты
    4. Драйвер mtdblock
    5. Старая документация MTD

    Подсистема MTD (расшифровывается как Memory Technology Devices) обеспечивает абстракцию слой для необработанных флэш-устройств. Это позволяет использовать один и тот же API, когда работа с различными типами флэш-памяти и технологиями, например. NAND, OneNAND, НО, AG-И, ECC’d NOR и т. д.

    Подсистема MTD не работает с блочными устройствами, такими как MMC, eMMC, SD, CompactFlash и т. д. Эти устройства не являются необработанными флэш-памятью, но имеют флэш-память. Трансляционный слой внутри, что делает их похожими на блочные устройства. Эти устройства являются предметом блочной подсистемы Linux, а не MTD. Пожалуйста, обратитесь к этот раздел часто задаваемых вопросов для краткости перечень основных отличий блочных устройств от МПД. И Необработанная флэш-память против FTL-устройств Раздел UBIFS обсуждает это более подробно.

    Подсистема МПД имеет следующие интерфейсы.

    • Символьные устройства MTD, обычно называемые /dev/mtd0 , /dev/mtd1 и так далее. Эти символьные устройства обеспечивают доступ ввода-вывода к необработанной флэш-памяти. Они поддерживают количество вызовов ioctl для стирания стираемых блоков, маркировки их как плохие или проверка, если блок стирания плохой, получение информации о приборах МПД и др.
    • Интерфейс sysfs относительно новее и обеспечивает полная информация о каждом устройстве МПД в системе. Этот интерфейс легко расширяемый, и разработчикам рекомендуется использовать 9Интерфейс 0012 sysfs вместо старого ioctl или /proc/mtd интерфейсы, если это возможно. sysfs интерфейс для подсистемы mtd задокументирован в ядре, и в настоящее время можно найти на Документация/ABI/тестирование/sysfs-class-mtd .
    • Файл файловой системы /proc/mtd proc предоставляет общие Информация МТД. Это устаревший интерфейс и интерфейс sysfs. предоставляет больше информации.

    Подсистема MTD поддерживает чистую флэш-память NAND с программно-аппаратный ECC, флэш-память OneNAND, CFI (Общий интерфейс флэш-памяти) Вспышки NOR и другие типы вспышек.

    Кроме того, MTD поддерживает устаревшие «уровни перевода» FTL/NFTL, Чипы DiskOnChip 2000 и Millennium от M-Systems и флэш-памяти PCMCIA (драйвер pcmciamtd ). Но соответствующие драйвера очень старые и не очень поддерживается.

    API подсистемы MTD определен в include/linux/mtd/mtd.h . Методы и структуры данных в этом файле используются ядром более высокого уровня. код, такой как файловые системы флэш-памяти, для доступа к устройствам mtd и управления ими, а также авторами драйверов устройств для сопряжения своего устройства с подсистемой mtd. определены различные методы, с помощью которых драйвер предоставляет доступ к устройству в течение структура mtd_info . До версии ядра 3. 4 более высокие уровни вызывал методы драйвера напрямую через указатель на структуру mtd_info . Начиная с ядра 3.4, эти методы реализованы в пакете mtd. код ядра подсистемы, который затем вызывает соответствующие методы драйвера. Пользователи ядра 3.4 и более поздних версий не должны вызывать методы драйвера напрямую, а вместо этого используйте прототипы в mtd.h за пределами структуры mtd_info . Эти методы включают mtd_read() , mtd_write() и т. д.

    При отсутствии ошибки методы API вернут ноль, за двумя важными исключениями. mtd_read() и mtd_read_oob() могут вернуться -EUCLEAN в некоторых случаях. Этот код возврата применим в основном на устройства флэш-памяти NAND и используется для обозначения того, что некоторые битовые ошибки были исправляется средством ECC устройства. До версии ядра 3.4, - EUCLEAN возвращался, если одна или несколько битовых ошибок были исправлены. во время операции чтения. Начиная с ядра 3.4 значение более тонкое, и можно широко интерпретировать как означающее, что «было опасно большое количество битовых ошибок». исправлено». - Код возврата EUCLEAN предназначен для слои обнаруживают деградацию блоков стирания. Условия, по которым mtd_read() и mtd_read_oob() возврат -EUCLEAN можно настроить с помощью bitflip_threshold элемент интерфейса sysfs. См. документацию ядра для MTD. sysfs (см. выше) перед настройкой этого значения.

    В состав mtd-utils входит набор тестовых программ, которые можно запустить для проверки ваше флэш-оборудование и драйверы. Программы только недавно были портированы в пространство пользователя, а также доступны в виде модулей ядра.

    В отличие от модулей, тесты пользовательского пространства также предлагают более тонкие детализированные варианты управления их поведением, такие как использование только определенных удалить блоки или страницы.

    Тесты пользовательского пространства компилируются автоматически, когда компиляции mtd-utils, но не устанавливается по умолчанию. Для установки тестов через make install , опция настройки --enable-install-tests должен быть установлен.

    Тесты модулей ядра доступны в основных ядрах начиная с версии ядра 2.6.29 и они живут в drivers/mtd/tests Каталог исходных кодов ядра Linux. Ты может компилировать тесты как модули ядра, включив их в ядре меню конфигурации, пометив: « Драйверы устройств » -> « Memory Technology Device (MTD) support » -> « MTD Tests support » (или символ MTD_TESTS в файле .config ).

    Если у вас ядро ​​до 2.6.29 , вы можете найти тесты здесь:

    git://git.infradead.org/users/ahunter/nand-tests.git
     

    Набор тестов MTD содержит следующие тесты:

    • nandbiterrs : применимо только для битовые ошибки и тесты на восстановление многобитных ошибок на странице NAND. Этот в основном тестирует контроллер/драйвер ECC. Версия модуля ядра называется mtd_nandbiterrs .
    • flash_speed : измеряет и сообщает скорость чтения/записи/стирания устройства МПД. Версия модуля ядра называется mtd_speedtest .
    • flash_stress : выполняет случайные операции чтения/записи/стирания и проверяет возможности ввода/вывода устройства MTD. Модуль ядра версия называется mtd_stresstest .
    • flash_readtest : тестирует чтение с устройства MTD, один NAND страницы за раз, включая OOB (или 512 байт за раз в случае флэш-памяти). как NOR) и проверяет правильность чтения. Модуль ядра версия называется mtd_readtest .
    • nandpagetest : актуально только для флэш-памяти NAND, страница тестов NAND письмо и чтение в разном размере и порядке; этот тест был изначально разработан для тестирования драйвера OneNAND, так что это может быть немного ориентирован на OneNAND, но должен работать на любой флэш-памяти NAND. Ядро версия модуля называется mtd_pagetest .
    • mtd_oobtest : в настоящее время существует только как модуль ядра. Актуально только для флэш-памяти NAND, проверяет работу ввода-вывода области OOB. правильно, записывая данные по разным смещениям и проверяя их.
    • nandsubpagetest : актуально только для флэш-памяти NAND, тесты ввод/вывод подстраницы. Модуль ядра версия называется mtd_subpagetest .
    • flash_torture : этот тест предназначен для износа flash стереть блоки. Повторно записывает и стирает одну и ту же группу стирает блоки до тех пор, пока не произойдет ошибка ввода-вывода, поэтому будьте осторожны! Это может быть очень хорошая идея запустить этот тест на некоторое время и проверить ваш прошивальщик и HW, если у вас есть запасное устройство. Например, мы поймали довольно редкие и неприятные проблемы с DMA на плате OMAP2 с флэш-памятью OneNAND, просто запустив эти тесты в течение нескольких часов. Версия модуля ядра называется mtd_torturetest , а также поддерживает ряд опций (см. modinfo mtd_torturetest ).
    • mtd_nandecctest : простой тест, который проверяет правильность встроенный программный ECC для 256 и 512-байтных буферов; этот тест не зависит от драйвера, но тестирует общий код поддержки NAND. Это тесты только существует как модуль ядра, так как он тестирует внутреннее программное обеспечение ECC реализация.

    Драйвер mtdblock , доступный в MTD, является архаичным инструментом который эмулирует блочные устройства поверх устройств MTD. У него даже нет плохая обработка стирания блоков, поэтому его нельзя использовать с флэш-памятью NAND. И это работает, кэшируя весь блок стирания флэш-памяти в ОЗУ, изменяя его по запросу, затем стирание всего блока и запись измененного. Это значит, что mtdblock не пытается выполнять какие-либо оптимизации, и вы потерять много данных в случае отключения электроэнергии. И последнее но не менее важное, mtdblock не выполняет выравнивание износа или обработку бит-флипов.

    Часто люди рассматривают mtdblock как общий слой FTL и пытаются использовать блочные файловые системы поверх голых флэш-памяти, используя мтдблок . Это неправильно в большинстве случаев. Другими словами, пожалуйста, не используйте mtdblock , если вы точно знать, что ты делаешь.

    Существует также версия этого драйвера только для чтения, в основном для использования с uCLinux, где потребность в дополнительной оперативной памяти считалась слишком большой. Однако только как и версия драйвера R / W, нет выравнивания износа и бит-флипов умение обращаться.

    Вместо использования этого старого драйвера вы можете проверить устройство блокировки R/O эмуляция предоставлена ​​ UBI полезно. Пожалуйста, обратитесь к Раздел UBI для более подробной информации.

    Старый веб-сайт MTD и старая документация по MTD доступны здесь. Описание старого интерфейса NAND flash доступен здесь.

    Устройство технологии памяти

    Интерфейс устройства технологии памяти низкого уровня. Подробнее…

    Низкоуровневая технология памяти Интерфейс устройства.

    Универсальный интерфейс устройства технологии памяти

    В отличие от драйвера флэш-страницы, он основан на драйвере устройства (т. е. все функции принимают mtd_dev_t в качестве первого аргумента), так что к EEPROM на основе SPI (например, AT25xxx) можно получить доступ так же, как к внутренним флэш-память или SD-карты), все в одном приложении.

    Устройства MTD предоставляют блочный интерфейс стирания и записи. Этим они отличаются от блочных устройств (таких как жесткие диски), на которых отдельные байты могут быть перезаписаны. В FAQ по Linux MTD есть удобное сравнение (остерегайтесь различий в терминологии, описанных ниже). Их можно стереть (с некоторой степенью детализации, часто немного изнашивая стертую область), а на стертые области можно записать (иногда несколько раз).

    Устройства MTD описываются в терминах секторов, страниц и флагов функций:

    • Сектор — это блок стирания устройства. Вызовы mtd_erase должны работать в соответствии с этим числом (обычно где-то около 1 КБ).

      (Обратите внимание, что это соответствует термину «страница», используемому в API flashpage, и термину «eraseblock» в MTD Linux).

    • Страница — это максимальный размер, который устройство может записать за одну передачу.

      Приложениям редко приходится иметь дело с этим; он не дает никаких гарантий атомарности, но запись внутри страницы обычно выполняется быстрее, чем за ее пределами.

      Страницы являются подразделением секторов.

    • Размер записи — это минимальный размер записи на устройство, а также требуемое выравнивание записи.

      Размер записи равен разделителю страницы. Часто он имеет длину от 1 до 4 байтов, но может достигать полного размера страницы.

    • Флаги устройства указывают функции, например. можно ли перезаписать ячейку памяти без ее предварительного стирания.

    Если это не разрешено флагом (таким как MTD_DRIVER_FLAG_DIRECT_WRITE или MTD_DRIVER_FLAG_CLEARING_OVERWRITE), этот API MTD не позволяет дважды записывать области памяти между операциями стирания. Драйверы не должны учитывать доступ для записи, как и функции этого модуля: влияние на производительность будет слишком велико. Приложение может записывать в стертую память только один раз. Невыполнение этого требования может привести к повреждению оборудования.

    Этот API MTD в настоящее время не указывает, какое значение будет считано из стертого сектора.

      Native MTD
      mtd flash emulation for native
     
    file   mtd.h
     
    структура mtd_dev_t
      Дескриптор устройства MTD. Подробнее. ..
    struct mtd_desc
    Интерфейс драйвера MTD. More…
     
    #define  MTD_DRIVER_FLAG_DIRECT_WRITE   (1 << 0)
      MTD driver can write any data to the storage without erasing it first. Подробнее…
    #DEFINE MTD_DRIVER_FLAG_CLEARING_OVERWRITE. More…
     
    typedef struct mtd_desc  mtd_desc_t
      MTD driver interface. Подробнее. ..
     
    перечисление   mtd_power_state { MTD_POWER_UP , MTD_POWER_DOWN }
      Состояния питания МПД. More…
     
    1 9 92696 910269 Стереть сектора устройства МПД. More…
    int  mtd_init (mtd_dev_t *mtd)
      mtd_init Initialize a MTD device More…
     
    int  mtd_read (mtd_dev_t *mtd, void *dest, uint32_t addr, uint32_t count)
      Чтение данных с устройства MTD. More…
     
    int  mtd_read_page (mtd_dev_t *mtd, void *dest, uint32_t page, uint32_t offset, uint32_t size)
      Read data from a MTD device with pagewise addressing . Подробнее…
     
    int mtd_write (mtd_dev_t *mtd, const void *src, uint32_t addr, uint32_t count)
      Запись данных на устройство MTD. More…
     
    int  mtd_write_page_raw (mtd_dev_t *mtd, const void *src, uint32_t page, uint32_t offset, uint32_t size)
      Write data to a MTD device with pagewise адресация. Подробнее…
     
    int mtd_write_page (mtd_dev_t *mtd, const void *src, uint32_t page, uint32_t offset, uint392_t size)0264
      Запись данных в устройство МПД с постраничной адресацией. More…
     
    int  mtd_erase (mtd_dev_t *mtd, uint32_t addr, uint32_t count)
      Erase sectors of a MTD device. Подробнее…
     
    int mtd_erase_sector (mtd_dev_t *mtd, uint32_t сектор, uint32_t num) 9026 9
     
    int  mtd_power (mtd_dev_t *mtd, enum mtd_power_state power)
      Set power mode on a MTD device. Подробнее …

    ◆ MTD_DRIVER_FLAG_CLEARING_OVERWRITE

    .

    Драйвер MTD поддерживает произвольную очистку перезаписей.

    Если установлено, (произвольно) разрешено много операций записи на размер записи, и результатом будет старое значение побитовое И записанное значение.

    Это свойство характерно для управляемой флэш-памяти. (Для сравнения, необработанная флэш-память, часто используемая внутри микроконтроллеров, может не допускать перезаписей или может разрешать их с той же семантикой, но только для ограниченного количества записей между стираниями; в настоящее время нет флага, описывающего их дальше).

    Определение в строке 137 файла mtd.h.

    ◆ MTD_DRIVER_FLAG_DIRECT_WRITE

    #define MTD_DRIVER_FLAG_DIRECT_WRITE   (1 << 0)

    Драйвер MTD может записывать любые данные в хранилище без их предварительного стирания.

    Если установлено, запись полностью переопределяет предыдущие значения.

    Определение в строке 124 файла mtd.h.

    ◆ mtd_desc_t

    typedef struct mtd_desc mtd_desc_t

    Интерфейс драйвера MTD.

    Определяет функции доступа к МПД.

    МПД состоит из страниц, объединенных в сектора. Сектор — это наименьшая стираемая единица. Количество страниц в секторе должно быть постоянным для всего МПД.

    Операция стирания доступна только для целых секторов.

    Определение в строке 1 файла mtd.h.

    ◆ mtd_power_state

    перечисление mtd_power_state

    состояний питания МПД.

    Счетчик
    MTD_POWER_UP

    Включение.

    MTD_POWER_DOWN 

    Отключение питания.

    Определение в строке 85 файла mtd.h.

    ◆ mtd_erase()

    int mtd_erase ( mtd_dev_t * мтд ,
    uint32_t  адрес ,
    uint32_t  количество  
    )

    Стирание секторов МПД-устройства.

    адрес должен быть выровнен по границе сектора. count должен быть кратен размеру сектора.

    Параметры
    mtd the device to erase
    [in] addr the address of the first sector to erase
    [in] count the number of bytes to erase
    Возвращает
    0 в случае успешного стирания
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция не поддерживается на mtd
    -EOVERFLOW, если адрес или счетчик недействительны, т. е. вне памяти
    -EIO, если произошла ошибка ввода-вывода

    ◆ mtd_erase_sector()

    int mtd_erase_sector ( mtd_dev_t * мтд ,
    uint32_t сектор ,
    uint32_t  номер  
    )

    Стирание секторов МПД-устройства.

    Параметры
    mtd устройство для стирания
    [in] секторномер первого стираемого сектора
    [in] num количество стираемых секторов
    Возвращает
    0 в случае успешного стирания
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция не поддерживается на mtd
    -EOVERFLOW, если адрес или сектор недействительны, т. е. за пределами памяти
    -EIO, если произошла ошибка ввода-вывода

    ◆ mtd_init()

    int mtd_init ( mtd_dev_t * тд )

    mtd_init Инициализировать устройство MTD

    Параметры
    mtd устройство для инициализации
    Возвращает

    ◆ mtd_power()

    int mtd_power ( mtd_dev_t * мтд ,
    перечисление mtd_power_state мощность  
    )

    Установка режима питания на МПД-устройстве.

    Параметры
    mtd устройство для доступа
    [in] питание режим питания для установки
    Возвращает
    0, если режим питания успешно установлен
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция или состояние power не поддерживается на mtd
    -EIO, если произошла ошибка ввода-вывода

    ◆ mtd_read()

    int mtd_read ( mtd_dev_t * мтд ,
    пустота *  пункт назначения ,
    uint32_t  адрес ,
    uint32_t  количество  
    )

    Чтение данных с устройства МПД.

    Для адрес и счет выравнивание не требуется.

    Параметры
    mtd устройство для чтения
    [выход]dest the buffer to fill in
    [in] addr the start address to read from
    [in] count the number of bytes to read
    Возвращает
    0 в случае успеха
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция не поддерживается на mtd
    -EOVERFLOW, если адрес или счетчик недействительны, т.е. вне памяти
    -EIO, если произошла ошибка ввода-вывода

    ◆ mtd_read_page()

    int mtd_read_page ( mtd_dev_t * мтд ,
    пустота *  пункт назначения ,
    uint32_t  страница ,
    uint32_t  смещение ,
    uint32_t  размер  
    )

    Чтение данных с устройства МПД с постраничной адресацией.

    Уровень MTD позаботится о разделении транзакции на несколько операций чтения, если это требуется базовым носителем данных.

    Параметры
    mtd the device to read from
    [out] dest the buffer to fill in
    [in] page Page number to start reading from
    [дюйм] смещение смещение от начала страницы (в байтах)
    [in] размер количество байтов для чтения
    Возвращает
    0 в случае успеха
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция не поддерживается на mtd
    -EOVERFLOW, если адрес или счет недействительны, т.е. за пределами памяти
    -EIO, если произошла ошибка ввода-вывода

    ◆ mtd_write()

    int mtd_write ( mtd_dev_t * мтд ,
    константа недействительна * источник ,
    uint32_t  адрес ,
    uint32_t  количество  
    )

    Запись данных в устройство МПД.

    адрес + количество должно находиться внутри границ страницы. адрес может быть любым, но буфер не может перекрывать две страницы.

    Оба параметра должны быть кратны размеру записи устройства.

    Параметры
    mtd the device to write to
    [in] src the buffer to write
    [in] addr the start address to write to
    [in] count количество записываемых байтов
    Возвращает
    0 в случае успеха
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция не поддерживается на mtd
    -EOVERFLOW, если адрес или счет недействительны, т.е. вне памяти или перекрываются две страницы
    -EIO, если произошла ошибка ввода/вывода
    -EINVAL, если параметры недействительны (например, неверное выравнивание)

    ◆ mtd_write_page()

    int mtd_write_page ( mtd_dev_t * мтд ,
    константа недействительна * источник ,
    uint32_t  страница ,
    uint32_t  смещение ,
    uint32_t  размер  
    )

    Запись данных в устройство МПД с постраничной адресацией.

    Уровень MTD позаботится о разделении транзакции на несколько операций записи, если это требуется базовым носителем данных.

    Если базовый сектор необходимо стереть перед записью, уровень MTD позаботится об операции чтения-изменения-записи.

    смещение должно быть меньше размера страницы

    Примечание
    для этого требуется модуль mtd_write_page
    mtd the device to write to
    [in] src the buffer to write
    [in] page Page number to start writing to
    [в] смещение смещение в байтах от начала страницы
    [in] размер количество байтов для записи
    Возвращает
    0 в случае успеха
    < 0, если произошла ошибка
    -ENODEV, если mtd не является допустимым устройством
    -ENOTSUP, если операция не поддерживается на mtd
    -EOVERFLOW, если адрес или счет недействительны, т. е. вне памяти,
    -EIO, если произошла ошибка ввода/вывода
    -EINVAL, если параметры неверны

    ◆ mtd_write_page_raw()

    int mtd_write_page_raw ( mtd_dev_t * мтд ,
    константа недействительна * источник ,
    uint32_t страница ,
    uint32_t  смещение ,
    uint32_t  размер  
    )

    Запись данных в устройство МПД с постраничной адресацией.

    Уровень MTD позаботится о разделении транзакции на несколько операций записи, если это требуется базовым носителем данных.

About the author

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

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