STM32通信协议SPI(二):W25Q64模块简介与应用

1.W25Q64

W25Q64是一种低成本,小型化,非易失存储器(掉电不丢失)。

常用于数据存储,字库存储,固件库程序存储。

存储器分为易失存储器(SRAM,DRAM)与非易失存储器 (Flash,E2PROM)。

W25Q64的存储介质:Flash;时钟频率高:80MHz以上;存储容量大:W25Q64为64Mbit。

2.引脚定义

3.芯片框图

(1)Flash的空间划分

24位地址空间,最大寻址范围为16MB,第一个地址为0x0000h(h代表16进制),而W25Q64只有8MB,只用了一半,排到最后一个地址就是0x7FFFFF。最后的空间,地址依次增加。

  • 8Mbit的存储单元"蛋糕"分为块(Block),每块为64KB, 那就是分成 8*1024/64=127块;
  •        块内地址的变化规律:每块的起始地址是xx 00 00,结束地址是xx FF FF;

  • 每块又分为扇区(sector),每个扇区占4KB,那就分成64KB/4KB=16个扇区;
  •        扇内地址的变化规律:每扇的起始地址是xx x0 00,结束地址是xx xF FF;

  • 每个扇区又分为页(Page), 每页的占256字节Byte,那就分成4*1024/256Byte=16页;
  •         页地址的变化规律:每页的起始地址是xx xx 00,结束地址是xx xx FF;

    (2)SPI控制逻辑——芯片管理员,执行指令,读写数据

    左边是SPI通信引脚,与主控芯片的SPI通信引脚连接,主控芯片通过SPI通信协议,把指令和数据发给控制逻辑;右边是页地址锁存器与字节地址锁存器,用来指定地址的;

    1. SPI发送3个字节的地址,高位的两个字节对应页地址,进入页地址锁存器;最后一个字节会进入字节地址锁存器;
    2. 页地址通过写保护和行解码来选择操作哪一页,字节地址通过256字节缓存和列解码来进行指定字节的读取操作。
    3. 地址锁存器都有计数器的,地址指针读写后自动加1,实现从指定地址开始连续读写多个字节的目的。

    (3)256字节的页缓存——会对一次性写入的数据量进行限制

    右下角的256字节页缓存区是一个256字节的RAM存储器,数据的读写就是通过这个RAM缓存区来进行的,写入数据先放到缓存区里面,时序结束后芯片再将缓存区的数据复制到Flash里进行永久保存。为什么弄这个缓存区而不是直接往Flash写数据?简单说是因为SPI传输频率高,而Flash的写入需要掉电不丢失,它比较慢,所以弄这个页缓存区来缓存数据,缓存区是RAM,它的速度非常快,可以跟上SPI总线的速度。但这个缓冲区只有256字节,写入的字节数据不能超过256个字节。

    (4)状态寄存器——忙状态,写使能,写保护等

    读写执行流程:时序写完后,芯片慢慢把数据从缓存区转移到flash存储器,所以在写入时序结束后,芯片会进入忙的状态,会有一条线通往状态寄存器BUSY=1,表示芯片忙于“搬砖”,此时芯片不会响应新的时序了。BUSY=0,芯片空闲了,等待响应下个时序读取数据也通过页缓存区进行,看一下电路的状态即可,限制少,响应快。

    4.Flash的读写要求

    (1)写的注意事项

    写入先发送写使能的指令,数据不能覆盖,要先发送擦除指令;擦除按最小单元扇区进行,这样有缺点就是不方便改某个字节,只能通过RAM备份或者一个字节的数据占一个扇区,所以只能通过软件来弥补;然后写入的字节不能超过256字节,不能跨页,跨页的地址会回到首地址,导致地址错乱 。

    (2)读的注意事项

    读比较简单,直接调用读的时序,没有其它注意操作;

    但不能在芯片忙状态的时候读,读完也不会进入忙状态;

    Flash的确有点麻烦,但它容量大价格低,速度相比RAM慢,但在非易失存储器中是非常快的,就像它很酷的名字一样“Flash闪存”,闪电侠哈哈。

    5.芯片手册

    (1)状态寄存器——重点掌握前两位

  • BUSY位 :忙状态时置1,否则=0;
  • WEL位:芯片上电时写使能,WEL=0;或者写使能,再页编程,扇区擦除,写入数据结束后,自动写失能WEL=0,不用手动复位;
  • (2)指令集

  • 写使能:起始+交换字节指令码0x06h
  • 写失能:起始+交换字节指令码0x04h
  • 读ID号:起始+交换字节指令码0X9F+交换3个字节(厂商ID+2个设备ID)
  • 读状态寄存器:起始+交换字节指令码0x05h+状态寄存器7-0位数据
  • 扇区擦除:起始+交换字节指令0x20+3个字节地址A23-A16,A15-A8,A7-A0
  •       一般3个字节地址对齐到扇区的首地址,表示擦除整个扇区。

  • 页编程(写数据):起始+字节指令0x02h+3个字节地址A23-A16,A15-A8,A7-A0+数据D7-D0
  • 读取数据:起始+字节指令码0x03h+3个字节地址A23-A16,A15-A8,A7-A0+数据D7-D0
  •        读取没有页的限制,写数据页编程有页即256字节的限制。

    作者:半重积分

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32通信协议SPI(二):W25Q64模块简介与应用

    发表评论