SPI的学习

SPI的学习

文章摘自:https://www.cnblogs.com/deng-tao/p/6004280.html写的超级好。

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
I2C和SPI是两种常见的串行通信协议,用于连接和控制各种外设设备。下面是对它们的基本概念的简要介绍: I2C(Inter-Integrated Circuit)是一种多主从、串行、半双工的通信协议。它使用两根线(SDA和SCL)来进行数据传输。SDA线用于双向传输数据,SCL线用于时钟同步。I2C总线上的设备通过唯一的地址进行识别,并且可以在同一总线上连接多个设备。 SPI(Serial Peripheral Interface)是一种同步的串行通信协议。它使用四根线(MOSI、MISO、SCLK和SS)来进行数据传输。MOSI(Master Out Slave In)和MISO(Master In Slave Out)分别用于主设备向从设备发送数据和接收数据,SCLK用于时钟同步,SS(Slave Select)用于选择从设备。 现在我们来看如何使用I2C接口控制一个设备,比如OLED显示器。首先,需要确保你的硬件支持I2C接口,并连接好SDA和SCL线。然后,你需要查找并了解你所使用的OLED显示器的I2C地址和命令集。通常,OLED显示器会有一个特定的I2C地址和一组命令来控制显示内容。 在代码中,你需要使用相应的编程语言和I2C库来进行控制。首先,初始化I2C总线,并设置好相关参数,包括I2C地址和通信速率。然后,你可以使用库提供的函数来发送命令和数据到OLED显示器,以控制其显示内容。 接下来是如何使用SPI读取一个设备的数据。同样,你需要确保硬件支持SPI接口,并正确连接好MOSI、MISO、SCLK和SS线。你还需要了解所使用设备的SPI通信协议和命令集。 在代码中,你需要使用相应的编程语言和SPI库来进行读取操作。首先,初始化SPI总线,并设置好相关参数,包括通信速率和数据传输模式。然后,你可以使用库提供的函数来发送命令并接收设备返回的数据。 以上是对I2C和SPI基本概念的简要介绍以及使用这两种接口控制设备的一般步骤。具体实现细节可能因硬件和编程语言而有所差异,你可以参考相关文档和示例代码来进行具体操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值