查看: 1781|回复: 8

#每日一练2.24#一起学习SPI通信原理

[复制链接]

该用户从未签到

发表于 2020-2-24 10:07:04 | 显示全部楼层 |阅读模式
分享到:
为鼓励大家动手动脑,早日成为技术大牛。电路城论坛现在推出#每日一练#栏目,由版块版主出题及提供答案,内容涉及电源,射频,单片机等各种技术话题。我们会在周一至周五的早上10:30更新问题和前天问题的解题思路及答案。欢迎大家参与。





本期内容来源于:



模拟狂人,电子信息工程专业,全国大学生电子竞赛省二等奖获得者,对模拟电子技术、数字电子技术、单片机技术学习有丰富经验。现主要从事ARM开发工作,有丰富项目经验。


UART、I2C和 SPI 是单片机系统中最常用的三种通信协议。前边我们已经学了 UART 和I2C通信协议,这节课我们来学习剩下的 SPI 通信协议。
SPI 是英语 Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口。SPI 是一种高速的、全双工、同步通信总线,标准的 SPI 也仅仅使用 4 个引脚,常用于单片机和 EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。SPI 通信原理比 I2C要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的SPI 是 4 根线,分别是 SSEL(片选,也写作 SCS)、SCLK(时钟,也写作SCK)、MOSI(主机输出从机输入MasterOutput/Slave Input)和 MISO(主机输入从机输出 Master Input/Slave Output)。
    SSEL:从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。
    SCLK:时钟信号,由主机产生,和 I2C通信的 SCL 有点类似。
    MOSI:主机给从机发送指令或者数据的通道。
    MISO:主机读取从机的状态或者数据的通道。
    在某些情况下,我们也可以用3 根线的 SPI 或者 2 根线的 SPI 进行通信。比如主机只给从机发送命令,从机不需要回复数据的时候,那么 MISO 就可以不要;而在主机只读取从机的数据,不需要给从机发送指令的时候,那 MOSI 就可以不要;当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么 SSEL 就可以不要;此时如果再加上主机只给从机发送数据,那么 SSEL 和 MISO 都可以不要;如果主机只读取从机送来的数据,SSEL 和 MOSI 都可以不要。
    3 线和 2 线的 SPI 大家要知道怎么回事,实际使用也是有应用的,但是当我们提及 SPI的时候,一般都是指标准 SPI,都是指 4 根线的这种形式。
SPI 通信的主机也是我们的单片机,在读写数据时序的过程中,有四种模式,要了解这四种模式,首先我们得学习以下两个名词。

    CPOL:ClockPolarity,就是时钟的极性。时钟的极性是什么概念呢?通信的整个过程分为空闲时刻和通信时刻,如果 SCLK在数据发送之前和之后的空闲状态是高电平,那么就是CPOL=1,如果空闲状态 SCLK 是低电平,那么就是 CPOL=0。
    CPHA:ClockPhase,就是时钟的相位。
    主机和从机要交换数据,就牵涉到一个问题,即主机在什么时刻输出数据到 MOSI 上而从机在什么时刻采样这个数据,或者从机在什么时刻输出数据到 MISO 上而主机什么时刻采样这个数据。同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样。而一个时钟周期必定包含了一个上升沿和一个下降沿,这是周期的定义所决定的,只是这两个沿的先后并无规定。又因为数据从产生的时刻到它的稳定是需要一定时间的,那么,如果主机在上升沿输出数据到 MOSI 上,从机就只能在下降沿去采样这个数据了。反之如果一方在下降沿输出数据,那么另一方就必须在上升沿采样这个数据。
    CPHA=1,就表示数据的输出是在一个时钟周期的第一个沿上,至于这个沿是上升沿还是下降沿,这要视 CPOL 的值而定,CPOL=1 那就是下降沿,反之就是上升沿。那么数据的采样自然就是在第二个沿上了。
    CPHA=0,就表示数据的采样是在一个时钟周期的第一个沿上,同样它是什么沿由 CPOL决定。那么数据的输出自然就在第二个沿上了。仔细想一下,这里会有一个问题:就是当一帧数据开始传输第一个 bit 时,在第一个时钟沿上就采样该数据了,那么它是在什么时候输出来的呢?有两种情况:一是 SSEL 使能的边沿,二是上一帧数据的最后一个时钟沿,有时两种情况还会同时生效。
大家一起来分析一下各种情况下的时序图吧。

答案:
游客,如果您要查看本帖隐藏内容请回复



答案汇总:https://www.cirmall.com/bbs/thread-161132-1-1.html


参与讨论,即可快速获取以下几本电源书籍(电子版)

想成为论坛版主?想在#每日一练#展现你的技术才华?请联系工程师小助手Q:2740521371

回复

使用道具 举报

  • TA的每日心情
    开心
    2020-6-8 11:41
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-2-26 21:48:02 | 显示全部楼层
    学习一下,想看下后面的答案
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-7-24 03:31
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-7-24 12:59:33 | 显示全部楼层
    学习一下,想看下后面的答案
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2020-8-18 18:41:18 | 显示全部楼层
    1234567888888888
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2021-11-7 01:23:35 | 显示全部楼层
    原始信号就是我们要发送的一个数据“0”位或者一位数据“1”位,而所谓38K 载波就是频率为 38K 的方波信号,调制后信号就是最终我们发射出去的波形。我们使用原始信号来控制 38K 载波,当信号是数据“0”的时候,38K 载波毫无保留的全部发送出去,当信号是数据“1”的时候,不发送任何载波信号。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 08:43 , Processed in 0.202079 second(s), 32 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.