嵌入式之SPI通讯协议

系列文章目录

嵌入式之SPI通讯协议



一、SPI简介

SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
别名:SCK(SCLK、CLK、CK)
MOSI(DO)
MISO(DI)
SS(NSS、CS)

同步,全双工
支持总线挂载多设备(一主多从)


二、硬件部分

所有SPI设备的SCK、MOSI、MISO分别连在一起
主机另外引出多条SS控制线,分别接到各从机的SS引脚
输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
在这里插入图片描述

由于MISO都是输出给SPI主机,如果同时开启输出,会造成冲突
SS未被选中,MISO必须关闭输出,配置输出高阻状态(引脚断开不输入任何电平)
这部分厂商就写好了,我们不需要编写


三、移位示意图

主机最后会发送给从机10101010,从机存的就是10101010
从机最后会发送给主机01010101,主机存的就是01010101
如果只想主机发送,那从机发送的不看就行了(比如从机发送无意义数据,0xff)111111111
如果只想主机接收,那主机发送的从机不看就行了

在这里插入图片描述


四、SPI时序单元

起始条件:SS从高电平切换到低电平
终止条件:SS从低电平切换到高电平
就是低电平通讯
在这里插入图片描述


4.1模式1(与移位示意图对应)

交换一个字节(模式1)
CPOL=0:空闲状态时,SCK为低电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
SS上升沿,要关闭通讯了,MOSI要最后移动一次状态恢复原先的电平(可高可低),MISO恢复高阻态
数据要先移出,再移入

在这里插入图片描述

移出:SCK第一个边沿移出数据(红色框),主机向从机发送最高位B7,从机向主机发送最高位B7
对应移位示意图,主机移出1,从机移出0
在这里插入图片描述

移入:第二个边沿移入数据(绿色框),主机接收从机最高位B7到最低位,从机接收主机最高B7位到最低位
对应移位示意图,主机移入0,从机移入1
在这里插入图片描述
如果想发送多个字节SS不上升,重复上诉过程B7-B0,当然如果写的地址是0x19,第二个字节发送的地址就是0xA0(0X20)了


4.2模式0(最常用)

交换一个字节(模式0)
CPOL=0:空闲状态时,SCK为低电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据(数据采样)

由于数据要先移出,再移入,所以当SS下降的时候(红色框),MOSI和MISO就要移出数据
当SCK第一个边沿(蓝色框),MOSI和MISO就要移入数据
当SCK第二个边沿(绿色框),MOSI和MISO就要移出数据
只发送一个字节的话,黄色框就是采样完成,灰色框,MOSI就恢复原来电平,MISO实际发送了下一位的B7,然后恢复高阻态
如果要发送多个数据,重复B7-B0的过程
在这里插入图片描述


4.3模式2

同理模式2和模式3
交换一个字节(模式2)
CPOL=1:空闲状态时,SCK为高电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
在这里插入图片描述


4.4模式3

交换一个字节(模式3)
CPOL=1:空闲状态时,SCK为高电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
在这里插入图片描述


五、SPI时序图(模式0)

发送指令
向SS指定的设备,发送指令(0x06)
就是主机发送给从机指令,从机不需要发送数据给从机,直接就是高阻态不发送数据就是1(具体情况看芯片手册,我们这个被控制的传感器是这样的)
其实对应移位示意图就是主机用0x06换取了从机的0xff(11111111),无意义

在这里插入图片描述
指定地址写
向SS指定的设备,发送写指令(0x02),随后在指定地址(Address[23:0])下,写入指定数据(Data)
同理就是在x0123456地址下写0x55数据
在这里插入图片描述


END
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值