0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

需要把握住的SPI通信知识点

痞子衡嵌入式 来源:最后一个bug 作者:bug菌 2022-06-17 17:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

SPI通信嵌入式领域是非常常用的一种通信方式了,相比串口、IIC等等,SPI通信是一种高速、高效率的串行接口技术

然而最近在新项目开发中使用SPI通信却遇到了不少问题,过程中还是有挺多技术细节和知识点需要把握住的,那么今天bug菌就结合最近的使用情况和一直以来在SPI通信上踩过的坑进行总结和记录,一起避坑。 本文为基础巩固篇:

1通信形式

SPI是一种全双工、同步串行的通信方式,全双工、半双工等,表示某一时刻,数据的流动形式,全双工即可双向同时收发,而半双工则在一个时刻只能收或者发,通常全双工具有两条独立通信线路,而半双工则共用同一条线路。

af95fd88-ed5d-11ec-ba43-dac502259ad0.png

从SPI通信接线图可以看出,MOSI用于主机数据输出,从机数据输入,MISO引脚的数据流则刚好与之相反,所以数据流收发是走的两条独立的线路,从而可实现全双工通信模式,当然你也可以用于只用于单向数据传输,比如省略掉MISO仅主机传输从机数据等。

SPI通信有一个SCLK时钟线作为通信的同步信号,用来标定数据在MOSI和MISO引脚上的传输情况,SCLK是由主机来控制提供,从机检测识别,从而同步完成数据传输。

片选信号CS引脚,还记得有一次面试问片选信号CS英文是什么?英文直译即可--Chip Select。

片选信号在大部分数字芯片都有存在,外界给该引脚相应的电平即可选中,相当于一个"总开关",大部分从设备都是低电平被选中(电路图中通常在CS上划线标识),如果一直被选中则直接接地即可;当然也有少部分高电平选中则可直接接到VCC,切记不可悬空,以免异常。

这样看SPI的通信线路非常简单,没有繁杂的线路硬件也省了不少事,但很多朋友包括bug菌曾经因为把主机的MOSI接到从机的MISO而折腾得不轻,都是惯性思维惹的祸,一定要记住是对应引脚相连。

afa70146-ed5d-11ec-ba43-dac502259ad0.png

2通信线路

SPI是一种主从通信方式,在SPI通信总线上通常只有一个主机,一切通信的开始都是以主机发起,那如果在一条总线上与多个从设备通信呢?下面以两个从机为例,更多的从机也是类似的。

afb31620-ed5d-11ec-ba43-dac502259ad0.png

通过不同的片选引脚来选中不同的从设备,从而完成一对多的通信过程。通常多从机的情况都会采用多余的IO口连接从设备的片选引脚,以便分时控制从设备,达到一主多从机的主从控制方式。

当然如果独立的IO口引脚有限,可以采用IO口扩展芯片进行选中,也是比较方便的。

3通信数据

SPI通信是一种交换数据的形式,主机根据SCLK时钟把数据从MOSI引脚按bit位发送的同时,从机也以相同的速率把数据从MISO引脚传输,其传输数据形式如下:

afbdc3ae-ed5d-11ec-ba43-dac502259ad0.png

从SPI通信数据流图可以看出其发送与接收形成了一个封闭的环,所要传输的数据像水在一根管道内循环流动,所以其硬件线路上并没有像I2C那样有所谓的应答机制,通信效率上提高不少,但数据可靠性也会有一定的减弱。

前面bug也谈到SPI是一种主从通信机制,那么使得“管子”内数据流涌动的源泉一方面需要SPI的SCLK时钟保持好节奏,另一方面就是需要主机来推动,所以如果master只是想获取slave的数据,也需要发送空数据来使得整个数据流动起来,从而获得从机的数据。

细心的朋友应该注意到上图中MSB和LSB方向了,通常SPI通信都是以MSB来进行发送,但像stm32芯片这样的芯片可以设置是LSB先发送还是MSB先发送。

所以在分析SPI通信数据的时候这些数据都是需要提前了解的。

4通信电平‍

SPI比较麻烦点的就是时钟极性和时钟相位的确定了,但再怎么麻烦也就确定了4种模式。

如下是4种模式的时序图,其中CPOL(Clock Polarity)表示时钟极性,CPHA(Clock Phase)表示时钟相位。

afc7bbe8-ed5d-11ec-ba43-dac502259ad0.png

afd2a5da-ed5d-11ec-ba43-dac502259ad0.png

从图中我们可以分析得到:

1、CPOL和CPHA共同决定数据的采集方式。

2、CPOL决定了SCLK默认状态,当CPOL=0,时钟空闲时是低电平;当CPOL=1,时钟空闲时为高电平。

3、CPHA决定了数据在第几个跳变沿采集,当CPHA=0,在SCLK第一个跳变沿采集稳定数据;当CPHA=1,在SCLK第二个跳变沿采集稳定数据。

每个bit的数据交换,都是在电平稳定的时候进行数据电平采集,在电平变化的时候进行数据发送,一般从设备像高精度ADC等等,出厂就已经是固定了某种模式,我们需要做的就是通过配置可编程的主机SPI外设在相同的一种频率和模式下通信,否则就是造成数据错乱。

现在比较流行库开发,很多外设使用案例直接可以拿过来用,或者尝试着调整几个参数就可以了,似乎不需要懂太多的原理,但这样的学习终究只是把芯片玩起来了,要做到一通百通还是得从最原始的理论出发,只有把握住这些重点才能在项目开发的过程中直面问题并搞定它。

下一篇进阶避坑篇,我们再更加深入聊聊SPI。

原文标题:大话SPI通信--基础巩固篇

文章出处:【微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 总线
    +关注

    关注

    10

    文章

    3015

    浏览量

    91316
  • SPI通信
    +关注

    关注

    0

    文章

    38

    浏览量

    11908
  • MOSI
    +关注

    关注

    0

    文章

    5

    浏览量

    4315

原文标题:大话SPI通信--基础巩固篇

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SPI的多机通信

    SPI支持多机通信模式。在该模式下,主机的从机选择 CS 引脚应配置为输入,与其他主机的总线申请信号相连,用于检测 SPI 总线是否发生冲突。如果某一主机的从机选择 CS 引脚被拉为低电平,说明有
    发表于 12-08 06:47

    串行通信相关的基础知识

    串行通信是电子设备中数据交换的基石。最常见的串行通信协议有UART,SPI,I2C等。
    的头像 发表于 10-15 10:53 1706次阅读
    串行<b class='flag-5'>通信</b>相关的基础<b class='flag-5'>知识</b>

    国内ntp网络授时服务器的发展方向

    完整性到网络安全的各种环节来说,这项操作都至关重要。 我们听过一句话:“科技无国界,但科学家有”;因此作为一项至关重要的的技术,我们必须要自己牢牢把握,而这也就是我们发展的方向。那么作为ntp服务器,我们需要把握住哪些核心科
    的头像 发表于 06-06 13:50 321次阅读

    C51单片机及C语言知识点必备秘籍

    单片机关键知识点一览: 系列一 1:单片机简叙 2:单片机引脚介绍 3:单片机存储器结构 4:第一个单片机小程序 5:单片机延时程序分析 6:单片机并行口结构 7:单片机的特殊
    发表于 05-15 14:00

    电机选型计算公式与知识点汇总

    纯分享帖,需要者可点击附件获取完整资料~~~*附件:电机选型计算公式与知识点汇总.pdf 【免责声明】内容转自今日电机,因转载众多,无法确认真正原始作者,故仅标明转载来源。版权归原出处所有,纯分享帖,侵权请联系删除内容以保证您的权益。
    发表于 04-29 16:10

    串行通信接口SPI与QSPI的区别

    在嵌入式系统的世界里,选择正确的通信技术可以对项目的性能和可扩展性产生重大影响。让我们比较两个流行的串行通信接口:SPI(串行外设接口)和QSPI(四路SPI)。
    的头像 发表于 04-09 15:24 2611次阅读
    串行<b class='flag-5'>通信</b>接口<b class='flag-5'>SPI</b>与QSPI的区别

    电气工程师必知必会的100个电⽓知识点分享

    电⽓⼯程师也都是从电⽓学徒⼯⼀步⼀步积累成长起来的。积跬步⾄千⾥,汇细流成江海!朋友们,现在让我们⾛⼀个捷径,花半个⼩时的时间来积累100个必知必会的电⽓知识点吧!
    的头像 发表于 03-14 11:05 1524次阅读

    华邦电子安全闪存关键知识点

    黑客攻击?高温考验?驾驶安全?通通没在怕的!1月15日,华邦电子举办了“安全闪存强化车用电子安全性”为主题的线上研讨会。为了让没能参加这场线上研讨会的邦友们也可以清晰 Get 安全闪存关键知识点,邦
    的头像 发表于 02-12 18:15 1120次阅读

    SPI通信总线概述和Verilog实现

    SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。
    的头像 发表于 02-07 14:28 2005次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>通信</b>总线概述和Verilog实现

    为什么要把屏幕拿过来调试

    为什么要把屏幕拿过来调试?明思锐显示方案商为您解答。因为每个屏幕的参数会有差别,可能导致屏幕不亮或者显示异常。 显示器驱动板输出的信号和屏幕模组接口的信号相同,且pin定义也相同时,如果是
    的头像 发表于 01-17 09:23 1088次阅读
    为什么<b class='flag-5'>要把</b>屏幕拿过来调试

    Docker-镜像的分层-busybox镜像制作

    目录 知识点1:镜像的分层 示例:进入 docker hub查看Jenkins的Dockerfile 知识点2:base镜像 知识点3:scratch镜像 scratch 镜像是什么? 示例:在
    的头像 发表于 01-15 10:44 1023次阅读
    Docker-镜像的分层-busybox镜像制作

    spi16f887与ldc1000的spi通信,是否对于读、写,都是只需要把CSB变成低电平即可?

    对于ldc1000的spi通信我有以下几个问题: 应用情况是spi16f887与ldc1000的spi通信 1.是否对于读、写,都是只
    发表于 01-14 07:45

    Aigtek功率放大器应用:电感线圈的知识点分享

    电磁驱动是功率放大器的一大基础应用领域,其中我们最常见的就是用功放来驱动电感线圈,那么关于电感线圈的这10大知识点你都知道吗?今天Aigtek安泰电子来给大家介绍一下电感线圈的基础知识
    的头像 发表于 01-07 15:43 1221次阅读
    Aigtek功率放大器应用:电感线圈的<b class='flag-5'>知识点</b>分享

    一些关于ldc1000的spi通信的问题求解

    我有一些关于ldc1000的spi通信的问题。 应用情况是spi16f887与ldc1000的spi通信 1.是否对于读、写,都是只
    发表于 12-26 08:23

    后悔没有早点看到:天线设计中的知识点

    Cat.1 bis R13架构,天线架构精简为单天线架构,去掉了分集接收天线,因此只需要一根天线。   知识点: Cat.1 bis相对于Cat.1的区别是,后者为两根天线(一根主天线,一根分集天线
    的头像 发表于 12-24 17:11 1615次阅读
    后悔没有早点看到:天线设计中的<b class='flag-5'>知识点</b>!