eXTracted INternals

eXTracted INternals
 
ФорумФорум  ЧаВоЧаВо  ПоискПоиск  РегистрацияРегистрация  ПользователиПользователи  ГруппыГруппы  Вход  

Поделиться | 
 

 Понимаем NAND

Предыдущая тема Следующая тема Перейти вниз 
АвторСообщение
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Понимаем NAND   Пт 2 Мар - 16:27

В свое время я читал описание NAND памяти и никак не мог понять как могут совместимы понятия "память" и "последовательный доступ". Мне было понятно как работает RAM, как работает NOR, но вот NAND никак в голове не укладывался. Что же такое NAND память.

Самая близкая аналогия - винчестер, только построеный на флэш памяти. То есть читать с него можно только посекторно. Управление памятью делается через набор регистров. Регистров 3: регистр команд, регистр ввода, регистр вывода.
Регистр команд устанавливает операцию которую надо выполнить. Регистр вывода используется для указания параметров операции, а также для передачи данных, которые надо записать в память. Регистр ввода используется для того чтобы читать ответы от чипа: прочитаные данные, коды ошибок.

Казалось бы так все просто бери документацию по чипам да программируй в свое удовольствие. А фиг вам. Думаю документацию к всяким электронным компонентам пишет не человек, а какой-то робот, у которого какая-то своя удивительная система описания сложными словами простых вещей. В свое время я смотрел на эти мануалы и диву давался как по ним вообще можно что-то понять. Показываю пример того как надо понимать datasheet от MCP KBB0XA300M (чип памяти из samsung sgh-x100). Показываю именно то, что касается Nand памяти, потому что все datasheet'ы о NAND написаны именно таким языком.

Цитата :

The NAND Flash Memory is a 132Mbit(138,412,032 bit) memory organized as 32,768 rows(pages) by 264 columns. Spare 8 columns are located in 256 to 263 column address.

Полный объем Flash памяти: 132 мбит (138412032 бит), т.е. 17301504 байт ~ 16,5 Мбайт.
Память организована в 32768 страниц, т.е. 17301504 / 32768 = 528 байт на страницу. Но упоминается какой-то column? Это так называется минимально адресуемый объем информации "столбец" 528 / 264 = 2. Т.е. размер столбца = 2 байта = 16 бит.
Столбцы 256 - 263 (нумерация с ноля) - резервные. Т.е. в каждой странице из 528 байт есть резервные байты 264-256 = 8 столбцов = 16 байт. Т.е. из 528 байт в странице 16 резервных и 512 доступных для хранения данных.

Цитата :

The memory array is made up of 16 cells that are serially connected like NAND structure.
Память организуется в 16-битные ячейки(столбцы). Доступ к ячейкам памяти последовательный. То есть минимум можно вычитать 16-бит. И читать содержимое страниц придется по 2 байта.

Цитата :

A block consists of the 32 pages formed by one NAND structures, totaling 8,448 NAND structures of 16 cells.
Блок состоит из 32 страниц. Т.е. размер блока 32 * 264 = 8448 ячеек. Т.е. размер блока 8448 * 2 = 16896 байт. Если вычесть резервные получится 16384 байта.

Даже предлагают картинку, от которой типа должно стать все ясно:


Но эта картинка ничего не поясняет, просто повторяет то, что написано в тексте Smile

Цитата :

Program and read operations are executed on a page basis, while erase operation is executed on a block basis. The memory array consists of 1024 blocks, and a block is separately erasable by 8K-word unit. It indicates that the bit by bit erase operation is prohibited on the NAND Flash Memory.
То есть когда вы пишете или читаете - вы можете оперировать страницей. Что в свою очередь значит что вы не можете прочитать/записать меньше или больше чем 512/528 байт за раз (через дробь потому что есть разные режимы чтения). А стирать вы можете только целый блок т.е. строго 16384 байт (8K-word unit).
Вернуться к началу Перейти вниз
Посмотреть профиль
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Re: Понимаем NAND   Пт 2 Мар - 16:28

Дальше в описании идет муть, которая касается апаратной части: какие сигналы на какие ноги чипа слать. Полезный кусок вот:

Цитата :

All commands require one bus cycle except Page Program command and Block Erase command which require two cycles: one cycle for setup and another for execution.
Для выполнения всех команд нужен один цикл. Исключение - команды Page Program и Block Erase которым надо два цикла. То есть почти все команды выполняются сразу после того, как код команды записан в командный регистр NAND памяти, потому что код команды однобайтный. А вот код команд Page Program и Block Erase состоит из двух байт. Соотвественно надо сначала загнать первый байт (первый цикл), а потом второй (второй цикл). Нельзя просто записать 2 байта за раз. Нужно писать по одному байту 2 раза, т.е. сделать 2 цикла.

Цитата :

The 8M word physical space requires 24 addresses, thereby requiring three cycles for byte-level addressing: column address, low row address and high row address, in that order.
Для адресации физического адресного пространства используется 24 линии адреса. Т.е. используется 24-битный адрес. Соотвественно требуется три цикла для того чтобы загнать в регистр вывода каждые 8 бит (т.е. побайтно). Порядок используется следущий: адрес столбца, младший байт адреса страницы, старший байт адреса страницы. То есть если использовать адрес столбца = 0, то оставшиеся 2 байта становятся порядковым номером страницы, которые надо загонять в порядке littleendian. Тоже полезная информация, потому что операции чтения и записи пользуются установкой адреса именно так:
Цитата :

Page Read and Page Program need the same three address cycles following required command input.

Цитата :

In Block Erase operation, however, only two row address cycles are used.
Ну для команды стирания - это интуитивно понятно, что надо только 2 цикла, для указания адреса блока, блоков то совсем мало.

Дальше там идет табличка с кодами команд. Именно их пихают в командный регистр.

Теперь самое интересное: понимание описания команд. Они идут однотипные пожтому приведу пример только одной:
Цитата :

Serial data loading is executed by entering the Serial Data Input command(80h) and three cycle address input and then serial data loading. The bytes except those to be programmed need not to be loaded. The Page Program confirm command(10h) initiates the programming process.

То есть надо записать в командный регистр байт 0x80, потом загнать в регистр вывода адрес страницы так, как я это уже описывал. А потом загнать по два байта всю последовательность байт, которую нужно записать в страницу. И потом записать в командный регистр байт 0x10, чтобы подтвердить запись.

Выглядело бы это примерно вот так.
Код:

unsigned char * pCmdRegister;
unsigned short * pDataOutRegister;
unsigned short * pData;

pCmdRegister[0]=0x80;

pDataOutRegister[0]=0;
pDataOutRegister[0]=PageId & 0xFF;
pDataOutRegister[0]=(PageId >> 8) & 0xFF;

for (int i=0;i<264;i++)
{
  pDataOutRegister[0]=pData[i];
}

pCmdRegister[0]=0x10;

Вот так все просто.

А теперь самое интересное! Как узнать адреса регистров. Из документации - никак. Потому что адреса будут зависеть от того как будет подключен чип к процессору и как он будет сконфигурирован. Даже в прошивке телефона и в RAM-лоадере адреса будут отличаться из-за разной настройки шины. Так для X100 в прошивке используюется адрес 0x1800000, а в RAM-лоадере он уже равен 0x3000000. Остается только подсмотреть Wink

Ну и напоследок о том как расположены регистры.
Можно их ототобразить структурой:
Код:

struct NandRegs
{
unsigned long DataIn;
unsigned long Command;
unsigned long DataOut;
};

То есть если базовый адрес регистров 0x3000000,
pCmdRegister = 0x3000004
pDataOutRegister = 0x3000008
Вернуться к началу Перейти вниз
Посмотреть профиль
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Re: Понимаем NAND   Вт 6 Мар - 7:05

Вот некоторая инфа по тому в какой модели телефонов Samsung какой базовый адрес регистров NAND в режиме RAM-loader'a:
Код:

Model   Nand Base   Page Count
E100   0x3000000   32768
E700   0x3000000   32768
X100   0x3000000   32768
X460   0x3000000   32768
X600   0x3000000   32768
E330   0x4000000   32768
E630   0x4000000   65536
E800   0x4000000   65536
E808   0x4000000   65536
E820   0x4000000   65536
X640   0x4000000   32768
Вернуться к началу Перейти вниз
Посмотреть профиль
Спонсируемый контент




СообщениеТема: Re: Понимаем NAND   

Вернуться к началу Перейти вниз
 
Понимаем NAND
Предыдущая тема Следующая тема Вернуться к началу 
Страница 1 из 1

Права доступа к этому форуму:Вы не можете отвечать на сообщения
eXTracted INternals :: Cтатьи :: Mobile and Embedded-
Перейти: