讲真,以前做开发的时候最怕就是调spi和iic。

因为公司没有逻辑分析仪,调起来全凭经验,一出问题找都找不到,只能仔细看代码盲调,看是不是哪个时序有问题。

说到这里,可能刚初学的小伙伴会问:单片机spi通信是什么鬼?spi接口是干什么用的?

一、单片机spi通信是什么鬼?

单片机是一个可编程的微控制器,和spi通信其实是两个独立的东西。

只不过我们用单片机可以去实现spi通信而已,但是实现spi通信不一定非要单片机。

我们人和人之间沟通,要靠说话,并且两个人语言要一样,比如说都用普通话。

那芯片和芯片沟通,它们又不会说话,怎么传递信息呢?

就是通过通信总线,通信总线有很多种,比如IIC、SPI、USART、CAN,它们的区别就像普通话、英语、韩语、俄语,都是用来传递信息用的,只是传递方式不同。

但传递信息,有一个前提,就是语言要相同,也就是通信方式要相同。

所以说,spi是一种通信方式,是用来传递信息的。

不同的通信方式,传递信息的方式不同。

Spi是一种全双工、高速的、同步的通信总线。

简单来说,就是你们两个可以同时快速地说话,你能把你要说的告诉对方,同时也能听到对方说什么,这就是全双工。

还有一种叫半双工,就是你们同时只能有一个人说,另一个听,说完了,另外一个才能说。

很明显,全双工传递信息的效率更高吧。

同步的意思我给你们两个对话设定个条件,比如说我说开始你们才可以对话,我说停止就都不能说话。

二、spi接口是干什么用的?

我们人和人传递信息一般是靠耳朵和嘴巴对吧?

Spi通信传递信息是通过接口,来看下图:

forum.jpg


spi接口有4根线,分别是CS、SCLK、MOSI、MISO。

SCLK是同步信号,一般由主控来控制。

既然是通信,自然是需要有个”对象”,如上图A和B。

A是SPI Master,也就是主控,比如说单片机,一般就是主控的角色,主控来负责发送SCLK同步信号通知SPI Slave是否需要进行数据通信。

B是SPI Slave,也就是从机,比如说Flash芯片。

CS代表片选信号,为什么要用片选呢?

因为一个SPI Master可以跟不同的SPI Slave进行通信。

forum.jpg


SPI Master就是通过CS来控制,具体跟哪个SPI Slave通讯,控制CS为低电平就代表选中该SPI Slave。

如果说只跟一个从设备通讯,也可以直接把CS串联电阻接地,省的每次都去控制它。

MOSI英文全称是Master Output Slave Input,这个一般接主控器件数据输出引脚,从机器件数据输入引脚。

MISO英文全称是Slave Input Master Output,这个一般接主控器件数据输入引脚,从机器件数据输出引脚。

除此以外,还有一种特殊的用法,就是只用SCLK和MOSI这两个引脚的SPI通信。

比如说我们无际单片机编程实战项目课程里有个OLED屏的应用。

forum.jpg



片选引脚CS我直接硬件接地了,因为只有一个从设备。

我们主要是控制OLED屏去显示内容,并不需要从OLED读取数据,所以MISO也不需要。

这种情况是可以只用2根线的。

所以,这种协议要从本质上去理解它们,不需要死记硬背要接几个引脚,你学废了吗?