STM32中的SPI总线介绍

接口/总线/驱动

1116人已加入

描述

SPI总线概述

SPI总线介绍

SPI是由摩托罗拉(Motorola)公司开发的全双工同步串行总线,是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。主要应用在EEPROM、Flash、实时时钟(RTC)、数模转换器(ADC)、网络控制器、MCU、数字信号处理器(DSP)以及数字信号解码器之间。

SPI总线接口和物理拓扑结构

接口:

五线制接口(四线SPI):全双工

MOSI(主出从入)、MISO(主入从出)、SCK、CS、GND

四线制接口(三线SPI):半双工

IO(双向通信数据线)、SCK、CS、GND

物理拓扑结构:支持一主多从,依靠片选线区分从设备,每增加一个从设备就要增加一个片选线,消耗一个IO口。

总线

SPI总线通信原理

通信数据线:MOSI、MISO,时钟线:SCK,芯片选择线:CS

通信过程:

  1. 将CS拉低,选择和那个设备通信
  2. 操作时钟线,让MISO和MOSI准备数据
  3. 操作时钟线,让MISO和MOSI发送数据
  4. 将CS拉高,释放通信总线

SPI总线数据格式

数据格式不固定:数据位长度可以变化,SPI支持暂停功能,一般数据长度是8位。

总线

数据格式需要注意:那种边沿发送数据,那种边沿准备数据,总线空闲时时钟状态

CPHA:相位 决定了在第几个时钟边沿进行数据采集:为0,选择第一个边沿也就是前沿,为1,选择第二个边沿,也就是后沿

CPOL:时钟极性,决定时钟的空闲状态。为1,空闲时为高,为0,空闲时为低电平

也就是说一共有四种模式:工作在模式0的设备,他一定能工作在模式3

CPHA=0 CPHA=1
CPOL=0 极性低 上升沿采样 :模式0 下降沿采样:模式1
CPOL=1 极性高 下降沿采样 :模式2 上升沿采样:模式3

每发送以为数据就会接收到一位数据。

时序操作:

每发送一个数据为的时间由发送速度决定。通信速度一般在Mhz以上,最快可达上百M。

STM32中的SPI总线

STM32中SPI总线介绍

在大容量产品和互联型产品上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。SPI接 口默认工作在SPI方式,可以通过软件把功能从SPI模式切换到I2S模式。

串行外设接口(SPI)允许芯片与外部设备以半/全双工、同步、串行方式通信。此接口可以被配置 成主模式,并为外部从设备提供通信时钟(SCK)。接口还能以多主配置方式工作。 它可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠通信。

STM32中SPI框架

总线

发送缓冲区和接收缓冲区共用同一个寄存器,两者不影响,类似于串口的发送和接收数据寄存器。

从选择NSS管脚作用分析:

用来切换主设备还是从设备,动态改变,由硬件和软件进行配置。作为主设备时可以不使用NSS,作为从设备时必须有一个NSS管脚作为片选线。

总线

总线

从上图中可以看出SPI在从模式管理上是有两个输入可以选择的,一个是寄存器SSI位一个是NSS管脚。具体使用哪个输出信号由寄存器SSM位控制,如果SSM位为0则选择NSS管脚,此时为硬件模式。SSM位为1,选择SSI位控制,此时为软件模式。

软件(SSM=1): 内部NSS的值=SSI,此时NSS管脚可以ling作他用。
硬件(SSM=0): 输入:NSS片选,被选择/可以用作多主模式;
输出:SSOE=1,允许输出,NSS输出低电平,选择从机SSOE=0:禁止输出

STM32中SPI相关寄存器

总线

总线

总线

W25Q64存储芯片概述

总线

W25Q64介绍

华邦公司生产的FLASH存储芯片,

容量:64Mbit->8Mbyte

硬件接口:SPI

一页空间:256Byte,不能跨页存储

标准SPI接口时支持的时钟速度:80Mhz

最小擦除单位为:4Kbyte ->一个扇区

块擦除:32Kbyte-64Kbyte

擦除数据10万次,数据保存20年

W25Q64在写入数据时,不支持写1,只支持写0操作。擦除时会将擦除区域写1,保存之前先擦除。

W25Q64管脚介绍

总线

使用标准SPI接口时:

DO:从设备输出管脚

DI:从设备输入管脚

CLK:时钟管脚

CS:片选

WP、HOLD、DI、DO可以拓展工作模式,作为2倍,4倍SPI接口时的数据接口

W25Q64工作原理

总线

支持SPI模式0和模式3,上升沿数据采集

W25Q64要工作,需要通过指令进行设置

常用的指令:

写使能0X06:写数据之前要发送写使能指令

读寄存器指令0X05:用来判断芯片是否正忙

写指令0X02:写入数据

读ID指令0X9F:用来判断芯是否正常工作

总线

总线

总线

W25Q64操作时序

Write Enable (06h):写使能操作

  1. 拉底片选
  2. 向硬件SPI寄存器发送一个数据
  3. 拉高片选

总线

Read Status Register-1 (05h):读状态寄存器

  1. 拉低片选
  2. 向硬件SPI寄存器发送一个数据0x05/0x35
  3. 发送0xFF,第一次发送的数据是无意义的,只是由于SPI环形传输的特性,所以要接收数据,必须要发送一个数据
  4. 拉高片选

总线

Page Program (02h):页写数据

  1. 拉低片选
  2. 发送0x02
  3. 发送起始地址(24位)数据,发送三次8位数据
  4. 发送数据内容
  5. 拉高片选

总线

Read Data (03h):读数据

  1. 拉低片选
  2. 发送24位地址数据
  3. 发送数据(一般位0xff),此时发送的数据无意义,需要关注返回的数据也就是要读的内容。

总线

Sector Erase (20h):扇区擦除

  1. 拉低片选
  2. 发送指令0x02
  3. 发送要擦出的扇区首地址
  4. 拉高片选

总线

Read Manufacturer / Device ID (90h):获取芯片ID

  1. 拉低片选
  2. 发送0x90
  3. 发送三个地址数据,数据位都0
  4. 发送两字节数据,获取返回值,返回值就是工厂信息和设备ID
  5. 拉高片选

总线

Flash驱动

硬件原理图:

总线

总线

PB12—CS

PB13—SCK

PB14—MISO

PB15—MOSI

代码实现流程:

  1. 配置GPIO

CS:通用推挽输出

CSK /MOSI:复用推挽输出

MISO:浮空输入

  1. 配置SPI

双向全双工

主机模式

SPI模式0或者3

  1. 编写读写时序:自己实现或者移植代码

STM32固件库里提供了一份SPI_FLASH的驱动代码,我们只需要稍加修改即可:

路径:

STM32F10x_StdPeriph_Lib_V3.5.0\\Utilities\\STM32_EVAL\\Common

总线

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分