在分析uboot,里面有关于nor flash的初始化。想了解一下nor flash的驱动方法。
以前只知道nor flash可以像内存一样字节访问。并不太清楚他的擦除与写。
nor flash的容量不是特别大,一般只划分为块,64KB。
一、设备总线操作:
设备总线操作,实施通过内部的命令寄存器,命令寄存器不占用内部的地址空间。命令寄存器会锁存一下数据与地址,命令寄存器作为内部状态机的输入,由状态机实施总线命令。
1、Word/ByteConfiguration
BYTE#管脚决定flash是以字节还是以字输入输出的。1:字节;0字
2、读数据,
命令保持CE#为低、OE#为低。WE为高。
内部的状态机自动进入读书状体,当自动上电、硬件复位后。在读数据的模式下,没有其他命令输入。
3、写命令与命令序列
命令:CE#为低、OE#为高、WR#为低
在Unclock Bypass模式下,可以加快写速度。需要两个周期写一个、而不是4个。
擦除:可以擦除一个块、多个块、正片擦除。
当写入自动选择命令序列时,设备进入自动选择模式。控制器能读取自动选择代码通过寄存器。
4、写与擦除操作状态
在擦除与写操作中,控制器能检测操作状态,通过读状态寄存器。
5、standby mode
当CE# RST#为高电平VCC+-0.3v,进入standbymode。耗电量很小
二命令操作:
读操作默认上电后进入,在擦除、写操作后,也会进入读操作。在自动选择模式与D5为高时,需要一步复位操作。进而进入读操作。
2、自动选择模式:可以读取flash的ID,厂商,设置读取块的保护。退出自动选择需要分为命令。
3、写操作,写操作只能讲1写成0
4、unlock bypass command。
在这种模式下,可以加快写速度。在这种模式下只有两个命令生效:写与退出这个模式
5、chip erase
6、块擦除
7、擦除悬挂与恢复(这种情况一般很少采用,个人理解)
8、状态位:(引用http://blog.sina.com.cn/s/blog_7c0133430101d66p.html)翻译的不错
DQ7:Data# Polling bit,DQ7在编程时的状态变化.
RY/BY#:高电平表示'停当',低电平表示'忙'.
DQ6:轮转位1(Toggle Bit 1).
DQ2:轮转位2(Toggle Bit 2).当某个扇区被选中擦除时,读有效地址(地址都在擦除的扇区范围内)会导致DQ2的轮转.
DQ5: 超时位(Exceeded Timing Limits),当编程或擦除操纵超过了一个特定内部脉冲计数是DQ5=1;这表明操纵失败.当编程时把'0'改为'1'就会导致DQ5=1,由于只有擦除擦做才能把'0'改为'1'.当错误发生后需要执行复位命令(见图1-1)才能返回到读数据状态.
DQ3: (扇区擦除计时位)Sector Erase Timer,只在扇区擦除指令时起作用.当擦除指令真正开始工作是DQ3=1,此时输进的命令(除擦除暂停命令外)都被忽略.DQ3=0,是可以添加附加的扇区用于多扇区擦除.