讲真,以前做开发的时候最怕就是调spi和iic。
因为公司没有逻辑分析仪,调起来全凭经验,一出问题找都找不到,只能仔细看代码盲调,看是不是哪个时序有问题。
说到这里,可能刚初学的小伙伴会问:单片机spi通信是什么鬼?spi接口是干什么用的?
一、单片机spi通信是什么鬼?
单片机是一个可编程的微控制器,和spi通信其实是两个独立的东西。
只不过我们用单片机可以去实现spi通信而已,但是实现spi通信不一定非要单片机。
我们人和人之间沟通,要靠说话,并且两个人语言要一样,比如说都用普通话。
那芯片和芯片沟通,它们又不会说话,怎么传递信息呢?
就是通过通信总线,通信总线有很多种,比如IIC、SPI、USART、CAN,它们的区别就像普通话、英语、韩语、俄语,都是用来传递信息用的,只是传递方式不同。
但传递信息,有一个前提,就是语言要相同,也就是通信方式要相同。
所以说,spi是一种通信方式,是用来传递信息的。
不同的通信方式,传递信息的方式不同。
Spi是一种全双工、高速的、同步的通信总线。
简单来说,就是你们两个可以同时快速地说话,你能把你要说的告诉对方,同时也能听到对方说什么,这就是全双工。
还有一种叫半双工,就是你们同时只能有一个人说,另一个听,说完了,另外一个才能说。
很明显,全双工传递信息的效率更高吧。
同步的意思我给你们两个对话设定个条件,比如说我说开始你们才可以对话,我说停止就都不能说话。
二、spi接口是干什么用的?
我们人和人传递信息一般是靠耳朵和嘴巴对吧?
Spi通信传递信息是通过接口,来看下图:
spi接口有4根线,分别是CS、SCLK、MOSI、MISO。
SCLK是同步信号,一般由主控来控制。
既然是通信,自然是需要有个”对象”,如上图A和B。
A是SPI Master,也就是主控,比如说单片机,一般就是主控的角色,主控来负责发送SCLK同步信号通知SPI Slave是否需要进行数据通信。
B是SPI Slave,也就是从机,比如说Flash芯片。
CS代表片选信号,为什么要用片选呢?
因为一个SPI Master可以跟不同的SPI Slave进行通信。
SPI Master就是通过CS来控制,具体跟哪个SPI Slave通讯,控制CS为低电平就代表选中该SPI Slave。
如果说只跟一个从设备通讯,也可以直接把CS串联电阻接地,省的每次都去控制它。
MOSI英文全称是Master Output Slave Input,这个一般接主控器件数据输出引脚,从机器件数据输入引脚。
MISO英文全称是Slave Input Master Output,这个一般接主控器件数据输入引脚,从机器件数据输出引脚。
除此以外,还有一种特殊的用法,就是只用SCLK和MOSI这两个引脚的SPI通信。
比如说我们无际单片机编程实战项目课程里有个OLED屏的应用。
片选引脚CS我直接硬件接地了,因为只有一个从设备。
我们主要是控制OLED屏去显示内容,并不需要从OLED读取数据,所以MISO也不需要。
这种情况是可以只用2根线的。
所以,这种协议要从本质上去理解它们,不需要死记硬背要接几个引脚,你学废了吗?