NAND FLASH

来源:互联网 发布:js删除数组中某个元素 编辑:程序博客网 时间:2024/05/21 14:04


Nand Flash 是一个存储芯片
Nand Flash 和s3c2440之间只有数据线


怎么传输地址:
1.在DATA0~DATA7上既传输地址又传输数据也传输命令
当ALE为高电平时传输地址


2.从NAND FLASH芯片手册上可知,要操作NAND FLASH需要先发出命令
怎么传命令?
①当ALE为高电平时传输地址
②当CLE为高电平时传输的是命令
③当ALE和CLE都为低电平时传输的是数据


数据线既接到NAND FLASH ,也接到NOR FLASH、SDRAM、DM9000
怎么避免干扰?
要访问这些设备,必须“选中”
没有选中的芯片不会工作,相当于没接一样


假设烧写NAND FLASH, 把命令、地址、数据发给它之后,
NAND FLASH肯定不能瞬间完成烧写的,
怎么判定烧写完成?
通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙

怎么操作NAND FLASH?
1.根据NAND FLASH 芯片手册,一般的过程是:
①发出命令
②发出地址
③发出数据/读数据
NAND FLASH                              S3C2440
发命令        选中芯片 NFCMMD = 命令值
CLE为高电平
在DATA0~DATA7上输出命令信息
发一个写脉冲


发地址        选中芯片 NFADDR = 地址值
ALE为高电平
在DATA0~DATA7上输出地址值
发一个写脉冲


发数据        选中芯片 NFDATA = 数据值
ALE,CLE为高电平
在DATA0~DATA7上输出数据值
发一个写脉冲

读数据        选中芯片 val = NFDATA
发出一个读脉冲
读DATA0~DATA7的数据
用UBOOT 体验NAND FLASH 的操作  (md, mw, b:1byte, w:2byte, l:4byte)
1.读ID
选中 NFCONT的bit1设为0       md.l 0x4E000004 1; mw.l 0x4E000004 1
发出命令0x90 NFCMMD = 0x90           mw.b 0x4E000008 0x90 
发出地址0x00 NFADDR = 0x00mw.b 0x4E00000C 0x00
读数据得到0xEC val = NFDATA            md.b 0x4E000010 1  
读数据得到device code val = NFDATAmd.b 0x4E000010 1 
退出读ID的状态                                          MFCMMD = 0xff           mw.b 0x4E000008 0xff


2.读内容:读0地址内的数据
使用UBOOT命令:
nand dump 0


===========================================================
测试:
1.make menuconfig 去掉内核自带的NAND FLASH驱动
Device Drivers
Memory Techonology Device (MTD) Support
Nand Flash support for s3c2410/2440 soc    (设为N,去掉)

-----------------------------------------------------------
2.make uImage
cp arch/arm/boot/uImage /work/nfs_root/uImage_nonand
使用新内核启动,并使用NFS作为根文件系统
3.insmod s3c_nand.ko
4.格式化(参考下面编译工具)
#flash eraseall /dev/mtd3          //yaffs
5.挂接          (取消挂接 umount /mnt)
mount -t yaffs /dev/mtdblock3 /mnt
6.在/mnt目录下创建文件  
mkdir test
cd test/
vi  1.txt
umount /mnt
重启开发板
①insmod s3c_nand.ko
②挂接 mount -t yaffs /dev/mtdblock3 /mnt
cd /mnt
ls
cat 1.txt


在linux下解压 
tar xjf mtd-utils-05.07.23.tar.bz2
cd mtd-utils-05.07.23/
ls
cd util
ls
修改vi Makefile
#CROSS=arm-linux-
改为CROSS=arm-linux-
make
cp flash_erase flash_erase /work/nfs_root/first_fs/bin/

原创粉丝点击