Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97404
  • 博文数量: 24
  • 博客积分: 431
  • 博客等级: 一等列兵
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 09:44
文章分类
文章存档

2013年(1)

2012年(23)

分类: 嵌入式

2012-08-28 11:48:30

1.1 SST25VF080B简介 1.1.1 主要特性

关键点:容量、速度(时钟速度、读写速度)、功耗。

容量:8MBit

最高SPI时钟频率:50MHz

低功耗模式下电流消耗:5uA,正常读模式电流:15mA;低功耗!采用不同的制造技术功耗要低很多。

整片擦除:35ms;扇区/块擦除:18ms;字节编程:7us;整片擦除的速度要快很多!

1.2 系统框图与电路 1.2.1 系统框图

    关于内部存储矩阵的访问和存储结构同并行NorFlash的一致,只不过多了个串行接口,用于实现对串行数据的解码。

f908cbd1-8f4c-427c-a120-10e2b99a36d4.jpg

1.2.2 存储组织

扇区大小4KB,块大小:32/64KB;页大小为字节或字。

3b5ed3be-3709-4650-b240-65232320db6e.jpg

1.2.3 引脚及封装

7bfcb528-faec-4e6f-9fa1-b6d50d0d0155.jpg

引脚说明:

SCKSISOCE – SPI接口控制线

WP# -- 用于使能状态寄存器中的BPL位,有效时只允许锁定BPL,而不允许解锁BPL不是说明使能保护!BPL位用于锁定控制扇区保护的相应位

HOLD# -- 用于暂停与SPI的通信,而不需要复位器件;

1.2.4 典型电路

使用STM32F103驱动该器件时,典型的电路如图所示。

7d4ba3d8-0809-472c-89d5-9a429d05ba2d.jpg

注意,WP为低,判定寄存器的锁定功能将启用。但不会太影响片内块的保护。

1.3 保护机制

b73d03bc-1ede-481c-b8b4-25ec0d21d2c4.jpg

  l 软件写保护:状态寄存器中的BP3—BP0BPL提供片内块、状态寄存器的写保护。

  l 硬件保护WP#引脚低电平,用于锁定状态寄存位7—BPL。由表2WP#为高时,可以执行状态寄存器写命令,可随时更改状态寄存器。为低时,只能将BPL置为1,而不能从1置为0,即置1后,状态寄存器将锁定不变。

WP# àBPLBP3—BP0

BPLàBP3BP0

78dbe8b7-8266-451d-bbc7-ad997db56673.jpg

1.4 编程接口 1.4.1 状态寄存器

状态寄存器用于用于获取FLASH的当前工作状态。

ae4f1f2b-ed0a-4e13-87ed-4b4fe15971b5.jpg

BUSY位:指示是否正在编程或擦除操作;

WEL位:指示器件是否处理可写的状态。RESET状态(0)指示不可写,默认在上电、完成写操作后,器件自行返回到不可写状态,以保护器件不受意外的擦写。因而每次写FLASH前,都必须先清除(1),以使能器件的写。软件可控写。

AAI位:指示器件是否处理地址自动增加模式或者是字节编程模式。

BPL位:用于控制BPX是否可写。

BPX位:用于控制保护块的范围,属于软件保护,扇区保护如下。

                                          916285ed-16ee-46e6-95bc-be7e6de3ca09.jpg

这里的扇区保护比较简单,更为复杂的扇区保护机制可针对每个扇区进行保护。

1.4.2 命令接口

通信过程中,仅仅只有读ID、读数据、读状态寄存器需要在可保护CS不变而继续写数据。其它的则需要写完后接CS线。

cf703fe9-2f56-4a34-a275-9e02b6f631a9.jpg

1.5 通信时序 1. 单字SPI通信时序

无论SPI总线空闲时SCK为高或为低,保证在上升沿采样数据,下降沿输出数据。先传送高位,每次传送8位。

5b5e4aa8-2827-4a9d-8aaa-698246c365b3.jpg

2. 读命令

81ce36f2-eaf9-48d8-a32f-4bdfd4e392ed.jpg

3. 快速读模式

有可能内部使用了缓冲模式,可在更高的时钟速度(50MHz下读数据。

57e6ffbf-2702-4255-ae0c-02e7507637ef.jpg

4. 写使能

该命令可设置状态寄存器中的WEL位,使得可执行擦除和编程命令。

7d98eb1f-db2f-4297-b0a3-3c16de7bb647.jpg

5. 写禁能

1463099b-3294-4a4a-a981-432e4a795a3f.jpg

6. 字节编程

eea22af1-623c-4633-8ff8-238ae3bb3617.jpg

7. AAI编程

即自动地址增量的编程,每个周期写1个字。

bdd8b701-619a-4903-aae0-a5aba42b6eb1.jpg

在最后,通过WRDI返回来正常模式。在每写完两个字后,需查询害怕状态。

在写字的过程中,有三种方式检测是否完成字编程。其中硬件检测:读SO的状态。可在写AAI命令之前,通过命令配置SO口为RD/BY#状态。或者也可通过读取状态寄存器来检测是否完成写操作。

ab211f0b-3e3e-443a-9b3c-7d30c8f7d942.jpg

ee6ce252-01d8-4e12-8961-a163ddebb31a.jpg

8. 4KB的扇区擦除

ec41671d-eddc-4cbf-a1e7-f845e0d93f0c.jpg

9. 32K块擦除

438305ca-3e36-4a1e-a99b-160c87082fcd.jpg

10. 64K块擦除


11. 整片擦除

2c68747f-b720-4391-9abf-fe0a120374f7.jpg

12. 读状态寄存器

347abe8c-28c5-46cf-a05d-92037c581eca.jpg

13. 使能写状态寄存器和写状态寄存器

两条命令必须连续写,不允许被打断?以避免意外写状态寄存器。

WP#为低电平时,BPL只能写1,不可写0.;此时BPL位为高时,写状态寄存器命令将被忽略即此时,状态寄存器只能被锁定(1),而不能再解锁(0)锁定后将不能再任意改高保护方式,相当于将当前的保护方式给固定下来!

而若WP#为高电平,BPL位失效,状态寄存器不再被锁定,此时BPLBPX可被更改。BPL位可设置为1,也可设置为0。可任意更改保护方式。

WP#的作用,锁定BPL1。一旦BPL锁定为1,则BPX将不可再更改,即软件保护将被锁定。当WP#无效时,BPL可随时、任意更改,同时更改软件保护。

8c131337-ba12-4b87-93e0-91974822a930.jpg

14. JEDEC Read-ID

获取SST制造商的IDSST FLASH器件的ID

af1e3af4-0b89-4e77-a8e5-04c4c678d8c1.jpg

1.6 驱动设计

驱动框架如下图:

93afb61e-a596-454f-aaec-33482e5ee30a.jpg

算法编写原则:

(1) 可以为每一种SPI Flash针对性的写一份驱动源码,但是当更换Flash时,需要修改的地方很多;当系统中有多个设备时,显示这不够用,因而最好的方法是实现面向对像的封装,将与Flash设备相关的信息封装在一个结构体内,具体的算法根据结构体中相关的数据来决定如何访问硬件,做到过程可以不依赖于实际的硬件;

(2) 尽量按标准的初始化、读写、关闭、控制接口设计API,这样可统一抽像出相应的结构,也易于使用和理解。留给最终用户调用的API应该尽量的少和易于理解;

(3) SPI Flash接口为SPI,操作方法与并行接口致,但其扇区组织类似,从最大到最小区域分为芯片--扇区-页。编程算法则也是通过写命令序列的方式,如发送命令字-发送字节-发送数据-查询状态寄存器。保护方式是通过存储器中的一些非易失性的位置0或置1选择性地以扇区或块为保护单位。

1.7 驱动代码

相关的驱动代码请见附件。

PDF文档:

阅读(1690) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~