SPI(Serial Perripheral Interface)总线

4 篇文章 0 订阅
3 篇文章 0 订阅

一.SPI总线

#1.SPI总线的电气连接

  • 描述通信总线的方式:
  • 同步 全双工 串行
  • 异步 半双工 并行(速度快,占的资源多,8的倍数条线)
    单工

SPI总线(同步 全双工 串行总线):一般情况使用的是一个主设备多个从设备。
至少四条线:
SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)
特点:
1.SPI一般是单主机多从机的通信方式
2.SPI是一种高低位先行可选择的(MSB高位先行,LSB低位先行),8bit和16bit数据位可编辑的通信方式
3.SPI是摩托罗拉公司研发的通信总线协议
4.SPI通信速率最大可以达到18MHZ
5.SPI的时钟线一般由主机控制,由主机发起SPI通信
典型SPI总线图
典型SPI总线图

2.SPI时序

2.1 SPI4种工作模式

SPI4种工作模式
例如:
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由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

2.2 SPI 时序详解

SPI框图:
在这里插入图片描述
整体传输过程大概可以分为以下几个过程:

  1. 主机先将NSS信号拉低,这样保证开始接收数据;
  2. 当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);
  3. 由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度(稍后我们将讨论选择合适的时钟边沿和速度)。
  4. 主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;
  5. 主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;

在这里插入图片描述

3.通信方式

  1. 寻址方式:与I2C发送一个字节数据寻址方式不同,SPI当主机和某个从设备进行通信时,主设备需要先向从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)表示选中该设备。
  2. 通信过程:串口:先发低位后发高位
    I2C:先发高位后发低位
    SPI:先发高位后发低位(MSB为最高位,LSB为最低位);数据线高电平表示‘1’,低电平表示‘0’;一个字节发送完成以后无需应答可以再发一个字节;SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,再紧接着的下降沿或着上升沿时接收器从数据线上读取数据,完成一位数据的传送,八个时钟周期即可完成一个字节数据的传送。(没有起始信号,没有终止信号,没有应答)

SPI四种模式详解图解

SPI四种模式详解图解
模式一代码示例:

//SPI的模式1:
u8 SPI_ReadWriteOneByte(u8 tx_data)
{
	u8 i,rx_data=0;
	SCK=0; //空闲电平(默认初始化情况)
	for(i=0;i<8;i++)
	{
		/*1. 主机发送一位数据*/
		SCK=0;//告诉从机,主机将要发送数据
		if(tx_data&0x80)MOSI=1; //发送数据
		else MOSI=0;
		SCK=1; //告诉从机,主机数据发送完毕
		tx_data<<=1; //继续发送下一位
		
		/*2. 主机接收一位数据*/
		rx_data<<=1; //默认认为接收到0
		if(MISO)rx_data|=0x01;
	}
	SCK=0; //恢复空闲电平
	return rx_data;
}
版权声明:本代码为CSDN博主「void*_」的原创文章,遵循CC 4.0 BY-SA版权协议,
原文链接:https://blog.csdn.net/qq_36612961/article/details/89349880

参考博文:SPI协议详解(工作特点、时序图)
SPI四种模式
https://www.kemaowang.org.cn/n/578001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyemaokeji

原创不易,鼓励就是我的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值