历史上的今天
今天是:2025年03月05日(星期三)
2020年03月05日 | 【ARM裸板】Nand Flash基础与时序分析
2020-03-05 来源:eefocus
1.硬件知识

1.1 如何传输地址信号?
DATA0 ~ DATA7上既传输数据,又传输地址(复用)
ALE (Address Lock Enable)地址锁存允许信号
当ALE = 1时,传输地址
当ALE = 0时,传输数据
1.2 如何传输命令?
命令表

由NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令
DATA0 ~ DATA7上既传输数据,又传输地址,也传输命令
CLE (Command Lock Enable)地址锁存允许信号
当ALE = 1时,传输地址
当CLE = 1时,传输命令
当ALE = 0 & CLE = 0时,传输数据
1.3.NAND、NOR、SDRAM、DM900数据总线,如何互不干扰?
这些设备,访问之前必须通过片选CS引脚“选中”,没有选中芯片不会工作
1.4 给NAND烧写,如何判断烧写完成?
通过状态引脚RnB来判断:
当高电平表示就绪(空闲)
当低电平表示正忙
2.如何操作NAND
发送命令
发送地址
发出数据/读数据
NAND FLASH需要复杂的流程才能进行操作,由于S3C2440中有NAND FLASH控制器,只需要向相应的寄存器写入或读出数据即可,如下表
操作 NAND FLASH S3C2440
发命令 CS选中芯片
CLE设置为高电平
在DATA0~DATA7上输出命令值
发出一个写脉冲 NFCMMD=命令值
发地址 CS选中芯片
ALE设置为高电平
在DATA0~DATA7上输出命令值
发出一个写脉冲 NFADDR=地址值
发数据 CS选中芯片
CLE、ALE设置为低电平
在DATA0~DATA7上输出命令值
发出一个写脉冲 NFDATA=数据值
读数据 CS选中芯片
发出读脉冲
读DATA0~DATA7的数据 val=NFDATA

2.1 读ID

选中:NFCONT寄存器bit1设为0

发出命令90H:NFCMMD=0x90
发出地址00H:NFADDR=0x00
读数据得到ECH:val=NFDATA
读数据得到Device Code:val=NFDATA
退出读ID的状态(复位):NFCMMD=0xFF
2.2 读内容


选中芯片: NFCONT寄存器bit1设为0
发出命令90H:NFCMMD=0x00
发出5个字节的地址位
for(i = 0;i<5;i++)
{
NFADDR = 0x00;
}
发出命令17H:NFCMMD=0x17
读数据:val=NFDATA
退出读状态(复位):NFCMMD=0xFF
3.NAND初始化
初始化主控芯片NAND FLASH控制器
3.1 时序
不同NAND芯片,操作时序不同
NAND FLASH命令锁存周期图(时间参数由“时间特性表”可以得到)

NAND FLASH时间特性表

由上两图分析可得,S3C2440 NAND FLASH控制器时序时间
TACLS最小等于0ns;TWRPH0最小等于12ns;TWRPH1最小等于5ns

再由上图得到的结论:TACLS最小等于0ns;TWRPH0最小等于12ns;TWRPH1最小等于5ns

分别得到寄存器的值(如上图)
得到几条关键的信息:
1.CLE、ALE、WE信号可以同时发出
2.WE信号的持续时间(tWP)最小为12ns
3.WE信号释放后,ALE和CLE信号释放的最小时间为5ns
#define TACLS 0
#define TWRPH0 1
#define TWRPH1 0 //为了方便理解,时间定义为宏
/* 设置nand 时序 */
NFCONF = (TACLS<<12) | (TWRPH0<<8) | (TWRPH1<<4);
3.2 注意NAND是8位的
注意:因为这里的Nand Falsh的位宽是8位的,因此地址,命令、数据、状态 的读写只能以8位形式,因此需要重新设置一下读写的字节数:

3.3 NAND控制器使能、初始化ECC

1.NAND控制器使能
2.先禁止片选,避免误操作
3.初始化ECC编码器
/* 使能NAND FLASH控制器、禁止片选、初始化ECC */
NFCONT = (1<<4) | (1<<1) | (1<<0);
史海拾趣
|
在读startup.s的代码时碰到几句像下边的语句 add r0, pc, #MEMCTRLTAB - (. + 8) add r11, pc, #g_oalAddressTable - (. + 8) 这里边的(. + 8)是 ...… 查看全部问答> |
|
因為沒有GPIB接口的線,所以我用RS232線代替 MSComm1.Settings = \"9600,n,7,1\" If MSComm1.PortOpen True Then MSComm1.PortOpen = True End If MSComm1.Output =\"*RST\" strinput = MSComm1.Input T ...… 查看全部问答> |
|
兄弟们,推荐一款\"IC刷卡模块\",能接在s3c2440开发板(预装WinCE5.0),即ARM9做控制。 1. IC刷卡模块一般用什么接口与s3c2440开发板连接; 2. 请给出产品连接或产品名; 3. 哪位兄才做过刷卡考勤的,能否给点思路或资料(重分)。 谢谢!… 查看全部问答> |
|
之前学习51的基础(如果是指熟悉寄存器和基本编程的话),那算是差不多了。 于是开始正儿八经考虑选一款什么芯片用。 前不久让MSP430刺激了,可是这玩意不好弄,价格也贵。而且不熟。 然后调转枪头,看51,知道了很强大的C8051F,可是,它貌似也 ...… 查看全部问答> |
|
选择QEMU是因为QEMU开源、比较完备,支持的种类多,开发社区也活跃而用QEMU来调试一些东西也非常方便。如何编译最新版的QEMU(当前是0.14.0 rc1)下载QEMU 0.14.0 rc1版本后,如果是在linux下,按照通常的源程序,./configure --target-list=arm-so ...… 查看全部问答> |
|
今天面试闹的一个让我苦笑不得的大笑话,老总,问我什么是TTL电平,什么是CMOS电平,它们有什么区别? 我紧张到考都不用考虑就说:TTL就是0和1;当时老总笑了,我回答过后才发现自己才胡扯,真的弄的我苦笑不得呀,这是最基本的,平常没注意这些 ...… 查看全部问答> |
|
迅雷下载地址: http://downloads.ti.com/download ... baf395a2d4f99e5d518… 查看全部问答> |




