stm32专题十八:SPI协议

参考标准SPI协议说明:

1 SPI架构:

SPI的主要部分是状态,控制和数据寄存器,移位器逻辑,波特率发生器,主/从控制逻辑和端口控制逻辑。

SPI模块允许MCU和外围设备之间的双工,同步,串行通信。 软件可以轮询SPI状态标志,或者SPI操作可以是中断驱动的。

2 详细信号说明

2.1 MOSI

master output, slave input

2.2 MISO

master input, slave output

2.3 SS非(低电平使能)

该引脚用于将选择信号从SPI模块输出到另一个外设,当配置为主机时,将其作为数据传输,当SPI配置为从机时,它用作接收从机选择信号的输入。

2.4 CLK

该引脚用于输出SPI传输数据或接收时钟的时钟。注意,这是区分主机和从机的一个非常重要的标志。所有的从机,都只能接收来自主机的时钟,而主机的时钟信号来自于mcu。

3 寄存器映射

SPI的存储器映射如下表3-1所示。 为每个寄存器列出的地址是基址和地址偏移的总和。 基址在SoC级定义,地址偏移在模块级定义。 从保留位读取返回零并且写入保留位无效。

寄存器描述

控制寄存器1

控制寄存器2

波特率寄存器

SPI的速度(可以看到,比I2C要快很多):

SPI状态寄存器

数据寄存器SPIDR

4 功能描述

SPI系统的主要元件是SPI数据寄存器。 主器件中的8位数据寄存器和从器件中的8位数据寄存器由MOSI和MISO引脚相连,形成分布式16位寄存器。当执行数据传输操作时,该16位寄存器通过S-clock时钟从主机串行移位8位,因此在主机和从机之间交换数据。 写入主SPI数据寄存器的数据成为从机的输出数据,传输操作后从主SPI数据寄存器读取的数据是来自从机的输入数据。

读取SPIDER,PTEF = 1,然后写入SPIDR,将数据放入发送数据寄存器。当传输完成且SPIF清零时,接收的数据被移入接收数据寄存器。 这个8位数据寄存器用作SPI接收数据寄存器,用于读取和SPI发送数据寄存器的写入。 单个SPI寄存器地址用于从读数据缓冲区读取数据和将数据写入发送数据寄存器。

SPI控制寄存器1(SPICR1)中的时钟相位控制位(CPHA)和时钟极性控制位(CPOL)选择SPI系统使用的四种可能时钟格式之一。 CPOL位简单地选择非反相或反相时钟。 CPHA位用于通过对奇数SCK边沿或偶数SCK边沿上的数据进行采样来适应两种根本不同的协议。

主机模式:

当MSTR位置1时,SPI以主模式工作。 只有主SPI模块才能启动传输。 通过写入主SPI数据寄存器开始传输。 如果移位寄存器是为空,字节立即转移到移位寄存器。 该字节在串行时钟的控制下开始在MOSI引脚上移出。

从机模式:

当SPI控制寄存器1中的MSTR位清零时,SPI工作在从机模式。

5 传输标准

在SPI传输期间,数据被同时传输(串行移出)和接收(串行移位)。 串行时钟(SCK)同步两条串行数据线上信息的移位和采样。 从选择线允许选择单个从SPI设备,未选择的从设备不会干扰SPI总线活动。 可选地,在主SPI设备上,从选择线可用于指示多主总线争用。

从上面这个框图中可以看到,当开始数据传输时,主机和从机同时往数据寄存器SPIDR中填入数据,然后转移到移位寄存器。在SCK的作用下,两个8位移位寄存器相当于是1个16位寄存器。当一个字节传输完成后,主机的数据发送到从机的移位寄存器中,同时,从机的数据也发送到了主机的移位寄存器中。这时,如果主机想发送数据,就可以忽略从机发过来的数据,继续往DPIDR填入数据,不断循环。而当主机希望接收来自从机的数据时,主机也需要发送一个字节,这时,从机就会把主机需要的数据也发送到主机的移位寄存器(当经过16个时钟边沿,最后一个数据发送完成,数据传输到SPIDR数据寄存器),主机可以直接读取寄存器的值

使用SPI控制寄存器1中的两位,软件选择串行时钟相位和极性的四种组合之一。CPOL时钟极性控制位指定有效的高或低时钟,并且对传输格式没有显着影响。CPHA时钟相位控制位选择两种根本不同的传输格式之一。主SPI设备和通信从设备的时钟相位和极性应相同。 在某些情况下,在传输之间改变相位和极性以允许主设备与具有不同要求的外围从设备通信。

 

以下内容转载自:

https://www.cnblogs.com/deng-tao/p/6004280.html

1、什么是SPI?

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

2、SPI优点
支持全双工通信
通信简单
数据传输速率块

3、缺点
没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据 
可靠性上有一定的缺陷。

4、特点
1):高速、同步、全双工、非差分、总线式
2):主从机通信模式

5、协议通信时序详解
1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多 
个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共 
有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)SDO/MOSI – 主设备数据输出,从设备数据输入;
(2)SDI/MISO – 主设备数据输入,从设备数据输出;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设 
备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需 
要将从设备对应的片选引脚电平拉低或者是拉高。

2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配 
置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们 
可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来 
控制我们主设备的通信模式,具体如下:
Mode0:CPOL=0,CPHA=0
Mode1:CPOL=0,CPHA=1
Mode2:CPOL=1,CPHA=0
Mode3:CPOL=1,CPHA=1

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA 
是用来配置数据采样是在第几个边沿:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

例如:
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 
SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是 
SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 
SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是 
SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

       

需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信 那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的 SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。

6、内部工作机制


SSPSR 是 SPI 设备内部的移位寄存器(Shift Register). 它的主要作用是根据 SPI 时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以 及 Channel-Width 所决定.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值