ARM学习笔记--NorFlash控制器
http://blog.ednchina.com/lstzixing/1976771/Message.aspx
1.1? SST25VF080B 简介 1.1.1? 主要特性 关键点:容量、速度(时钟速度、读写速度)、功耗。 l?容量:8MBit; l?最高SPI时钟频率:50MHz; l?低功耗模式下电流消耗:5uA,正常读模式电流:15mA;低功耗!采用不同的制造技术功耗要低很多。 l?整片擦除:35ms;扇区/块擦除:18ms;字节编程:7us;整片擦除的速度要快很多! 1.2? 系统框图与电路 1.2.1? 系统框图??? 关于内部存储矩阵的访问和存储结构同并行NorFlash的一致,只不过多了个串行接口,用于实现对串行数据的解码。 /home/just/.tencent/qq//AppData/file//sendpix0.jpg 扇区大小4KB,块大小:32/64KB;页大小为字节或字。 1.2.3? 引脚及封装引脚说明: l?SCK、SI、SO、CE?–?SPI接口控制线 l?WP#?--?用于使能状态寄存器中的BPL位,有效时只允许锁定BPL,而不允许解锁BPL。不是说明使能保护!BPL位用于锁定控制扇区保护的相应位。 l?HOLD#?--?用于暂停与SPI的通信,而不需要复位器件; 1.2.4? 典型电路
1.3? 保护机制 ? l?软件写保护:状态寄存器中的BP3—BP0、BPL提供片内块、状态寄存器的写保护。 ? l?硬件保护:WP#引脚—低电平,用于锁定状态寄存位7—BPL。由表2,WP#为高时,可以执行状态寄存器写命令,可随时更改状态寄存器。为低时,只能将BPL置为1,而不能从1置为0,即置1后,状态寄存器将锁定不变。 WP#?àBPL、BP3—BP0 BPLàBP3、BP0 1.4? 编程接口 1.4.1? 状态寄存器状态寄存器用于用于获取FLASH的当前工作状态。 l?BUSY位:指示是否正在编程或擦除操作; l?WEL位:指示器件是否处理可写的状态。RESET状态(0)指示不可写,默认在上电、完成写操作后,器件自行返回到不可写状态,以保护器件不受意外的擦写。因而每次写FLASH前,都必须先清除(写1),以使能器件的写。软件可控写。 l?AAI位:指示器件是否处理地址自动增加模式或者是字节编程模式。 l?BPL位:用于控制BPX是否可写。 l?BPX位:用于控制保护块的范围,属于软件保护,扇区保护如下。 ????????????????????????????????????????? 这里的扇区保护比较简单,更为复杂的扇区保护机制可针对每个扇区进行保护。 1.4.2? 命令接口通信过程中,仅仅只有读ID、读数据、读状态寄存器需要在可保护CS不变而继续写数据。其它的则需要写完后接CS线。 1.5? 通信时序 1.? 单字 SPI 通信时序无论SPI总线空闲时SCK为高或为低,保证在上升沿采样数据,下降沿输出数据。先传送高位,每次传送8位。 2.? 读命令 3.? 快速读模式有可能内部使用了缓冲模式,可在更高的时钟速度(50MHz)下读数据。 4.? 写使能该命令可设置状态寄存器中的WEL位,使得可执行擦除和编程命令。 5.? 写禁能 6.? 字节编程 7.? AAI 编程即自动地址增量的字编程,每个周期写1个字。 在最后,通过WRDI返回来正常模式。在每写完两个字后,需查询害怕状态。 在写字的过程中,有三种方式检测是否完成字编程。其中硬件检测:读SO的状态。可在写AAI命令之前,通过命令配置SO口为RD/BY#状态。或者也可通过读取状态寄存器来检测是否完成写操作。 8.? 4KB 的扇区擦除 9.? 32K 块擦除 10.? 64K 块擦除两条命令必须连续写,不允许被打断?以避免意外写状态寄存器。 l?当WP#为低电平时,BPL只能写1,不可写0.;此时若BPL位为高时,写状态寄存器命令将被忽略。即此时,状态寄存器只能被锁定(写1),而不能再解锁(写0)!锁定后将不能再任意改高保护方式,相当于将当前的保护方式给固定下来! l?而若WP#为高电平,BPL位失效,状态寄存器不再被锁定,此时BPL、BPX可被更改。BPL位可设置为1,也可设置为0。可任意更改保护方式。 WP#的作用,锁定BPL为1。一旦BPL锁定为1,则BPX将不可再更改,即软件保护将被锁定。当WP#无效时,BPL可随时、任意更改,同时更改软件保护。 14.? JEDEC ?Read-ID获取SST制造商的ID和SST?FLASH器件的ID。 1.6? 驱动设计驱动框架如下图: 算法编写原则: (1)?可以为每一种SPI?Flash针对性的写一份驱动源码,但是当更换Flash时,需要修改的地方很多;当系统中有多个设备时,显示这不够用,因而最好的方法是实现面向对像的封装,将与Flash设备相关的信息封装在一个结构体内,具体的算法根据结构体中相关的数据来决定如何访问硬件,做到过程可以不依赖于实际的硬件; (2)?尽量按标准的初始化、读写、关闭、控制接口设计API,这样可统一抽像出相应的结构,也易于使用和理解。留给最终用户调用的API应该尽量的少和易于理解; (3)?SPI?Flash接口为SPI,操作方法与并行接口一致,但其扇区组织类似,从最大到最小区域分为芯片-块-扇区-页。编程算法则也是通过写命令序列的方式,如发送命令字-发送字节-发送数据-查询状态寄存器。保护方式是通过存储器中的一些非易失性的位置0或置1选择性地以扇区或块为保护单位。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |