STM32中的SPI总线介绍

发布时间:2024-01-25  

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.0UtilitiesSTM32_EVALCommon


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>