FLASH学习,Flash 简介 Nor & Nand flash的比较 Nor的使用 Nand的使用 Spi原理和应用 hengjian 2011.1.5,一 Flash简介,闪存是一种非易失性存储器,即断电数据也不会丢失 Flash内部以页为最小单位读取数据 以块为单位擦除,页(Page),2Gb以下容量的NAND,一般为512字节或者528字节(512字节的数据+16字节的数据校验),类似于硬盘上的一个扇区 2Gb以上容量的NAND型闪存则将页容量扩大到(2048+64)字节 Nand以页为最小单位读数据,块(Block),由多个页构成,一般每个块包含32个512字节的页,容量16KB 大容量flash采用2KB页时,则每个块包含64个页,容量128KB Flash 以块为单位擦除 注:不同芯片页和块的大小不一定相同,此处为一般值,常用 flash,NAND FLASH 主要用于储存数据 NOR FLASH主要用于储存代码 SPI FLASH 容量小,串口通信,价格便宜,只需四根线就可以完成通信,外观识别,nand flash 一般外观标注有XXG或者 XXU,表示的是容量为XX位,除以8之 后得到容量大小,右图中nand flash容 量为8Gb/8=1G,即该flash容量为1G 除此之外一般为nor flash 注:通过这种方法识别并不十分准确, 只能做粗略的区分,很多厂家标注不同, 具体可查看datasheet,或者通过软件识别,软件识别,5225 nand flash,602 Nor flash,852 Spi flash,二 Nor和nand的对比,容量 XIP芯片内执行 速度 性能 其他,容量,Nor flash :采用完全总线结构,拥有地址线和数据线 ,接口同ram相同 Nand flash:采用io口总线结构,地址和数据线都通过8个io口读取 思考 为什么 nor容量没有nand容量大,容量,Flash的容量是根据地址线的长度而定,比如有20根地址线,那么该flash的容量大小为2^20=1M字节(有些资料说容量为8Mb,是指内部存储区共8Mb位) Nor的地址是固定的,因此容量大小决定于地址线数目 Nand的地址线是通过io口传输,一次传输8位,一个完整的地址通过多次传输完成。
XIP,eXecute In Place,即芯片内执行,指应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中 flash内执行是指nor flash 不需要初始化,可以直接在flash内执行代码但往往只执行部分代码,比如初始化RAM. Nand flash 无法线性寻址,一次只能读取一页(512/528字节数据),因此不支持片内执行,速度,(一)擦除速度 NAND器件是以8~32KB的块进行的,只需直接写入命令即可,执行相同的操作最多只需要4ms NOR器件时是以64~128KB的块进行的,在进行擦除前先要将目标块内所有的位都写为0 执行一个写入/擦除操作的时间为5s,速度,(二)写速度 NAND以页或者块为单位写,速度较快 NOR以则以字节为单位写,速度较慢,速度,(三)读速度 NAND以页为单位读,速度较快,但需要读较小文件时需要将整个页读取 NOR以则以字节为单位写,速度块,对于小文件,可直接通过地址线,定位读取,性能,Nor 位寻址,不易出错,一般用于存储代码和重要数据 Nand 块操作,块中某一位出错,则可能影响整个块因此nand内部一般都有坏块管理功能,能自动屏蔽坏块,一般用于存储数据,数据和代码的区别,代码:cpu的指令,运行中必要的数据,要求不能出错,若其中某一重要位发生翻转,可能引起系统崩溃 数据:用户存放的一些资料,数据。
如视屏,音乐,文档等,若某位发生翻转,不会引起系统整体出错其他,生命周期 nand比nor长 可擦出次数nand比nor长 易用性nor比nand简单 价格nand比nor便宜,,三 Nor使用,同RAM,由总线发出地址信号,数据线读取数据 直接使用,无需专门控制器,四 Nand 使用,Nand只有8根I/O线,(也有很少部分使用16根io口)所有的命令,地址和数据都通过这8根io线传输 CLE命令锁存使能 ALE地址锁存使能 #CE芯片使能 #WE写使能 #RE读使能 #WP写保护 R/#B就绪/忙碌信号,Nand总体时序,1 cpu发出命令 2 cpu发出地址 3 flash根据命令读写数据 4 cpu检查flash所处的状态,忙/闲,Nand Flash命令,1. Read 1: 功能:表示将要读取Nand flash存储空间中一个页的前半部分,并且将内置指针定位到前半部分的第一个字节 命令代码:00h 2. Read 2: 功能:表示将要读取Nand flash存储空间中一个页的后半部分,并且将内置指针定位到后半部分的第一个字节 命令代码:01h 3. Read ID: 功能:读取Nand flash芯片的ID号 命令代码:90h,Nand Flash命令,4. Reset: 功能:重启芯片。
命令代码:FFh 5. Page Program: 功能:对页进行编程命令, 用于写操作 命令代码:首先写入00h(A区)/01h(B区)/05h(C区), 表示写入那个区; 再写入80h开始编程模式(写入模式),接 下来写入地址和数据; 最后写入10h表示编程结束. 6. Block Erase 功能:块擦除命令 命令代码:首先写入60h进入擦写模式,然后输入块地址; 接下来写入D0h, 表示擦写结束. 7. Read Status 功能:读取内部状态寄存器值命令 命令代码:70h,cpu发出地址(寻址),第0位开始分四次通过I/O0-I/O7进行传送,并进行片内寻址 0-7位:字节在上半部、下半部偏移地址 8位:值为0代表对某一页前256个字节进行寻址 值为1代表对一页内后256个字节进行寻址 (由命令00h/01h决定) 9-13位:对页进行寻址(第几页) 14- ~ 位:对块进行寻址(第几块),根据命令读写数据,通过io口,一次传输相应个字节 某页的上半字节 256字节 某页的下半字节 256 字节 某页的校验区 16字节 多个页,cpu检查flash状态,读状态命令 70h (用于一次操作一个页) 读多层状态命令71h (用于一次操作多个页) cpu发出读状态命令之后等待flash返回的信息,根据返回信息来读取flash当前状态,Io引脚对应flash状态,0-总标志 1-plane0 2-plane1 3-plane2 4-plane3 5-保留 6-设备状态 7-写保护状态 返回0表示成功 (闲) 返回1表示失败 (忙),示例,有一nand flash,上面标注K9F1208UOM要从32MB处读取半页的数据,该如何操作?,解答,1)K9F1208UOM,资料查询 得到该芯片容量528Mb(软件 检测容量512Mb,64M), 131072行(页),528列 (字节,即每页512+16字节) 2)此处32M为数据区,因此 不能将校验区计算在内,解答,3)步骤 00h(读前半字节命令)—发出00h(32M处前半页起始地址)---依次发出 10h-00h-0Xh(32M处的列地址1000,分三次发送,最后一次只有0有效)---检测R/nB引脚,确定芯片是否准备好数据,Spi总线,SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
SPI总线接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,模式,一主一从 一主多从,Spi时序,SPI时序很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换 上升沿发送、下降沿接收、高位先发送 在经过8个时钟脉冲以后,主从两个寄存器的内容互相交换一次这样就完成里一个SPI时序谢谢,,。