В свое время я читал описание 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 байта.
Даже предлагают картинку, от которой типа должно стать все ясно:

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

- Цитата :
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).