当前位置: 首页 > news >正文

SPI通信总线

SPI通信总线

注意

常用的内部通信接口:UART、IIC、SPI,大多数是用于芯片之间的通信,特点是速度快,距离比较短

常用的外部通信接口:RS-232,RS-485,CAN,大多用于远距离传输,要求抗干扰能力强

SPI介绍

SPI 是由摩托罗拉(Motorola)公司开发的全双工同步串行总线,是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。主要应用在EEPROM、Flash、实时时钟(RTC)、数模转换器(ADC)、网络控制器、MCU、数字信号处理器(DSP)以及数字信号解码器之间。

SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线SCLK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI 和低电平有效的从机选择线CS

在这里插入图片描述

通信线说明
CSSlave设备选择线,也叫片选线,低电平有效(有些手册又称为NSS)
SCLK时钟信号,由Master产生,用于同步
MOSIMaster Out Slave Input,主机数据输出,从机数据输入
MISOMaster Input Slave Out,主机数据输入,从机数据输出

起始信号:CS由高变低,为SPI通讯的起始信号

停止信号:CS由低变高,为SPI通讯的停止信号

说明: SPI总线为主从模式,起始信号由主机发出,通过CS选择与之通信的从机,停止信号也由主机发出,结束本次通信。

SPI通信是主从模式,在有多个从机的情况下,从机通过拉低CS线来与主机通信,主机只能与一个从机通信,不能多从机,不然数据会混乱

注意:MOSI和MISO不能交叉连接

通信过程

4线SPI进行通讯时首先拉低CS片选信号选中目标从机,因为SPI可以进行多机通讯,然后SCK要产生连续的脉冲信号,在每个SCK信号的边沿MISO线上的数据(高电平为1,低电平为0,电平由Slave控制)传输到主机Master而MOSI线上的数据(高电平为1,低电平为0,电平由Master控制)传输到从机Slave

数据传输时高位在前,低位在后

通信模式

SPI共有4种通讯模式,由CPOL与CPHA控制。

CPOL-> 0:SCLK空闲时低电平 1:SCLK空闲时高电平

CPHA->0:奇数边沿采集数据 1:偶数边沿采集数据

在这里插入图片描述

经过CPOL和CPHA的组合,有4种模式

模式0:CPOL = 0,CPHA = 0 (SCLK空闲时低电平,奇数边沿采集数据,即上升沿采集,下降沿发送)

模式1:CPOL = 0,CPHA = 1 (SCLK空闲时低电平,偶数边沿采集数据,即下降沿采集,上升沿发送)

模式2:CPOL = 1,CPHA = 0 (SCLK空闲时高电平,奇数边沿采集数据,即下降沿采集,上升沿发送)

模式3:CPOL = 1,CPHA = 1 (SCLK空闲时高电平,偶数边沿采集数据,即上升沿采集,下降沿发送)

注意:为了确保通讯正常,主机与从机的通讯模式需要匹配。

如果不一致,导致的后果如下:

比如主机工作在模式0(上升沿采集数据,下降沿发送数据),从机工作在模式1(下降沿采集数据,上升沿发送)。下降沿时,主机发送数据,从机立马采集数据,此时数据不稳定,通讯失败;上升沿时,从机发送数据,主机立马采集数据,数据也不稳定,通讯也失败。

正常通讯应该如下:

主机处于模式0,从机处于模式3:主机下降沿发数据,从机上升沿采集数据

从机处于模式0,主机处于模式3:从机下降沿发数据,主机上升沿采集数据

主机处于模式1,从机处于模式2:主机上升沿发数据,从机下降沿采集数据

从机处于模式1,主机处于模式2:从机上升沿发数据,主机下降沿采集数据

参考:

https://zhuanlan.zhihu.com/p/548826158

https://www.cnblogs.com/jiek/p/15501171.html

https://mp.weixin.qq.com/s/o_oYGlfGhm815sy6xNnXfw

https://mp.weixin.qq.com/s/g2bGmGmI2DTbOmLIlkBiTABiTA

相关文章:

  • STC15单片机-看门狗介绍
  • C/C++教程 从入门到精通《第二十二章》——Qt控件详解
  • ECCV 2022 | k-means Mask Transformer
  • 如何做顶级“新生代农民工”?这几本书为你打开大门
  • datawhale8月组队学习《pandas数据处理与分析》(下)(文本、分类、时序数据)
  • 王道书 P191 思维拓展
  • matplotlib与django如何集成? matplotlib生成的图可以嵌入到网页吗?
  • 内卷室友系列 -- day01 计算机网络概论
  • mac显示器如何显示docker container中的gui请求
  • SpringCloud 三种服务调用方式详解
  • SpringCloud 三种服务调用方式,你知道几种?
  • 阿里二面:SpringCloud 有几种服务调用方式?
  • PHP HTTP 函数
  • springboot 整合使用redis发布订阅功能
  • mysql主从复制搭建
  • [译]如何构建服务器端web组件,为何要构建?
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【comparator, comparable】小总结
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 345-反转字符串中的元音字母
  • Babel配置的不完全指南
  • es6要点
  • JavaScript中的对象个人分享
  • k个最大的数及变种小结
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • SQL 难点解决:记录的引用
  • 分享一份非常强势的Android面试题
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 嵌入式文件系统
  • 让你的分享飞起来——极光推出社会化分享组件
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用API自动生成工具优化前端工作流
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ​MySQL主从复制一致性检测
  • # 飞书APP集成平台-数字化落地
  • #define与typedef区别
  • #预处理和函数的对比以及条件编译
  • (1)Android开发优化---------UI优化
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)u-boot-nand.bin的下载
  • (转)iOS字体
  • (转载)Google Chrome调试JS
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .apk文件,IIS不支持下载解决
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net开发时的诡异问题,button的onclick事件无效
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • ??myeclipse+tomcat