SPI&W25Q64(精华版)

文章介绍了SPI总线的基本原理,包括其接口定义、工作方式和数据模式。W25Q64是一种128MB的SPIFLASH存储器,适用于存储数据。在SPI通信中,主从设备通过MOSI、MISO、SCK和NSS线进行全双工数据交换。STM32的SPI接口支持多种工作模式和数据传输模式,可以配置为全双工主模式,并且详细说明了NSS引脚的管理。文章还提及了W25Q64的编程方法和相关函数接口,如读ID、编程、擦除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. SPI总线

1.1 W25Q64

1.1 W25Q64简介

W25Q64 是一种具有SPI接口的FlASH存储器,具有32768个可编程页(Page=256B),2048个可擦除扇区(Sector=16*Page),128个可擦除块(Block=16*Sector),容量为128*16*16*256B=8MB(64bit),适用于存储声音、文本和数据(W25X64 数据手册 P1-2、W25Q64 数据手册 P5)。

1.1.2 FLASH 简介

FLASH 存储器即闪存存储器,它属于非易失性存储器。相对于 RAM 而言,它具有断电数据不丢失的特点,相对于ROM 而言它具有操作速度快的特点。市场上的 FLASH 存储器主要有 NOR 和 NAND 两大类(当然还有其他的), NOR 一般用于存储少量的代码,主要用在代码存储介质中,NAND 则是高存储密度数据的理想解决方案,适合于存储数据。FLASH的操作与 ROM 类似,主要有读、写和擦除。

1.1.3 W25Q64 管脚描述
根据 W25Q64 的 SPI 接口管脚描述, W25Q64 作为从设备时 DO(MISO)管脚下降沿输出数据, DIO(MOSI)管脚上升沿采集数据, 因此 SPI 时序模式可为模式 0(CPLO=0,CPHA=0)或模式 3(CPLO=1,CPHA=1)(25X64 数据手册 P3、 P4、 P6)。

1.2 SPI通讯原理

1.2.1 SPI 总线简介

SPI是由Motorola公司推出的一种串行外围设备接口,也是一种串行、同步、全双工的高速总线和通信协议, 采用主从模式架构,支持多从设备应用。在芯片管脚上只占用四根线,节省了芯片的管脚,同时为PCB的布局节省空间,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信接口,如 EEPROM、FLASH、AD 转换器等。

1.2.2 SPI 接口定义

(1)MOSI:主设备输出从设备输入引脚,作为主设备时发送数据,作为从设备时接收数据。
(2)MISO:主设备输入从设备输出引脚,作为主设备时接收数据,作为从设备时发送数据。
(3)SCK: 同步时钟引脚,主设备输出时钟,从设备输入时钟。
(4)NSS: 从设备使能引脚,由主设备控制(NSS的N表示低电平有效)。在点对点的通信中,SPI接口不需要进行寻址操作,在多个从器件的系统中,每个从器件需要独立的使能信号。

 

1.2.3 SPI 总线结构和工作方式

SPI是以主从方式工作的,这种模式通常有一个主设备和一个或多个从设备,各个设备必须使用 SPI 接口连接到SPI总线上。NSS 线是主设备选中从设备的片选线,只有被选中的从设备才能和主设备互相通信,这可以使总线上连接多个设备成为可能。MOSI、MISO、SCK 三根线完成数据的传输,是总线所有设备共享的(图 1)。

1.2.4 SPI 主从系统数据传输的原理

SPI的主从系统主要包含两个移位寄存器和一个主设备时钟发生器。由主设备通过将指定从设备的 NSS 引脚拉低启动一次通讯过程,主设备和从设备将需要发送的数据装入各自的移位寄存器,主设备在 SCK 引脚产生脉冲以实现数据交换,由主设备通过拉高从设备的NSS引脚结束本次通讯。

SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI、SDO则基于此脉冲完成数据传输。因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出(全双工)。
SPI 还是一个数据交换协议:SPI通讯是通过数据交换完成的,主机给从机发送数据的同时,也接收到从机给它的数据。主机从从机读数据时,主机需要发一个无用的数据给从机(实际上是为了给 FLASH 提拱时钟,因为时钟只能由主机产生)。

 

      1 ) SSPBUF(Synchronous Serial Port Buffer)泛指SPI设备里面的内部缓冲区, 一般在物理上是以 FIFO 的形式, 保存传输过程中的临时数据;
    2)SSPSR(Synchronous Serial Port Register)泛指SPI设备里面的移位寄存器(Shift Regitser),它的作用是根据设置好的数据位宽(bit-width)把数据移入或者移出SSPBUF;
      3 )Controller泛指SPI设备里面的控制寄存器, 可以通过配置它们来设置SPI总线的传输模式。
    通常情况下, 我们只需要对上图所描述的四个管脚进行编程即可控制整个SPI 设备之间的数据通信:
    SPI 设备在进行通信的过程中, 主设备和从设备之间会产生一个数据链路回环(Data Loop), 就像上图所画的那样, 通过SDO和SDI管脚, SSPSR 控制数据移入移出SSPBUF, Controller 确定 SPI 总线的通信模式, SCK 传输时钟信号。

1.2.5 SPI 通信的数据模式

在SPI通讯中,SPI 接口的数据输出和数据输入(数据采样)的时间点是在一个时钟周期(SCK 周期)的不同跳变沿发生的。因此,SPI 时序中有时钟极性(CPOL)和时钟相位(CPHA)的概念。
时钟极性定义了总线空闲时时钟线(SCK)的电平状态,CPOL=0定义总线空闲时SCK=0,CPOL=1定义总线空闲时 SCK=1。时钟相位定义数据输入的采样时间点,CPHA=0定义数据采样的时间点在时钟周期的第一个跳变沿,则数据输出的时间是在时钟周期的第二个跳变沿,CPHA=1 定义数据采样的时间点在时钟周期的第二个跳变沿,则数据输出的时间是在时钟周期的第一个跳变沿。根据时钟极性和时钟相位的不同可以有四种组合,因此 SPI 的数据传输模式有四种。模式0:CPLO=0,CPHA=0;模式1:CPLO=0,CPHA=1;模式2:CPLO=1,CPHA=0;模式3:CPLO=1,CPHA=1。

STM32的SPI可以通过配置选择时钟极性和时钟相位,有四种组合,对应有四种数据传输模式。可以通过配置选择数据格式是高位在前还是低位在前,是8位数据帧还是16位数据帧格式。

 

1)空闲状态 SCLK 为低电平,第一个时钟边沿采样数据。
模式0:时钟线空闲为低电平,上升沿读取数据(00)
2)空闲状态 SCLK 为低电平,第二个时钟边沿采样数据。
模式1: 时钟线空闲为低电平,下降沿读取数据(01)
3)空闲状态 SCLK 为高电平,第一个时钟边沿采样数据。
模式2: 时钟线空闲为高电平,下降沿读取数据(10)
4)空闲状态 SCLK 为高电平,第二个时钟边沿采样数据。
模式3:时钟线空闲为高电平,上升沿读取数据(11)
注意: 模式 0 和模式 3 可兼容, 模式 1 和模式 2 可兼容 

1.3 STM32 的 SPI 接口介绍

1.3.1 SPI 接口简介

STM32的SPI是一个增强型的SPI 接口,在大容量和互联型产品上,SPI接口可以配置为支持SPI协议或I2S音频协议(SPI2和SPI3可以配置为I2S功能,SPI1无I2S功能)。SPI接口可以以全双工、半双工、单工方式工作,支持多主配置方式,支持硬件CRC校验等。

注:I2S(Inter-IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。

1.3.2 SPI 接口框图分析

SPI接口主要由波特率发生器、 8/16的移位寄存器及其缓冲器、控制电路和相关寄存器组成(参考手册 P723, 此处只讨论SPI接口的SPI协议)。

1.3.4 SPI 接口的 NSS 管理

这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。从设备的NSS引脚可以由主设备的一个标准I/O引脚来驱动。一旦被使能(SSOE位), NSS引脚也可以作为输出引脚,并在SPI处于主模式时拉低;此时,所有的SPI设备,如果它们的NSS引脚连接到主设备的NSS引脚,则会检测到低电平,如果它们被设置为NSS硬件模式,就会自动进入从设备状态。当配置为主设备、NSS配置为输入引脚(MSTR=1,SSOE=0)时,如果NSS被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式。

有2种NSS模式:
1)软件NSS模式:可以通过设置SPI_CR1寄存器的SSM位来使能这种模式。在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动
2)硬件NSS模式,分两种情况:
─ NSS输出被使能:当STM32F10xxx工作为主SPI,并且NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从SPI设备。当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个硬件失败错误(Hard Fault)。
─ NSS输出被关闭:允许操作于多主环境。

总结:

  • NSS:从器件选择(片选)
  • SSI:
    1. 0->禁止软件从器件管理,就是说不能用程序来选择从机,相当于SPI总线上只能挂载一个从器件。
    2. 1->使能软件从器件管理,可以用代码来选择从器件,把NSS这个SPI的硬件引脚设置为普通IO使用。,这个时候SPI总线可以外接多个从器件,只需要把从机的CS接口接不通IO即可。

1.3.5 SPI 接口的工作模式

STM32 的 SPI 接口可以工作在全双工模式、 半双工模式、 单工模式以及相应的主模式和从模式等(此处只讨论全双工模式下的主模式)。

1.4 W25Q64编程

W25Q64的命令和时序分析(25X64 数据手册 P7-18、 W25Q64 数据手册 P17-48)。

 

1.4.1 SPIFLASH 编程

1. 编程方法:按照不同指令的操作时序编写不同功能的函数, 最终封装出主要的函数接口。

2.主要函数接口

(1)读 ID 函数
(2)页编程函数
(3)扇区擦除函数
(4)块擦除函数
(5)芯片擦除函数
(6)读数据函数
(7)掉电函数
.....

相关函数编程下期见

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值