Страниц: [1]
  Печать  
Автор Тема: Флеш память  (Прочитано 3911 раз)
oder
Гость
« : Ноября 07, 2013, 09:07:49 pm »

Не совсем о поддержке...
Интересует, как реализована запись в флеш память: посекторно или побайтно. Более конкретно: драйвер блочного устройства сбрасывает сектор в 512 байт, в котором изменены лишь несколько байт. Будут ли аппаратно перезаписаны только изменненные ячейки или все 512 байт? Будет ли разница в скорости записи и износе флеш памяти, по сравнению, если бы поменялись все 512 байт?
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #1 : Ноября 08, 2013, 01:01:01 am »

A разве флешке не делается page erase перед тем как записывать туда страницу, даже если в странице один байт изменился? В принципе, стирать не обязательно, если новое значение должно сбросить старые единицы в ноль, но не наоборот. 
Записан
oder
Гость
« Ответ #2 : Ноября 08, 2013, 01:06:20 am »

Возможно, здесь недоразумение. Я спрашивал о картах типа SD/MicroSD.
Ну и USB Flash заодно...
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #3 : Ноября 08, 2013, 06:32:43 am »

А что у контроллера usb флешки под ногами какая-то другая флеш? Тот же eeprom. Кстати, контроллер эмулирует работу обычного блочного устройства, чаще с 512 байт на сектор. Хотя у флешки страница редко 512 байт. Ну и когда вы говорите контроллеру записать сектор n, потом опять записать сектор n, запись произойдет в разные страницы флешки. вторая запись станет активной в таблице переадресации, а первая пометится как мусор. Периодически контроллер мусор ирейзит, когда насобирает его много. Както так оно вроде работает.
Записан
oder
Гость
« Ответ #4 : Ноября 08, 2013, 12:55:33 pm »

Ясно... Я, просто, об этом почти ничего не знал. Спасибо.
Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #5 : Ноября 08, 2013, 05:26:18 pm »

Уточню - это все справедливо для nand flash (хотя page erase вроде явно уже не делают, она сама при записи чистится). Вроде как именно такие флешки используется в примэнениях, про которые вы спросили. Есть еще nor flash - позволяют перезаписывать себя побайтно. Но вроде как в usb dongles их не ставят.
Записан
vshemm
Sr. Member
****
Offline Offline

Сообщений: 317


Просмотр профиля
« Ответ #6 : Ноября 08, 2013, 09:52:30 pm »

В SD/USB dongle/SSD и пр. используется nand flash, работа с которой сильно отличается от работы с блочным устройством и NOR flash.

Физически данные хранятся в page-ах, их размер может варьироваться от 512 до 2048 байт и выше. Page - минимальная единица, которая может быть запрограммирована, причем перед программированием она должна быть стерта (все биты установлены в 1). Минимальная единица для стирания - erase block, размер которого кратен размеру page. Erase block-и тоже могут объединяться в более крупные структуры, но не суть. Поэтому, чтобы записать один байт куда-либо, надо сначала считать нужную страницу и все страницы в том же erase block-е, стереть блок на физическом носителе, и после этого перепрограммировать все эти страницы новыми данными. Как видите, это сильно тратит ресурс флешки, ну и производительность никуда, поэтому применяются хитрые алгоритмы c wear leveling, фоновым garbage колеектором и пр.

Слой, который переводит операции с блочным устройством в операции с флешом называется FTL. Он может быть реализован как программно, если nand подключена "напрямую к процессору" (см. jffs2, ubifs, f2fs, ffs3/etfs и пр.), так и средствами отдельного контроллера. В SD/USB dongle/SSD дисках используется как раз отдельный контроллер, прошивку и алгоритмы которого производитель не дает никому, даже OEM/ODM-ам. Поэтому ответ на первый вопрос - хрен его знает как Smiley Как правило весьма криво и наплевательски с т.з. надежности (qnx6fs на них ничего не гарантирует).

Вообще, проблем с raw nand flash предостаточно, особенно когда надо обеспечить устойчивость к сбоям и power fail tolerance. А уж если учесть что чтение nand flash разрушающее, то становится вообще интересно...
Записан
Страниц: [1]
  Печать  
 
Перейти в: