×
单片机 > 单片机程序设计 > 详情

嵌入式arm学习总结(八)--存储知识-基于MINI244

发布时间:2024-05-21 发布时间:
|

MINI2440 ram:4k , rom:没有

程序运行:sdram ,norflash

程序存放:nandflash,norflash

nandflash和norflash最大区别:norflash可以片上运行程序(并行总线,引脚多),nandflash不能(串行总线,引脚少)

通常linux操作系统存放在nandflash里面


nandflash启动模式:开发板上电时,nandflash控制器把前4K代码复制到2440的内部4ksram中,然后通过硬件机制把2440内部4ksram地址映射到为0的地址开始,程序开始执行这4k代码

这4k代码包含功能:初始化sdram,复制nandflash中的代码到sdram中,然后跳转到sdram中运行


noflash启动模式:norflash也有同样的最前面的4k代码,只不过不需要复制到2440内部4ksram这个过程,因为norflash可以片上执行程序


上面所说的4K代码也就是包含了启动代码

(其实启动代码可以小于4K或大于4K,但当大于4K时拷贝的4k代码里必须包含功能:初始化sdram,复制nandflash中的代码到sdram中,然后跳转到sdram中运行小于4k时复制的4k程序执行完启动代码后会跳转,剩下的空间不执行)


NANDFLASH的相关操作原理:

NANDFLASH的擦除操作

NANDFLASH坏区检测

ID号检测

坏区标识

任意地址区间的读写:以前没有任意读写功能,现在升级了,但实际应用中读没问题,写可能会出错

读写校验


NandFlash的ECC校验过程总结:


写页操作: (8位的nandflash)


在写完一页数据后,硬件会自动产生4个字节的主区ECC,硬件自动存放到rNFMECC0里面,再编程保存(写)到Space区,

此时又会产生2个字节的Space区ECC,硬件自动存放在rNFSECC寄存器的低两字节里面 。再编程保存(写)到Space区,


读页操作: (8位的nandflash)

在读完一页数据后,也会产生四个字节的主区ECC,硬件自动存放到rNFMECC0里面, (等待与之前写数据的时候产生的主区ECC进行比较) 再读取之前保存在Space区的4个字节的主区ECC (mecc0=NF_RDDATA();这时读完操作后又会产生两个字节的Space区的ECC,硬件自动存放在rNFSECC的低两字节里面),放到寄存器rNFMECCD0和rNFMECCD1的bit0--7和bit16--23,放入后硬件会自动和读页操作时产生的主区ECC(放在NFMECC0寄存器里面)进行比较。再读取保存在Space区的两字节的Space区ECC(secc=NF_RDDATA();低2个字节为spare区的ECC值),放到寄存器rNFSECCD的bit0--7和bit16--23,放入后硬件又会自动和读操作时产生的Space区ECC(放在NFSECC寄存器里面的低两字节)进行比较,最后主区ECC、Space区ECC的比较结果可以通过NFESTAT0寄存器 的低四位来进行查询,判断读、写时分别产生的ECC是否相同,如果相同则说明读取数据成功,否则读取失败。


16位的nandflash操作过程与8位相似,只不过16位的nandflash主区ECC为8个字节,存放在rNFMECC0和rNFMECC1两个寄存器里面 Space区ECC有4个字节,也是存在rNFSECC寄存器里面(8位nandflash只用到了低两字节)


具体详情可以参考S3C2440的nandflash控制器部分内容


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯