打印
[应用相关]

SPI接口说明及原理

[复制链接]
550|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


简介



SPI:Serial Peripheral Interface,是串行外设接口。


SPI是由摩托罗拉于 1985 年前后开发,是一种适用于短距离、设备到设备通信的同步串行接口。

从那时起,这种接口就已成为许多半导体制造商,特别是微控制器(MCU)和微处理器(MPU)采用的事实标准。


使用特权

评论回复
沙发
我喜欢打游戏|  楼主 | 2022-4-23 16:31 | 只看该作者
SPI接口

SPI总线是一种4线总线,通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以。


MOSI:Master Output Slave Input,主设备数据输出,从设备数据输入;
MISO:Master Input Slave Output,主设备数据输入,从设备数据输出;
SCLK:Serial Clock,时钟信号,由主设备产生;
SS:Slave Select,从设备选择信号,由主设备控制;
上面的SS信号,也可以理解为CS信号,一般是低电平有效,所以也是NSS(非)信号;

CS:Chip Select,片选信号(从设备使能/选择信号),由主设备控制;

使用特权

评论回复
板凳
我喜欢打游戏|  楼主 | 2022-4-23 16:33 | 只看该作者
一主一从
最基本的SPI通信就是一主一从,比如:一个STM32作为主机,一个W25Q16(SPI Flash)作为从机。还有两个MCU之间进行SPI通信等。
上图例子是主机发送一个字节数据(0x53),从机应答一个字节数据(0x46)。
一主多从
SPI可以一主一从(一个主机,一个从机),但也可以一主多从。一主多从常见有两种连接方式。

A.常规
通常,每个从机都需要一条单独的SS线,要与指定的从机通信,将该从机的SS线设为低电平,并将其余的保持为高电平即可。
B.一条SS信号
某些应用只需要一条NSS即可(比如:移位寄存器),对于这种布局,数据从一个从设备移位到另一个从设备。

6736263b985968c5.png (34.7 KB )

6736263b985968c5.png

使用特权

评论回复
地板
我喜欢打游戏|  楼主 | 2022-4-23 16:33 | 只看该作者
SPI数据传输



SPI的通信比较简单,一个时钟传输一位数据(主机 -> 从机,或者从机 -> 主机)。


SPI时钟
理论上SPI的时钟频率可以做到很大,一般几MHz~几百MHz,拿常见的W25Q16来说,SPI最高支持80MHz。

SPI通信速率要结合实际情况,不能超过主机或从机支持的最大时钟频率。

SPI数据
SPI的数据分两个方向:
MOSI:主机 -> 从机
MISO:从机 -> 主机

SPI通信有一个“缺点”:没有指定的流控制,没有应答机制确认是否接收到数据。

可以理解为:不知道是什么时候主机发给从机,什么时候从机发给主机,到底该发多少字节数据等。

此时,需要通信的主机和从机达成约定,一般由主机进行控制读写的操作。

比如下面这个读写SPI Flash数据的操作:
前面1字节是指令,紧接着再3字节(24位)地址,都是由主机发送给从机。之后,主机读取数据(由从机发送出来)。

使用特权

评论回复
5
我喜欢打游戏|  楼主 | 2022-4-23 16:34 | 只看该作者
时钟极性和相位
除了设置时钟频率外,主机还必须配置与数据有关的时钟极性和相位。
CPOL确定时钟的极性,极性可以通过简单的逆变器进行转换。

CPHA确定相对于时钟脉冲的数据位的时序(即相位)。

一般集成有SPI外设的处理器,都有SPI相关的配置寄存器,拿STM32来说,参考手册里面有详细介绍SPI配置的信息。



使用特权

评论回复
6
TTWO| | 2022-4-23 23:06 | 只看该作者
刚好需要!谢谢

使用特权

评论回复
7
carpsnow| | 2022-4-28 13:37 | 只看该作者
一般SPI器件的数据手册会有时序,
写代码的时候,可以直接参考

使用特权

评论回复
8
Uriah| | 2022-10-8 08:14 | 只看该作者

需要在做项目的过程中经历磨难

使用特权

评论回复
9
Bblythe| | 2022-10-8 11:13 | 只看该作者

结构化模块化的程序设计的思想,使最基本的要求

使用特权

评论回复
10
Pulitzer| | 2022-10-8 14:12 | 只看该作者

写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的

使用特权

评论回复
11
万图| | 2023-7-1 07:11 | 只看该作者

中断信号直接从各外部设备通知中断控制器

使用特权

评论回复
12
Uriah| | 2023-7-1 08:14 | 只看该作者

待向GPIO(通用I/O端口)的输入从0变为1时,程序可以一定的间隔来检查GPIO的状态

使用特权

评论回复
13
帛灿灿| | 2023-7-1 10:10 | 只看该作者

来自单 片机内部的定时器和GPIO、串行通信设备UART等外设机器的中断被称为外部设备中断

使用特权

评论回复
14
Bblythe| | 2023-7-1 11:13 | 只看该作者

定时器输出引脚的设定

使用特权

评论回复
15
周半梅| | 2023-7-1 13:09 | 只看该作者

中断产生于单片机内部和外部的各种设备

使用特权

评论回复
16
Pulitzer| | 2023-7-1 14:12 | 只看该作者

这样的设定只需在setup()中定义一次便能在整个程序中有效

使用特权

评论回复
17
周半梅| | 2023-7-1 15:15 | 只看该作者

在掌握对象的变化频度时是有效的

使用特权

评论回复
18
童雨竹| | 2023-7-1 16:08 | 只看该作者

多次检查也会给单片机带来负荷,对功耗不利

使用特权

评论回复
19
万图| | 2023-7-1 17:11 | 只看该作者

在GR-SAKURA中,从IO30引脚到IO35引脚接收来自外部的中断信号

使用特权

评论回复
20
Clyde011| | 2023-7-1 18:14 | 只看该作者

一种了解状态变化的简单方法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

597

帖子

0

粉丝