嵌入式——串行外围设备接口(SPI)

目录

一、初识SPI

1. 介绍

2. 特性

补:

二、物理层

1. SS (Slave Select)

2. SCK (Serial Clock)

3. MOSI (Master Output, Slave Input)

4. MISO (Master Input, Slave Output)

三、协议层

1. 基本通讯过程

2. 通信的起始和停止信号

3. 数据有效性

4. CPOL/CPHA及通信模式

四、SPI架构

1. 通信引脚

2. 时钟控制逻辑

3. 数据控制

4. 整体控制逻辑

五、通信过程


一、初识SPI

1. 介绍

        SPI (Serial Peripheral Interface,串行外围设备接口) 协议是由摩托罗拉公司提出的通信协议。它被广泛地使用在ADC、LCD等设备与MCU间,适用于对通信速率要求较高的场合

2. 特性

嵌入式——串行外围设备接口(SPI)_第1张图片

补:

(1)主或从 操作。

(2)支持 多主模式。

(3)8 个 主模式 波特率 预分频 系数(最大为 fpclk / 2)。

(4)从 模式频率(最大为 fpclk / 2)。

(5)主模式 和 从模式的 快速通信。

(6)主模式 和 从模式 下均可以 由软件或硬件 进行 NSS管理主 / 从操作模式的 动态改变。

(7)可编程的 时钟极性 和 相位。

(8)可编程的 数据顺序,MSB 在前或 LSB 在前。

(9)可 触发中断 的专用发送 和 接收标志。

(10)SPI 总线 忙状态 标志。

(11)支持 DMA功能 的 1 字节 发送和接收 缓冲器:产生发送 和 接受请求。

二、物理层

        SPI通信使用 3 条总线及片选线,3条总线分别为SCK、MOSI、 MISO,片选线为SS

嵌入式——串行外围设备接口(SPI)_第2张图片

1. SS (Slave Select)

        从设备选择信号线,常称为片选信号线,也称为NSS、CS。

        当有多个SPI从设备与SPI主机相连时,设备的其他信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同使用这 3条总线;而每个从设备都有独立的一条NSS信号线,本信号线独占主机的一个引脚,即有多少个 从设备,就有多少条片选信号线

        IIC协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通信;而SPl协议中没有设备地址,它使用 NSS信号线来寻址,当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中(片选有效),主机便可开始与被选中的从设备进行SPI通信。所以SPI通信以NSS线置低电平为开始信号,以 NSS线 被拉高作为结束信号。

2. SCK (Serial Clock)

        时钟信号线,用于通信数据同步由通信主机产生,决定了通信的速率不同的设备支持的最高时钟频率不一样两个设备之间通信时,通信速率受限于低速设备

3. MOSI (Master Output, Slave Input)

        主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即该线上数据的方向为主机到从机

4. MISO (Master Input, Slave Output)

        主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即该线上数据的方向为从机到主机

三、协议层

1. 基本通讯过程

嵌入式——串行外围设备接口(SPI)_第3张图片

        NSS、SCK、MOSI信号都由主机控制产生,而 MISO的信号由 从机产生,主机通过该 信号线读取 从机的数据。MOSI 与 MISO的信号 只在 NSS为低电平 的时候才有效,在 SCK的 每个时钟周期,MOSI 和 MISO 传输一位数据

2. 通信的起始和停止信号

        ① 处 NSS信号 由高变低,是SPI通信的 起始信号。NSS是 每个从机各自 独占的 信号线,当从机在自己的 NSS线检 测到起始信号后,就知道自己被 主机选中,开始准备与主机通信

        ⑥ 处 NSS信号 由低变高,是SPI通信的 停止信号,表示本次通信结束,从机的选中状态 被取消

3. 数据有效性

        SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。

        MOSI 及 MISO 数据线 在SCK 的每个时钟周期 传输 一位数据,且 数据输入输出是同时进行的。数据传输时,MSB先行或LSB先行并没有作硬性规定( 一般都会采用MSB先行模式

        MOSI 及 MISO 的数据在 SCK的 上升沿 期间 变化输出,在 SCK的 下降沿时被采样( MOSI 及MISO 的数据有效 )高电平时 表示数据 1,为低电平时 表示数据 0。其他时刻数据无效,MOSI 及 MISO 为下一次表示数据做准备。

    SPI 每次数据传输可以 8位 或 16位 为单位,每次传输的单位 数 不受限制

4. CPOL/CPHA及通信模式

        为方便说明 SPI 的 4种通信模式,引入了“ 时钟极性CPOL ” 和 “ 时钟相位CPHA ” 的概念,用于区别 总线空闲时SCK的时钟状态以及数据采样时刻

        时钟极性CPOL是指 SPI通信设备 处于空闲状态 时,SCK信号线 的电平信号(即 SPl 通信开始前、NSS线为 高电平时 SC K的状态)。CPOL= 0 时,SCK 在空闲状态时 为低电平,CPOL= 1时,则相反。

        时钟相位CPHA是指 数据的采样时刻。当 CPHA = 0时,MOSI 或 MISO 数据线 上的信号将会在 SCK时钟线 的 “ 奇数边沿 ” 被采样;当 CPHA = 1时,数据线在 SCK的 “ 偶数边沿 ” 被采样。

嵌入式——串行外围设备接口(SPI)_第4张图片

        无论 CPOL 是 0 还是 1 ,因为配置的 时钟相位 CPHA=0采样时刻 都是在 SCK 的奇数边沿注意当 CPOL=0 的时候,时钟的奇数边沿 是 上升沿,而 CPOL=1 的时候,时钟的 奇数边沿是下降沿 )。所以 SPI 的采样时刻 不是由 上升 / 下降沿 决定的

        MOSI 和 MISO 数据线 的有效信号 在 SCK的奇数边沿 保持不变数据信号 将在 SCK奇数边沿时被采样在非采样时刻,MOSI 和 MISO 的有效信号 才发生切换

嵌入式——串行外围设备接口(SPI)_第5张图片

        CPHA =1 时,不受CPOL的影响,数据信号在 SCK的 偶数边沿 被采样

        由 CPOL 及 CPHA 的 不同状态,SPl 分成了 4种模式主机与从机 需要工作 在相同的模式下才可以 正常通信( 实际中采用较多的是 “ 模式0 ” 与 “ 模式3 ”  )。

嵌入式——串行外围设备接口(SPI)_第6张图片

四、SPI架构

嵌入式——串行外围设备接口(SPI)_第7张图片

1. 通信引脚

        SPI的所有硬件架构 都是从左侧的 MOSI、 MISO、SCK及NSS线 展开的。

嵌入式——串行外围设备接口(SPI)_第8张图片

        SPI1 是APB2上的设备,最高通信速率达36Mbps,SPI2、SPI3 是APB1上的设备,最高通信速率为18Mbps。除了通信速率,在其他功能上没有差异。SPI3 用到了下载接口的引脚,这几个引脚 默认功能 是下载,第二功能 才是 lO口。如果 想使用SPI3接口,则在程序上必须 先禁用这几个 lO口 的下载功能。

2. 时钟控制逻辑

        SCK线的时钟信号 由波特率发生器 根据 控制寄存器CR1中的BR[0:2]位控制,该位是对 fpclk时钟的 分频因子对 fpclk 的分频结果就是 SCK引脚的 输出时钟频率

嵌入式——串行外围设备接口(SPI)_第9张图片

        fpclk频率 是指SPl所在的 APB总线频率,APB1为 fpclk1,APB2为 fpclk2。

        通过 配置 控制寄存器CR 的CPOL位 及 CPHA位,可以把 SPI设置成 前面分析的 4种SPI 模式。

3. 数据控制

        SPI 的 MOSI 及 MISO 都连接到 数据移位寄存器上,数据移位寄存器的数据来源于 目标接收、发送缓冲区以及MISO、MOSI线

        当向外发送数据的时候,数据移位寄存器以 “ 发送缓冲区 ” 为数据源,通过写 SPI的 数据寄存器 DR 把数据填充到 发送缓冲区 中,并把数据一位位地通过数据线 发送出去。当 从外部接收数据的时候,数据移位寄存器 把数据线采样到的数据一位位地存储到 “ 接收缓冲区 〞中,通过读 数据寄存器 DR,可以 获取接收缓冲区 中的内容。

        其中 数据帧长度 可以通过 控制寄存器 CR1 的 DFF位 配置成 8位 及16位 模式;配置LSBFIRST位 可选择 MSB先行 还是 LSB先行。

4. 整体控制逻辑

        负责 协调整个SPI外设,其工作模式根据 配置的控制寄存器 (CR1/CR2) 的参数而改变。

        在外设工作时,控制逻辑会根据外设的工作状态修改状态寄存器SR,只要读取状态寄存器相关的寄存器位,就可以了解 SPI的工作状态

        控制逻辑还根据要求,负责控制产生 SPI中断信号、DMA请求 及 控制 NSS信号线

        实际应用中,一般不使用 STM32 SPl 外设 的 标准 NSS信号线,而是更简单地 使用普通的 GPIO,软件控制 它的电平输出,从而 产生通信起始 和 停止信号

五、通信过程

嵌入式——串行外围设备接口(SPI)_第10张图片

1. 控制NSS信号线产生起始信号

2. 把 要发送的数据写入 数据寄存器DR中,该数据会被存储到 发送缓冲区

3. 通信开始,SCK时钟开始运行MOSI 把发送缓冲区 中的数据一位位 地传输出去;MISO 则把数据一位位地 存储进 接收缓冲区中。

4. 当发送完一帧数据 的时候,状态寄存器SR中的TXE标志位会被置1,表示传输完一帧,发送缓冲区已空;同样,当接收完一帧数据的时候,RXNE标志位会被置1,表示传 输完一帧,接收缓冲区非空。

5. 等到TXE标志位为1时,若还要继续发送数据,则再次往 数据寄存器DR写入数据即可;等到RXNE标志位为 1 时,通过读取数据寄存器DR可以 获取接收缓冲区中的内容

        假如 使能了 TXE 或 RXNE中断TXE 或 RXNE置1时会产生 SPI中断信号,进入同一个中断服务函数。到SPI中断服务程序后,可通过 检查寄存器位 来了解是 哪一个事件,再分别进行处理。也可以使用 DMA方式 来收发 数据寄存器 DR 中的数据。

嵌入式——串行外围设备接口(SPI)_第11张图片


                                                                                                                        后面再进行补充。

你可能感兴趣的:(单片机,stm32,嵌入式硬件,笔记,SPI,通信协议)