温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

S5PV210-arm裸机-nandflash与iNand

发布时间:2020-06-19 23:51:28 来源:网络 阅读:385 作者:小溢 栏目:开发技术





Nandflash:

K9F2G08 : K9F表示是三星的Nandflash系列的,2G表示大小为2Gbit(2G*8bit = 256MB),08表示有8位

数据线。

 

一次读写的最小单元是page(页),2kB+64bit 一次操作要操作2KB或者是2KB的整数倍

K9F2G08  页往上的单位是块,一块block等于64page 一页等于2KB,K9F2G08一共有2048个块。

所以它的大小是 2048*64*2KB = 256MB 一块等于64*2KB = 128KB。

block 是擦除nand的最小单位,page是读写的最小单位

nand的地址是精确到以字节为单位的,但是nand本身的单元一次读写是以页为单位的,所以在实际用时

往往我们编写程序时地址只能精确到页的地址。

nand芯片内部有存储颗粒,有接口电路,接口电路是将来和外接通信用,210SOC中内部外设了一个nand控制器接口,这个控制器接口就可以和nand中接口电路进行连接,实现时序上的操作。


不同型号的nand,页的大小,block块的大小,nand的总大小是不一样的。、

在K9F2G08这个nand芯片中,页是2KB,这2KB是带内数据,就是将来真正存储东西的空间,每一页中还有64

字节的带外数据,这64字节中放的是ECC的校验(错误校验码)和坏块标记,这64B在算nand的大小时我们是

不加上的。因为nand在读写的过程中,很有可能会出现位反转的错误,所以有了ECC,并且nand在使用的过程中,很有可能也会出现坏块的。所以也有坏块标记,当有坏块出现的时候,就会在这一个地方标记坏块,将来在访问这个地方的时候,就访问不了了,就会直接跳过这个区域。

nand的操作流程,要参考不同nand的数据手册,看命令码,操作时序,写数据,读数据等。根据这些去进行软件上编写操作。




坏块的检查:

先擦除nand中一块,因为擦除后里面的东西是FFH或者FFFFH(FFH是说明你的nand是8为数据

线的,FFFFH说明你的nand是16微数据线的),擦除后去一次读取里面的值看是否全为1.

如果全都是1则证明没有坏块,接着去擦除下一块,接着读取里面的值,以此类推依次去检查

,如果读出来的值中不是FFH或者FFFFH则说明有坏块,我们首先在进行擦除一次这个块,完了

在去读取一次,如果读出来的还不是FFH或者FFFFH则将这个区域进行一个标志,文件系统中

就会看见这个标记了,文件系统就可以让以后访问这个区域时直接跳过这个区域。

nand的操作: 这些操作在nand的数据手册中都有相关的时序

坏块检查操作:

写页操作:

擦除操作:

读页操作:

注意:在实际工作中,如果不是做生产nand的工作,你就不需要自己看着数据手册,自己把整个

nand的相关代码写出来,只需能把原厂给的代码,结合给的数据手册能对应上,大致能看懂,能

移植到自己的地方取用,并且将一些不好的,没有的代码给去掉即可。

现在大部分的SOC内部都有nand控制器,这个控制器回去帮助我们完成严格的时序要求

因此我们只需要根据数据手册中给的那些操作的顺序进行编写就行了,严格的时序nand控制器

已经为我们做好了。


inand在物理接线上和软件操作上几乎和SD卡一样。可以说inand就是芯片化了的SD卡

SD卡可以说是MMC卡的升级版,SD卡兼容MMC卡。但是MMC卡不兼容SD卡。



SD协议 支持的是SD卡,MMC协议支持的是MMC卡 eMMC协议支持的inand芯片等

SD卡向下兼容MMC卡

SD的工作:SD卡在每一个时刻都属于某一个状态,读状态,写状态,空闲状态等。SOC发送一条命令,如果命令和当前SD卡的状态相符合,SD卡就会有响应,执行相应的操作之后,根据结果切换到相应的状态,SD卡工作时是在不同的状态之间进行切换的。如果SOC发送的命令和SD卡的当前状态不符合,SD卡就会不响应,从这种特性

我们就可以根据SD卡的响应情况去判断SD卡等的型号。执行相应型号的初始化操作

SD卡代码的分析:

首先初始化和SOC SD卡控制器相连接的GPIO,210的GPIO连接到SOC SD卡控制器的引脚是

GPG0 将其引脚设置为SD卡的那个模式,上拉,驱动能力4X,

接着将SD卡控制器的时钟源的来源设置为从SLOCK_EPLL来(在CLK_SRC4寄存器中设置),SOCK_EPLL的源时钟我们设置为96M,相关参数根据数据手册中,官方给的参数去设置EPLL_CON寄存器。

在将SLOCK_EPLL的96MHZ的频率通过设置CLD_DIV寄存器进行2分频,48MHZ的频率作为SD卡控制的时钟。接着将SD卡控制器进行软复位。

接着在给SD卡一个时钟,通过SOC的SD卡控制器中的寄存器,我们设置一个400k的时钟先提供给SD卡,因为我们现在还不知道是什么版本的,不版本的SD卡,时钟是不一样的。

SD卡工作,需要时钟,可是自己本身没有时钟发生单元,所以需要SOC通过SD卡控制器给SD卡一个时钟。所以我们先给SD卡一个低频的时钟,这样我们就可以和SD卡进行通信了(之后的高频率时钟我们在通过代码去

进一步判断这个SD卡到底是什么版本的,根据相应的版本,在给这个SD卡一个对应的时钟。)



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI