在进行Mini2440 uboot移植的时候,我们介绍了Nor Flash相关的硬件知识,当时我们使用的Nor Flash型号为S29AL016D70TF102,大小为2MB。
后来由于开发板的网卡坏了,所以换了一块板子,这块板子芯片型号为SST39VF1601,大小2MB。
一、Nor Flash介绍
NOR FLASH存储器接口标准包含CFI和JEDEC:
- CFI为公共Flash接口(Common Flash Interface),CFI是一个公开的标准的从Flash Memory器件中读取数据的接口。它可以使系统软件查询已安装的Flash Memory器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。利用CFI可以不用修改系统软件就可以用新型的和改进的产品代替旧版本的产品。例如:如果新型的Flash Memory的擦除时间只有旧版本的一半,系统软件只要通过CFI读取新器件的擦除时间等参数,修改一下定时器的时间参数即可。
- JEDEC是由生产厂商们制定的国际性协议,主要为计算机内存制定。JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。工业标准的内存通常指的是符合JEDEC标准的一组内存。
1.1 SST39VF1601
Mini2440开发板就是将2MB的Nor Flash(型号SST39VF1601)焊接在了Bank0上,SST39VF1601这款芯片具有以下性质:
- 扇区擦除能力:统一的2Kword,即4KB;
- 块擦除能力:统一的32Kword,即64KB;
- 与 JEDEC 标准的兼容性;
- CFI(通用闪存接口)兼容;
SST39VF1601支持16位模式;这里我们Mini2440采用的是16位模式,S3C2440的A1~A20连接Nor Flash的A0~A19,SST39VF1601地址线一共20位,数据线一共16位。
需要错位连接的原因是:S3C2440处理器的每个地址对应的是一个字节的数据单元,而16位模式下,Nor Flash的每个地址对应的是一个HALF-WORD(16 bit)的数据单元。
为了保持匹配,所以必须错位连接。这样,从S3C2440处理器发送出来的地址信号的最低位A0对16位Flash来说就被屏蔽掉了。
补充说明:
- 一般来说,ARM处理器内部要设置相应的寄存器,告诉处理器外部扩展的Flash的位宽(8 bit/16 bit/32 bit)。这样,处理器才知道在访问的时候如何从Flash正确的读取数据;
- 有些ARM处理器内部可以设置地址的错位,对于支持软件选择地址错位的处理器,在连接16 bit Flash的时候,硬件上可以不需要把地址线错位;
- 如果处理器支持内部设置地址错位,在实际访问的时候,送出的地址实际上是在MCU内部做了错位处理,其作用是等效于硬件连接上的错位的;
生产厂家以及设备ID:
Address | Data | |
Manufacture‘s ID | 0000H | 00BFH |
Device ID | 0001H | 234BH |
1.2 指令集
以Software ID Entry为例,先向地址“5555”处写入“AA”,再向地址“2AAA”处写 入“55”,接着向地址“5555”处写入“90” ,最后从“0000”地址读到厂家ID“00BF”,从“0001”地址读取到设备ID”234B”。
周期“First”和“Second”是“解锁”,周期“Third”是发出命令。 需要注意的是,以地址”5555″为例,每个地址对应的数据长度为2个字节,对应8位位宽地址5555<<1=AAAA。
以读取软件ID为例,编写代码时序如下:
- 解锁:向地址AAAAH(5555<<1)写入AAH,向地址5554(2AAA<<1)写入55H;
- 命令:向地址AAAAH(5555<<1)写入90H;
- 读地址0x0000得到厂家ID;
- 读地址0x0001得到设备ID
由于Mini2440的A1接到Nor Flash的A0,所以2440发出(5555<<1),Nor Flash才能收到“5555”这个地址;同理,只要是2440发出的地址都需要在Nor Flash的地址基础上<<1。
关于如何对Nor Flash进行读写、擦除,我就简单说一下:
- 读:Nor Flash上电后处于数据读取状态(Reading Array Data)。此状态可以进行正常的读,这和读取SDRAM/SRAM/ROM一样(要是不一样的话,芯片上电后如何从Nor Flash中读取启动代码)。当芯片进入软件ID标识模式,必须通过发出软件ID退出命令来完成退出序列,将设备返回到读取模式。
- 擦除:在完成信息获取后一般就要擦除数据。Nor Flash支持扇区擦除(Sector Erase)、块擦除(Block Erase)和整片擦除(Chip Erase),这3种模式都有对应的命令序列,在完成擦除命令后会自动返回到数据读取状态。
- 编程(写):完成擦除后就需要对芯片进行写入操作也就是编程,这就需要进入编程(Program)状态。在完成编程命令后会自动返回到数据读取状态。注意:编程前一定要先擦除。因为编程只能将’1’改写为’0’,通过擦写可以将数据全部擦写为’1’。
参考文章
[2]Mini2440之uboot移植之实践NOR FLASH支持(二)
原文地址:http://www.cnblogs.com/zyly/p/16801214.html