本文主要是介绍嵌入式学习笔记(45) NandFlash的接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
9.1.1 Nand的型号与命名
(1)K9F2G08:K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit(256MB)。08表示Nand是8位的(数据线有8根)。
(2)Nand命名中可以看出,厂家、系列型号、容量大小、数据位数
9.1.2 Nand的数据位
(1)Nand有8位数据位的,也有16位数据位的。做电路时/写软件时应该根据自己实际采购的Nand的位数来设计电路/写软件。
(2)有8位数据位,说明Nand是并行接口的(8/16位)。
(3)Nand的数据线上传递的不一定全部都是数据,也有可能有命令、地址等。
9.1.3 Nand的功能框图
(1)Nand的结构可以看成是一个矩阵式存储器。其中被分成一个一个的小块,每一小块可以存储一个bit位,然后彼此以一定单位组合成整个Nand。
(2)Nand中可以被单次访问的最小单元(就是说对Nand进行一次读写至少要读写这么多,或者是这么多的整数倍)叫做Page(页),在K9F2G08芯片中,Page的大小为2KB+64B。也就是说我们要读写K9F2G08,每次至少要读写2KB或者n * 2KB,即使我们只是想要读写其中的一个字节。这就是我们说的典型的块设备(现在有些块设备为了方便一种,提供了random read模式,是可以只读写1个字节)。
(3)页往上还有一个Block(块)的概念。1个块等于若干个页(譬如在啊K9F2G08中1个块等于64页)。
(4)块往上就是整个Nand芯片了,叫做Device。一个Device是若干个Block,譬如K9F2G08一个Device有2048个Block。所以整个Device的大小就是2048*63*2K = 256MB。
(5)块设备分page、分block的有什么意义?首先要明白,块设备不能完全按字节访问而必须块访问是物理上的限制,而不是人为设置的障碍。其次,Page和Block各有各的意义。譬如Nand中:Page是读写Nand的最小单位;Block是擦除Nand的最小单位。(这些规则都是Nand的物理原理和限制要求的,不是谁想要这样的,所以对软件来说只能想办法适应硬件,而不是超越硬件)。
(6)Nand芯片中主要包含2部分:Nand存储颗粒Nand接口电路。存储颗粒就是村翠的Nand原理的存储单元,类似于仓库;Nand接口电路是用来管理存储颗粒,并且给外界提供一个统一的Nand接口规格的访问接口的。
(7)Nand中有多个存储单元,每个单元都有自己的地址(地址是精确到字节的)。所以Nand是地址编排精确到字节,但是实际读写却只能精确到页(所以Nand的很多操作要求给的地址是页对齐的,譬如2K、4K、512K等这样的地址,不能给3K这样的地址)。Nand读写时地址传递是通过IO线发送的,因为地址有30位而IO只有8位,所以需要多个cycle才能发送完毕。一般的Nand都是4cycle或者5cycle发送地址(从这里把Nand分为了4cycle Nand和5cycle Nand)。
总结:Nand芯片内部有存储空间,并且有电路来管理这些存储空间,向外部提供统一的Nand接口的访问规则,然后外部的SoC可以使用Nand接口时序来读写这个Nand存储芯片。Nand接口是一种公用接口,是一种标准,理论上来说外部SoC可以直接模拟Nand接口来读写Nand芯片,但是实际上因为Nand接口对时序要求非常严格,而且时序很复杂,所以一般的SoC都是通过专用的硬件的Nand控制器(这些控制器一般是作为SoC内部外设来存在的)来操控Nand芯片的。
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区输入“嵌入式”,即可0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
这篇关于嵌入式学习笔记(45) NandFlash的接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!