开始了解之前先整明白一些概念:
SSD 分为前端,中端,后端。这个跟互联网那个叫法没关系,但其实都是抽象出来的概念,如下图所示:

因为是学习NAND flash的知识,所以前端后中端我们暂时不管。先聊一下后端的事情,网上关于NAND flash的文章并不算少,但是对于SSD来讲这些可能不够,因为网上的文章大多数的还是在讲平时一些嵌入式中所使用的少量的NAND flash的场景。而SSD中NAND flash是作为主要的部件,以及这个部件还比较多的情况使用,一旦器件多了,事情也就多了。了解NAND FLASH应该有这样(NAND flash原理->NAND flash的data sheet->单科NAND flash的使用->SSD中的NAND flash使用->SSD中的NAND flash controller)
概念(CH-CE-LUN-Plan-Block-Page):
首先我们对于NAND flash的概念应该就是下面这个图片:

这个一个闪存芯片也叫package/device,一个package呢会有很多的Lun(也叫die),然后公用CE信号线的我们就称之为一个Target(可以理解target=CE)。Lun呢是NAND 最小的执行命令的单元。每一个NAND flash的data sheet会详细介绍一些feature。基本上概念从大到小就是 CH CE Lun Plan Block Page,下面是一个NAND device的组织结构图:

page Register和 cache Register 可以理解为NAND Array到NAND controller的二级缓存,一般情况下他们合为一体只做一级缓存用,然后等到有cache的命令才会将两个Register分开作为两个缓存地带。
package和CE(target),Lun的概念已经描述完了,然后接下来再讲Lun下面的概念,讲之前明确一个SLC/TLC的概念,SLC就是一个cell里面只能存储1bit,TLC的话就是一个cell能存储3bit.现阶段咱们不讲什么cell存储多少bit的概念,先了解一下,一个NAND flash它既可以是SLC,也可以是TLC,只需要在发送读写命令之前发送相应的命令就行(详情见NAND flash的data sheet),那么SLC/TLC mode影响什么呢(不考虑什么retention,pe/cycle)?影响的是一个block中page的数量,SLC基本为TLC的1/3,如图所示:

上面的图都是为LUN的逻辑结构图,也就是一个Lun中大概有这么些个概念,Lun下面可能有几个plan组成,一个plan有很多个block组成。一个block有很多个page组成。
上面讲了NANDflash中存在的逻辑概念(页,块等),那么应该对一个NAND flash已经有一定的认识,接下来要明白的是,NAND的读写单元为一个page,擦除单元为一个block。按照这种特性如果你是一个使用NAND flash的人会怎么做?
为了在NAND flash上存储数据,那么就得知道每一个位置的地址,要不然数据瞎存也没有用,要记录每一笔数据存在哪一个位置。地址的组成由行地址,列地址组成,这里要是有问题为什么做成行地址和列地址,可以想一下单片机中的矩阵键盘。行地址(Lun+Block(block的最低为plane)+page),列地址就是每个page里面的offset了。CH和CE是物理上的信号就不用在地址里面了。下面是发送地址的顺序,列地址的低8位、列地址的高8位、行(页)地址的07位、行(页)地址的815位和行(页)地址的15~23位

闪存存在的限制:
1.坏块
2.读/写干扰
3.存储单元之前的耦合
4.电荷泄漏
5.寿命

从SSD角度学习NAND Flash(一)相关推荐

  1. NUC972 Linux学习 NAND FLASH 制作系统

    设备:NUC972DF61YC 使用的虚拟机环境:官方提供的NUC972DF61YC - Nuvoton 板载NAND FLASH,前期主要学习怎么uboot.ubootspl.uimage.env烧 ...

  2. 全面理解SSD和NAND Flash

    Flash Memory又叫做闪存,是一种非易失性存储器.非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解). 总体思路 1.NAND Flash的用途. 2.NAND Flash ...

  3. linux下nand flash驱动工作原理,Linux下Nand Flash 驱动代码分析

    随着越来越多的平台支持从Nand Flash 中启动,掌握Nand Flash 的驱动编写有着重要的现实意义,由于内核已经完成了大部分的工作,实际工作中大部分工程师对Nand Flash 驱动只是简单 ...

  4. 三星K9F1G08U0E(128MB,NAND FLASH) STM32平台驱动程序(模拟时序)

    STM32平台下模拟时序驱动K9F1G08U0E,主要目的为了解.学习NAND FLASH的功能特性,没有使用STM32的FSMC(火龙开发板硬件为模拟时序驱动),纯粹自娱自乐,如对你有帮助,不胜荣幸 ...

  5. NAND Flash SSD 是如何生产出来的?

    NAND Flash是一种非易失性随机访问存储介质,基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁存电荷,电荷被储存在浮栅中,它们在无电源供应的情况下仍然可以保持.关于NAND Fla ...

  6. nand flash驱动调试学习

    nand flash基础知识 nand flash上为什么只有地址线.如何传输数据和命令: 地址,数据,命令是复用的.使用ALE,CLE来进行区分的 通过RnB引脚来区分数据操作是否完成 nand f ...

  7. NAND FLASH学习笔记之nand flash基础(一)

    我入职以来接触的第一个实践内容就是MTD下的NAND FLASH的驱动,下面我将从nand flash的基础和驱动程序两个方面来探讨该知识点,同时最后我会把自己的 动手实验也展示出来,我学习是基于jz ...

  8. EEPROM,NOR Flash,NAND Flash,eMMC,UFS,SSD分别和主要参数及特性

    EEPROM.NOR Flash.NAND Flash.eMMC.UFS.SSD都是非易失性存储器,但它们在架构.存储容量.读写速度.功耗.价格等方面存在不同,具体如下: EEPROM:EEPROM( ...

  9. smc K9F1208U0M 读写操作 续(s3c2410 nand flash 学习)

    首先查看芯片文档,s3c2410 用户手册.需要了解的资料有: 1.用户手册中关于NAND FLASH 操作的一章,详细相关寄存器的作用. 2.芯片文档:命令,地址,读写流程等. 用户手册上的寄存器的 ...

最新文章

  1. Android View框架的measure机制
  2. python用tsne降维图像_python代码实现TSNE降维数据可视化教程
  3. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task2:数据扩增方法
  4. 汉字乱码_彻底搞懂这烦人的编码与乱码!
  5. 程序员新人怎样在复杂代码中找 bug?
  6. C++ puts函数 打印字符串很方便
  7. php5向下兼容php4吗,PHP5与PHP4的区别小议
  8. 2014/08/31 Zushi
  9. 从事计算机专业的人职业道德,计算机专业技术人员职业道德建设研究
  10. 腾讯校招都会问些什么?| 五面腾讯(Java岗)经历分享
  11. Qt中文编程遇C2001错误,提示“常量中有换行符”
  12. IDEA美化主题插件Xcode Dark theme Material Theme UI插件保姆级教程
  13. mybatis一级缓存,二级缓存的开启、关闭、清除及使用说明
  14. 行无疆靠谱讲述拼多多推广方法有哪些?
  15. 培训班出来的程序员怎么就不行了?
  16. java tapestry_Java Web开发的轻便架构Tapestry5---简介
  17. SAP 批导长文本字段自动和手动换行
  18. K3S - 轻量级Kubernetes集群
  19. OSChina 周一乱弹 —— 温柔的人应该这样
  20. 单片机嵌入式操作系统内核

热门文章

  1. 用户管理“明星”工具——在线客服系统
  2. 2019年安徽省大学生网络攻防赛赛前培训——Day1
  3. 随机森林用matlab实现,matlab实现随机森林
  4. 微信怎样开通账户升级服务器,微信支付商户账户升级常见问题
  5. GTS、GCK,GSR全称
  6. ASM安装和sqlplus管理
  7. 单反相机镜头的ldquo;三大纪律,八项注意rdquo;
  8. PHP生成带图片的Excel
  9. nvcc编译器之GPU代码编译(chapter 5)
  10. 通读c++ primer