前言
让我们回顾一下,我们学习了串口通讯(优点是全双工,缺点是只能点对点通讯)
另外还学习了IIC通讯(优点是一主多从通讯,缺点是半双工)
技巧:看一个总线是半双工还是全双工就看有几根数据线
那有没有总线是以全双工,并且还是一主多从的方式通讯呢?
答案是有的,那就是用SPI通讯
写数据
先来看看设备之间如何使用SPI方式来通讯
可以看出设备之间有4根线连接(SCK、MOSI、MISO、SS),下面来细说每根线的作用
SS为片选信号线(用来选择哪个设备)
MOSI (master output , slave input)主机输出,从机输入
MISO(master input , slave output )主机输入,从机输出
SCK为时钟信号线(用来提供基准时钟信号)
下面以控制EEPROM为例(图中型号为93C46的是EEPROM)
假设EEPROM里面有128个内存地址(用一个字节就可以寻址完)
这SPI的数据格式
无论是写操作还是读操作,起始位都为1,但操作码01是写操作,操作码10是读操作
当地址码写入EEPROM中寄存器的地址,这时就选中了这个地址,相当于打通了直达该地址的通道
紧接着写入数据,这样数据被保存下来了
用电平表示是这样的
那是不是直接发送给被控设备就行了?
当然是不行的
因为SPI是串行同步通讯的,所以需要数据线和时钟线两根线才能传输数据
而且SPI发送数据是当时钟线处于跳变沿时才能被发送的(具体是处于什么跳变沿,取决于该设备)这里以上升沿为例
在SS(片选信号)被选中期间,当SCK(时钟信号)发生上升沿,数据就被确定下来
以上面的数据为例
根据时钟信号线空闲状态是高电平还是低电平,又因为每种状态可以分为上升沿和下降沿触发
共计有4种状态
读数据
读操作也是同样的操作
现在要把EEPROM里的数据读出来
根据SPI的数据格式
现在需要MOSI写入1 10 0000001
MISO后半段就可以读取数据了(上面EEPROM存储的为0000 1111)
总结
SPI是全双工,一主多从
SPI是当发生跳变沿时,传输数据
SPI本质是移位寄存器
-
SPI
+关注
关注
17文章
1700浏览量
91289 -
通讯
+关注
关注
9文章
892浏览量
34828
原文标题:秒懂SPI
文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论