历史上的今天
今天是:2025年12月16日(星期二)
2022年12月16日 | 单片机spi通信接口什么意思,spi接口干什么用的?
2022-12-16 来源:zhihu
讲真,以前做开发的时候最怕就是调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根线的。
所以,这种协议要从本质上去理解它们,不需要死记硬背要接几个引脚,你学废了吗?
更多单片机开发实战干货尽在无际单片机编程。
史海拾趣
|
AD采集的数据在12232上显示 ,看看我的源程序#include<reg52.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit led1=P2^3; //led端口定义sbit led2=P2^4;sbit led3=P2^5;s ...… 查看全部问答> |
|
大家好,请问有没有哪位使用过断点寄存器,如何对其进行初始化呢,我使用的是s12的freescale的芯片。 有类似的经验均可。 想通过设置断点寄存器,实现断点的设置,可是试验没有成功,不知如何进行,请大家帮忙! 谢谢!… 查看全部问答> |
|
我的winbase.h文件让我写错了 改不回去了 谁安装了EVC 麻烦把这个文件粘贴给我呗 谢谢大家了 邮箱:zhaofei_33101@163.com 文件路径C:\\Program Files\\Windows CE Tools\\wce420\\POCKET PC 2003\\Include\\Armv4 winbase.h … 查看全部问答> |
|
现在公司准备做Win下的PCI设备的驱动, 以前从未接触过这样的项目, 老大让我先收集资料, 请问我该补哪方面的钙? 就是那种很普通的数据采集卡,AD转换卡 硬件平台:普通PC. 软件平台:win xp,2k ps: 我只做过dos+工控机平台的板卡程序,,就是那种 ...… 查看全部问答> |
|
我第一次接触串口开发,很多不明白的地方。 现在手头有一设备,类似读卡器,是USB口的,装完驱动后会生成一对应的COM口。 刷卡的时候,这个外界设备会向连着的主机程序发送一串ASCII字符,我该如何获得这些数据呢? 我用超级终端链接这个COM口, ...… 查看全部问答> |
|
如题:我用飞思卡尔的MCF51jm128VHD单片机,自己做了一段boot将用户程序升级到单片机中,但是升级后程序运行速度变慢了,这是怎么回事?有高手可以帮忙吗,感激不尽… 查看全部问答> |
|
stm32f407 fsmc 驱动 320×240点tft 偶尔闪烁 基本上,标题都说了问题。 补充一下背景 程序上了 rtx——不过是封装好的,我不用动; 板上倒没啥特别的东西 就是有两路 磁保继电器驱动,但是和 主电源是隔离的。 而且也试了磁保继电器动作时,也没发现屏幕会闪。 但是在做实验的房间 ...… 查看全部问答> |




