【篇九】NandFlash 和 iNand存储

本周总结点

  • NandFlash和iNand概念和相关接图
  • NandFlash常见操作流程图分析
  • Nand控制器(SOc角度)
  • iNand介绍
  • iNand/SD卡操作

NandFlash和iNand概念和相关接图

    • Nand和iNand接线图如下


        Nand的型号和命名:K9F2G08
        1:K9F表示厂家是三星公司的,型号是NandFlash系列,2G表示Nand的容量2Gbit(256MB),08表示Nand的数据位是8位的(8根数据线)
    • NandFlash内部结构功能框图如图


        基本信息
            1:Nand是块设备,是一个矩阵式存储器,有一层层的片(页)组成,每一小块组成一页,一小块可以存储一个bit位,
            2:页是Nand访问的最小单元,如图一页的大小是(2KB+ 64B),分为带内数据和带外数据,一个页由两部分存储组成,其中2KB的是带内数据,是我们数据的存储的空间,
               我们平时计算的容量也是值考虑着2KB,64字节的的带外数据不能储存数据,是作为别的附加用途的,如(存储ECC数据,存储坏块标志)
                   > ECC:error correction code,错误校验码,因为nand本身出错(位反转)概率高,(Nand较Nor最大缺点是稳定性)
            3:块是擦除Nand的最小单位,1个块(Block) 等于(2K + 64)B x 64 Pages = (128K + 4K) Bytes
            4:一个设备由多个Block(块)组成
        存储原理分析
            1:Nand芯片中有两部分:Nand存储颗粒 + Nand接口电路, Nand存储颗粒当做仓库来存储二进制位,接口用来管理存储颗粒,提供给外界统一的Nand接口
            2:Nand中的每个单位都有自己的独立地址(地址访问能精确到字节,但是实际是能精确到页),所以一般访问的地址不能随便写,需要以页对齐的,比如2k,4k
            3:Nand读写时地址通过IO线发送的,因为地址有30位,而IO只有8位,所以需要多个cycle才能发送完毕,地址时序图如图所示


            4:每个nand厂商的一个block的几个page是不同的,导致nand组织架构乱,接口时序不同,所以很难兼容,导致升级容量或者换芯片,硬件要从新做,软件从新一直,
              成为最大的问题          
    • Nand的命令码
        1:外部Soc通过Nand控制器来访问Nand,实质就是通过Nand接口,就必须按照Nand接口给Nand发送命令,地址,数据等信息来读写Nand
        2:Nand芯片内部的管理电路本身可以接受外部发送的命令,然后根据命令来读写Nand内容与外部SoC交互,所以我们对Nand进行的操作(擦,读,写)都要有命令,地址,数据的参与才
          能完成,而且必须按照Nand芯片规定的流程来读

NandFlash常见操作流程图分析

     》坏块检查,如图


         1:Flash使用之前需要擦出,Flash擦出后位全部为1,读出来的值即为0xff
         2:检查思路:先将块擦出,然后整块读出,循环检查(Check "FFh or FFFFh")各字节是否为0xff,是则表明不是坏块,不是则表示是坏块,
             并(Create (or update) Invalid Block(s) Table)写入或标记到坏块表,直到循环最后一块结束
         
    》页写操作


        1:写之前已经要先擦出干净,我们编程需要用到写操作,写地址必须块对齐
        2:写过程:Soc通过Nand控制器和Nand芯片完成时序对接,然后按照要求将一页的数据发送给Nand芯片内部的接口电路,接口电路先接收到自己的缓冲区,
           然后再集中写入到Nand芯片的存储区域中,从缓冲区写入到存储系统需要一定时间,这段时间Nand芯片不能再响应Soc发过来的其他命令了,所以SOc要等待nand接口电路状态寄存器状态位标识符(Read Status Register)才会确认写操作结束【Soc不断读取这个状态寄存器】
        3:当写入完成后,有些Nand不稳定,添加了可选ECC校验,ECC校验分为硬件和软件两种方式,如图右边部分为软件方式,
            硬件:Nand控制器提供硬件是ECC(现在比较普片),当我们按照SOc要求,打开ECC生成开关我们写入输入到芯片时,写入数据后,Nand控制器的ECC模块会自动进行计算,生成ECC数据,我们将ecc生成的结果写入到带外数据区即可
            软件:重新读取一遍刚才写入的内容,和写入的数据进行比较是否一致
    》擦除
        1:给定地址必须块地址对齐

Nand控制器(SOc角度)

    作用:nand接口电路和Soc之间通过接口时序来通信,nand接口时序复杂,如果要Soc完全用软件来实现,编程复杂
         解决办法:在SOc内部集成一个Nand控制器(是指就是一块硬件电路,这个硬件完全满足nand接口时序的操作,然后将时序操作寄存器化),然后编程人员不需要关注Nand时序问题了,只需要操作Nand控制器即可, 这是现在的趋势
    框图分析:系统总线连接,通过AHB(高性能总线)连接SFR(特殊功能寄存器),和ECC,NAnd控制器通信,并完成Nand接口时序转换,nFCE,I/O1-7,nRE等和核心板图的接线图
        大致是一一匹配的
    关键点:SFR:编程关键,通过读写SFR来产生Nand接口时序来读写Nand芯片
           Nand接口:硬件接口,用来和Nand芯片的相应引脚进行连接
           ECC生成器
    主要控制器:NFCONF,NFCONT,NFADDR,NFDATA,NFMECCD0&NFMECCD1,NFSECCD,NFSTAT    

 

iNand介绍

  •  iNand/eMMC/SDCard/MMCCard的关联
        》MMC卡出现的最早,卡片式结构,按照MMC协议设计,(相较于NandFlash芯片来说,MMC卡2个优势,第一是卡片化,偏于拆装,第二是统一了协议接口,兼容性好)
        》SD卡出现后,兼容MMC协议,较MMC有一些改进,如容量,读写速率,写保护
        》iNand、eMMC是在SD卡基础上发展起来,将SD卡芯片化,
        》iNandh和eMMC关联:eMMC是协议,iNand是符合eMMC协议的一种芯片系列名称
    iNand/eMMC 和 NandFlash的区别
        》iNand内部也是有存系统和接口电路构成(和Nand结构相似,不同之处在于接口电路功能不同)
        》iNand接口电路复杂,功能很健全:如
            1:提供emmC接口协议,和SoC和eMMC接口控制器通信对接
            2:提供块的ECC校验相关逻辑,也就是说iNand本身自己完成存储系统的ECC功能,SoC使用iNand时自己不用写代码来进行ECC相关的操作,简化编程
            3:iNand使用MCL Nand颗粒,性价比高(Nandflash分两种:SLC和MLC,SLC稳定,容量小,价格高,MCL容易出错,容量大,价格低)
            4:iNand接口电路提供cache机制,所以操作速度很快
    iNand/eMMC 和 SD卡物理接口对比,接线图如
        》210芯片本身支持4通道SD/MMC,在210中实际上SD/MMC0通道接了iNand芯片,而SD/MMC2接了SD卡
        》对比iNand和SD卡接线,发现这两个接线几乎一样,唯一区别是SD卡IO线有4根,而iNand的IO线有8根
  •         》总结:实际操作iNand芯片和SD卡几乎是一样的(物理接口一样,软件操作协议一样)

iNand/SD卡操作

    》硬件接口:DATA,CLK(设置时钟),CMD(用来传输命令)
    》命令响应的操作模式:命令都是SOc发给SD卡的,卡只管接受,不会发送给SoC的
        • 命令:命令是启动一项操作的令牌。命令可以从主机发送到一张卡 (寻址命令)或发送到连接的所有卡(广播命令)。命令在 CMD 线上串 行传输。
        • 响应:响应是从被寻址的卡或(同时)从所有连接的卡发送到主机, 作为对接收到的命令的回答的令牌。响应在 CMD 线上串行传输。
        • 数据:数据可以从卡发送到主机或者相反。数据通过数据线传输。
        • 命令操作模式:SD协议实现定义了很多标准命令(cmd0,cmd1),每个命令都有它的作用和使用条件和对应的响应,sd卡工作时就是一个个命令的周期组合起来的,在一个
            周期类,主机先发送cmd给SD卡,然后SD卡解析这个命令并且执行这个命令,然后SD卡根据结果回发给主机SoC一个响应,标准的命令+响应周期中,主机发完一个命令后
            应该等待SD卡的响应而不是接着发下一条命令
        • SD卡内部控制器:这个控制器类似一个单片机,它的程序功能是通过CMD线接受外部主机Soc发给SD卡的命令码,然后执行这个命令并且回发响应给主机SoC,这个单片机
            处理命令及回响应遵循的就是SD协议,这个单片机可以同时控制SD卡内部的存储单元和读写存储单元
    》SD卡寄存器(注意,不是SOc的)        
        • 和多外部芯片像SD卡一样,都有内置寄存器,这些寄存器可以按照一定的规则访问,可以得知一些芯片信息,
        • RCA(relative address)相对地址寄存器,我们访问SD卡时,实际上SD卡内部每个单元的地址没有绝对数字,都是使用的相对地址 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源14

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值