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

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

3天内不再提示

串行通信SPI总线的详解分析

硬件设计解析 来源:爱搞研究的阿灿 作者:爱搞研究的阿灿 2023-05-05 16:40 次阅读

  SPI(Serial Peripheral Interface)总线系统是一种同步串行外设接口,可以是MCU与各种外围设备以串行方式进行通信以交换信息,该接口一般使用4条线:串行时钟线(SCLK)、主入从出数据线(MISO)、主出从入数据线(MOSI)和低电平有效的从机选择线(SS);其主要特点包括:可以同时发出和接收船型数据;可以作为主机或从机工作;发送结束中断标志;写冲突保护和总线竞争保护。
SPI总线架构示意图:
7ac98cde-eb20-11ed-878e-dac502259ad0.png
  SPI是一个环形总线结构,有SS、SCK、SDISDO组成,在主设备和从设备之间进行双向传输,实现发送和接收数据,最高速率可达5Mbps。由SS信号来选定主设备通信的从设备,在某时间点内主设备和从设备之间可以实现点对点通信,不需要进行寻址操作。SPI共有4种工作模式,SP0、SP1、SP2、SP3,其中比较常用的是SP0、SP3。为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行设置。
  如果时钟极性CPOL=0,则串行同步时钟的空闲状态为低电平;如果时钟极性CPOL=1,则串行同步时钟的空闲状态为高电平。
  如果时钟相位CPHA=0,则在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果时钟相位CPHA=1,则在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设时钟相位和极性应该一致。
SPI总线4中工作模式的SCK示意:
7af8134c-eb20-11ed-878e-dac502259ad0.png
  SPI主要工作时序是在SCK的控制下,两个双向移位寄存器进行数据交换。
  假设下面的8位寄存器装的是待发送的数据1010 1010,上升沿发送,下降沿接收,高位先发送。那么第一个上升沿来的时候数据将会是sdo=1,寄存器=0101 010x;下降沿到来的时候,sdi上的电平将锁存到寄存器中去,那么这时寄存器=0101 010sdi,这样在8个时钟脉冲以后,两个寄存器的内容相互交换一次,从而完成了一个spi时序。
7b0f81c6-eb20-11ed-878e-dac502259ad0.png
7b382946-eb20-11ed-878e-dac502259ad0.png
  硬件SPI方式:
  (1)写一个字节:
  SPI_Writebyte(u8 data)
  {
  While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//等待发送缓冲区为空
  SPI_I2S_SendData(SPI1,Data);
  While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//等待接收到一个字节数据
  SPI_I2S_ReceiveData(SPI1);
  }
  (2)读一个字节:
  SPI_Readbyte(u8 data)
  {
  While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//等待发送缓冲区为空
  SPI_I2S_SendData(SPI1,Data);
  While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//等待接收到一个字节数据
  return SPI_I2S_ReceiveData(SPI1);
  }
  解析:当不使用FIFO时,只有一个中断,接收和发送共用一个,因为发送和接收是同时完成的:例如主机上升沿发送下降沿接收,那么从机就是上升沿接收下降沿发送,所以一串时钟之后,主机发送完了数据,从机也发送完了数据。
  软件SPI:
7b4f5f12-eb20-11ed-878e-dac502259ad0.png
7b725814-eb20-11ed-878e-dac502259ad0.png
7b91cd52-eb20-11ed-878e-dac502259ad0.png
7ba86d28-eb20-11ed-878e-dac502259ad0.png
7bc74b94-eb20-11ed-878e-dac502259ad0.png

7bde3f02-eb20-11ed-878e-dac502259ad0.png
  软件SPI方式和硬件SPI方式的区别:
  1.硬件SPI效率高些,编写程序时只需把要发送的数据写到寄存器中,硬件自动进行发送;软件SPI需要根据时序实现时钟拉高拉低,串行数据输出等。
  2.硬件SPI必须要求处理器支持该功能;而软件SPI不需要特定要求,一般的IO口就可以使用
  3.硬件SPI传输速度可以达到3Mbps,软件SPI传输速度一般700K左右。
  总结:在使用SPI时,根据实际情况选择使用硬件SPI,还是软件SPI,注意在使用时确保时序的准确性。


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

    关注

    146

    文章

    16016

    浏览量

    343615
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89600
  • SPI总线
    +关注

    关注

    4

    文章

    100

    浏览量

    27442
  • 串行通信
    +关注

    关注

    4

    文章

    535

    浏览量

    35019
收藏 人收藏

    评论

    相关推荐

    IIC总线SPI总线通信详解

    IIC总线SPI总线通信介绍
    发表于 12-23 07:02

    SPI总线串行外围设备接口是什么

    SPI总线串行外围设备接口,是一种高速的、全双工、同步的通信总线。只占用四根线,(省线)
    发表于 07-19 08:51

    串行通信中的IIC总线工作原理是什么

    数据输出线)。1-wire:即单线总线,又叫单总线(只有一条线)I2C:同步串行2线方式进行通信(一条时钟线,一条数据线)SPI:同步
    发表于 12-08 07:52

    基于SPI串行总线的语音接口电路的软硬件设计

    摘要:使用SPI串行总线可以达到MCU与语音芯片串行通信的目的。通过对PIC单片机与ISD4003的连接电路和软件控制的设计,实现现场语音分
    发表于 05-08 09:29 24次下载

    串行总线分析功能之总线触发与总线分析

    串行总线分析功能分为两个部分,总线触发和总线分析。DLM2000支持标准的CAN/LIN/I2
    发表于 04-07 15:14 1456次阅读
    <b class='flag-5'>串行</b><b class='flag-5'>总线</b><b class='flag-5'>分析</b>功能之<b class='flag-5'>总线</b>触发与<b class='flag-5'>总线</b><b class='flag-5'>分析</b>

    对三种总线SPI、UART、I2C分析理解

    SPI(Serial Peripheral Interface,串行外设接口) SPI是一种高速、全双工、同步、串行通信
    发表于 11-15 12:32 8032次阅读

    单片机串行通信SPI通信教程

    单片机串行通信SPI通信
    发表于 12-20 12:18 11次下载

    一文介绍SPI串行总线

    SPI协议是由摩托罗拉公司提出的通讯协议(SerialPeripheralInterface),即串行外围设备接口,是一种高速全双工的通信总线
    发表于 07-16 17:58 2640次阅读
    一文介绍<b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>总线</b>

    基于SPI串行总线接口的Verilog实现

    与各种外围接口器件以串行方式进行通信、交换信息。本文简述了SPI总线的特点,介绍了其4条信号线,SPI
    的头像 发表于 05-29 10:16 4576次阅读
    基于<b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>总线</b>接口的Verilog实现

    串行总线SPI、IIC、UART

    三种常用的串行数据传输总线一、SPI1.1 概念SPI(Serial Peripheral Interface - 串行外设接口)是一种用于
    发表于 12-06 19:21 2次下载
    <b class='flag-5'>串行</b><b class='flag-5'>总线</b>:<b class='flag-5'>SPI</b>、IIC、UART

    SPI总线协议及详解

    串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现
    发表于 12-22 19:18 17次下载
    <b class='flag-5'>SPI</b><b class='flag-5'>总线</b>协议及<b class='flag-5'>详解</b>

    基于STM32 HAL库的SPI通信原理分析与调试

    一、 SPI原理分析SPI串行外设接口(Serial Peripheral Interface)的缩写。 Motorola 公司推出的一种同步串行
    发表于 12-22 19:22 15次下载
    基于STM32 HAL库的<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>原理<b class='flag-5'>分析</b>与调试

    常用串行总线——SPI协议(下)

    SPI(Serial Perripheral Interface, 串行外围设备接口)** 是 Motorola 公司推出的一种同步串行接口技术。SPI
    的头像 发表于 01-21 17:03 710次阅读
    常用<b class='flag-5'>串行</b><b class='flag-5'>总线</b>——<b class='flag-5'>SPI</b>协议(下)

    超全面!SPI通信协议详解,一篇就够

    什么是SPISPI的英文全称为SerialPeripheralInterface,顾名思义为串行外设接口。SPI是一种同步串行
    的头像 发表于 09-30 10:18 1337次阅读
    超全面!<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>协议<b class='flag-5'>详解</b>,一篇就够

    超全面!SPI通信协议详解

    什么是SPISPI的英文全称为SerialPeripheralInterface,顾名思义为串行外设接口。SPI是一种同步串行
    的头像 发表于 08-14 10:06 2074次阅读
    超全面!<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>协议<b class='flag-5'>详解</b>