Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Samsung OneNand Flash, Erase sector implementation 
:(
    Опции темы
Dragon
Дата 8.4.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 10.8.2006
Где: Киев

Репутация: нет
Всего: нет



Хм, в общем... Пишется драйвер оной флеши. Точнее, уже написан. Сверху над, собственно, драйвером находятся несколько уровней абстракции, призванных унифицировать высокоуровневому интерфейсу работу с разными типами storage media. 

В частности, интерфейс желает иметь flat модель памяти - с индексацией записываемых блоков от 0 и до max_value, а также спокойно читать, писать и стирать эти блоки smile

Собственно, здесь и начинаются проблемы smile 
Флеш имеет следующую структуру:
  Sector - 512B (spare area - 16B)
  Page - 4 sectors
  Block - 64 pages
  Core - 1024 blocks
  Device - 1 or 2 cores

Flat модель реализуется просто... А дальше начинаются обычные для NAND флешей проблемы. Read/Write, Read/Write spare area операции доступны для секторов. Перезапись сектора возможна только после стирания. Erase операция доступна только для блоков - по 256 секторов в каждом smile

Кастомер прется и желает чтобы мы использовали reference code его чудесного FTL - используем.

Итак - дальнейшая реализация проста и естественна - берем spare area - там есть около 48 бит свободного пространства (свободного от ECC кодов и т.п.) которое не используется контроллером. Записываем туда условный 32-битный адрес логического блока и 16 бит флагов.

Из этого счастья реально используются только 18 бит для адреса (0х40000 - max_value, в данном случае) и 3 флага - USED, DIRTY, INVALID.
Мы держим в памяти карту соответствия - logical sector - physical sector (которая заполняется при старте устройства, путем считывания spare area's). Erase операция просто помечает сектора как dirty. Когда в блоке становится слишком много dirty секторов, выполняется Purge - которая просто копирует используемые сектора куда-то в другое место, стирает блок и отмечает все его сектора как FREE.

Вот вроде бы и все... Кроме того, что карта выглядит так:
Код

struct LogicalBlock
{
    UINT32 dwPhysicalBlock : 18;
    UINT32 fFlags : 2;
};

/* ... */

LogicalBlock *pBlocksMap;


Для 0x40000 блоков эта конструкция использует ровно 1М SDRAM (из 64) Не думаю, что это прельщает кастомера и всех-всех-всех ;)
С другой стороны - мы используем reference код... Но там флеша была маленькая и это не было проблемой...

Ну, можно конечно сделать что-то вроде:
Код

struct LogicalBlock
{
    UINT8 wPageMSB;
    UINT8 wPageLSB;
    
    UINT8 fSectorAndFlags;
};


Тогда структура будет занимать 3 байта и мы торжественно будем занимать в памяти 786432 байта smile Но это тоже не сильно всех обрадует.

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

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.