精华内容
下载资源
问答
  • SPI通信协议

    2019-06-28 13:58:54
    目录 SPI通信协议1. 1、什么是SPI?2. 2、SPI优点3. 3、缺点4. 4、特点5. 5、协议通信时序详解6. 6、内部工作机制 SPI通信协议 SPI协议及其工作原理浅析 1. 1、什么是SPI? SPI是串行外设接口(Serial Peripheral...

    SPI通信协议

    SPI协议及其工作原理浅析

    1. 1、什么是SPI?

    SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

    2. 2、SPI优点

    • 支持全双工通信
    • 通信简单
    • 数据传输速率块

      3. 3、缺点

    • 没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据 可靠性上有一定的缺陷。

    4. 4、特点

    • 高速、同步、全双工、非差分、总线式
    • 主从机通信模式

    5. 5、协议通信时序详解

    1). 通信原理

    SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多 个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共 有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

    • SDO/MOSI – 主设备数据输出,从设备数据输入;
    • SDI/MISO – 主设备数据输入,从设备数据输出;
    • SCLK – 时钟信号,由主设备产生;
    • CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设 备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需 要将从设备对应的片选引脚电平拉低或者是拉高。 SPI总线
      2). SPI通信模式
      需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配 置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们 可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来 控制我们主设备的通信模式

      时钟极性CPOL: 是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态 时钟相位CPHA : 是用来配置数据采样是在第几个边沿: CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时 CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时 CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿 CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

    具体如下:

    spi时序
    图:spi时序

    需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信 那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的 SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是 保持高电平要么是保持低电平。

    6. 6、内部工作机制

    SPI Data Transfer
    图:SPI Data Transfer
    展开全文
  • SPI 通信协议

    2020-12-17 16:21:37
    SPI 通信协议一、串行通信 VS. 并行通信二、SPI 如何工作1.1.SPI信号列表1.2.SPI工作模式1.3.SPI特点——同步、串行、全双工、主从结构三、SPI数据传输步骤3.1.时钟极性CPOL与时钟相位CPHA3.2.时序图3.3. SPI数据...

    SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外设接口SPI协议主要作为主控芯片去配置外围芯片的接口协议。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步,串行,主从结构通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

    一、串行通信 VS. 并行通信

    数据位可以通过并行或串行的形式传输。在并行通信中,数据位的所有比特位同时发送,每一个比特链接一根独立的导线。下图显示了二进制中字母“ C”(01000011)的并行传输:

    图片

    串行通信中,所有比特位通过单根导线逐一发送。下图显示了二进制中字母“C”(01000011)的串行传输:

    图片

    #二、SPI通信简介

    SPI总线的传输速率需要自定义,没有具体的规定,一般为:400KHz~10MHz(AHB:100MHz,APB:50MHz)。SPI的一个独特优势是可以无中断传输数据。可以在连续流中发送或接收任意数量的位。使用I2C和UART,数据以数据包的形式发送,限制为特定位数。开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。

    • 主要功能实现MCU与各种外接设备连接(芯片与芯片之间的连接),以串行的方式进行数据交换(串并转换
    • 拓扑结构一个SPI Master可以通过共享数据线的方式可以连接多个SPI Slave(一主多从)
    • 接口配置作为芯片与芯片之间互连的接口,通过配置寄存器实现主控芯片(SPI Master)对外围芯片(SPI Slave)的配置

    二、SPI 如何工作

    1.1.SPI信号列表

    信号名 含义 描述
    SCLK Serial Clock、时钟信号线 Master 设备往 Slave 设备传输时钟信号, 同步控制数据交换的时机以及速率
    MOSI Master Ouput Slave Input、主设备输出从设备输入数据线 在 Master 上面也被称为 Tx-Channel, 作为数据的出口, 用于SPI主设备发送数据
    MISO Master Input Slave Ouput、主设备输入从设备输出数据线 在 Master 上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI从设备接收数据
    SS/CS Slave Select/Chip Select、从机选择线,低电平有效 Master 设备片选 Slave 设备, 使被选中的 Slave 设备能够被 Master 设备所访问

    SS、SCLK、MOSI信号均由主设备产生,MISO信号由从设备产生。在SS为低电平的前提下,MOSI和MISO信号才有效,在每个时钟周期MOSI和MISO传输一位数据。

    1.2.SPI工作模式

    SPI通讯需要使用4条线:3条总线和1条片选,物理连接如下:

    图片

    SPI还是遵循主从结构,SPI协议适用于一主 多从的两种工作场景:

    图片

    如果仅存在一个CS / SS引脚,则可以通过菊花链将多个从设备连接到主设备:

    图片

    1.3.SPI特点——同步、串行、全双工、主从结构

    1. 同步方式(Synchronous)传输数据
        Master设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的
    2. 主-从结构(Master-Slave) 的控制方式
        SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave)一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock。
    3. 串行、全双工方式数据交换(Data Exchanges)
        SPI 设备间的数据传输之所以又被称为数据交换(全双工通信), 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”. 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据(串行通信)(不管主设备好还是从设备),相当于该设备有一个 bit 大小的数据被交换了。

    需要说明的是,SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

    三、SPI数据传输步骤

    3.1.时钟极性CPOL与时钟相位CPHA

    SPI 设备在进行通信的过程中, Master 设备和 Slave 设备之间会产生一个数据链路回环(Data Loop)
      SPI接口有四种不同的数据传输时序,取决于时钟极性(CPOL)和时钟相位(CPHA)的组合。

    • CPOL:表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1;
    • CPHA:表示对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿;

    1)、CPHA=0,表示第一个边沿:

    对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
       对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
    2)、CPHA=1,表示第二个边沿:

    对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
      对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

    在这里插入图片描述

    3.2.时序图

    在这里插入图片描述

    结合上面的时序图,Bit1为MSB,Bit8为LSB。假设CPOL=0,CPHA=0。在SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿),在时钟的后沿输出数据。先看主器件,主器件的输出口(MOSI)输出数据bit1,在时钟的前沿被从器件采样,那主器件是何时输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期,bit1的输出时刻与SS_n信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时输出bit1的呢?从器件实在SS_n信号有效后,立即输出bit1,尽管此时SCK信号还没有生效。

    3.3. SPI数据传输步骤

    1、主设备输出时钟信号:

    图片

    2、主设备将SS / CS引脚切换到低电压状态,从而激活从设备:

    图片

    3、主设备使用MOSI信号线每次将1比特数据发送到从设备。从设备读取接收到的数据比特:

    图片

    4、如果需要响应,则从设备使用MISO信号线每次将1比特数据返回给主设备。主设备读取接收到的数据比特:

    图片

    可以看出bit1的输出时刻LSB First实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期

    四、SPI总线的优点与缺点

    使用SPI总线有一些优点和缺点,如果要在不同的通信协议之间进行选择,则应根据项目要求来判断何时使用SPI总线:

    优点

    • 无起始位和停止位,因此数据位可以连续传输而不会被中断
    • 没有像I2C这样复杂的从设备寻址系统
    • 数据传输速率比I2C更高(几乎快两倍)
    • 分离的MISO和MOSI信号线,因此可以同时发送和接收数据

    缺点

    • 使用四根信号线(I2C和UART使用两根信号线)
    • 无法确认是否已成功接收数据(I2C拥有此功能)
    • 没有任何形式的错误检查,如UART中的奇偶校验位
    • 只允许一个主设备

    参考:

    电子通信协议之SPI通信协议篇

    https://blog.csdn.net/weixin_46022434/article/details/105624672

    展开全文
  • spi通信协议

    2018-11-08 22:24:46
    下面主要是讲解下个人对于spi通信时序图以及通信协议的理解(有说错的请大指出,小弟也是刚学的有很多不懂)。 下面进入正题:  SPI简介 SPI就是串行外围设备接口,它是一种高速的,全双工,同步的通信总线,...

    学单片机必须要掌握的集中串行通信协议中spi就是其中之一。

    下面主要是讲解下个人对于spi通信时序图以及通信协议的理解(有说错的请大指出,小弟也是刚学的有很多不懂)。

    下面进入正题:

     SPI简介

    SPI就是串行外围设备接口,它是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,这四根线的定义分别是:

     MISO:主设备数据输入,从设备数据输出;

     MOSI:主设备数据输出,从设备数据输入;

     SCLK:时钟信号,由主设备产生;

     CS:从设备片选信号,由主设备控制

    SPI为了和外设进行数据交换,根据外设工作要求(具体得看外设spi读写时序图,有时序图编写驱动代码),其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

    spi内部结构图:

    SPI总线数据传输时序图如下图:

    总结:spi通信为4线全双工,spi通信由于时钟极性(CPOL)时钟相位(CPHA)的不同可以配置为4种模式。完成一位数据传输是在一个周期两个跳变沿内完成的,一个跳变沿采样(可以理解为:内部移位寄存器读取io值),一个跳变沿数据输出(可以理解为:内部移位寄存器将最高位移动到io口上)。

    具体移动过程参考此帖子:http://bbs.elecfans.com/jishu_441914_1_1.html

    时钟前沿输出:

     

    时钟后沿采样:

    就这样一个周期完成一位数据的交换。

    stm32spi主模式下数据的发送与接收:

    数据发送过程
    当写入数据至发送缓冲器时,发送过程开始。
    在发送第一个数据位时,数据字被并行地(通过内部总线)传入移位寄存器,而后串行地移出到MOSI脚上; MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位的设置。数据从发送缓冲器传输到移位寄存器时TXE标志将被置位,如果设置了SPI_CR1寄存器中的TXEIE位,将产生中断。
    数据接收过程
    对于接收器来说,当数据传输完成时:
    ● 传送移位寄存器里的数据到接收缓冲器,并且RXNE标志被置位。
    ● 如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。
    在最后采样时钟沿, RXNE位被设置,在移位寄存器中接收到的数据字被传送到接收缓冲器。读SPI_DR寄存器时, SPI设备返回接收缓冲器中的数据。读SPI_DR寄存器将清除RXNE位。
    一旦传输开始,如果下一个将发送的数据被放进了发送缓冲器,就可以维持一个连续的传输流。在试图写发送缓冲器之前,需确认TXE标志应该为’1’。

    总结;  发送端:数据---DR寄存器---->缓冲区----->移位寄存器------>一位一位的发送到主机输出口

    接收端:读取miso口数据(从机发来)到移位寄存器---->读取8位后放入缓冲区-----DR寄存器

    程序的读写数据都是对缓冲区操作的。发送缓冲寄存器为空TXE=1,接收缓冲寄存器不为空RXNE=1,所以spi读写数据过程:

    发送数据时:判断发送缓冲寄存器是否为空为空则发送,

    接收数据时:判断接收缓冲寄存器是否非空,是则读取数据。

    例如:

    u8 SPI1_ReadWriteByte(u8 TxData)
    {
           u8 retry=0;
           while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的 SPI
                                                                                                                              //标志位设置与否:发送缓存空标志位
    {
            retry++;
           if(retry>200)

           return 0;
     }
           SPI_I2S_SendData(SPI1, TxData); //通过外设 SPIx 发送一个数据
           retry=0;
           while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)//检查指定的
                                                                                                                             SPI 标志位设置与否:接受缓存非空标志位
    {
            retry++;
            if(retry>200)return 0;
    }
             return SPI_I2S_ReceiveData(SPI1); //返回通过 SPIx 最近接收的数据
    }
    stm32 spi初始化过程:

    配置步骤
    1. 通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
    2. 选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系(见图212)。
    3. 设置DFF位来定义8位或16位数据帧格式。
    4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。
    5. 如果需要NSS引脚工作在输入模式,硬件模式下,在整个数据帧传输期间应把NSS脚连接
    到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作
    在输出模式,则只需设置SSOE位。
    6. 必须设置MSTR位和SPE位(只当NSS脚被连到高电平,这些位才能保持置位)。
    在这个配置中, MOSI引脚是数据输出,而MISO引脚是数据输入。
    例如:

    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置 SPI 全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置 SPI 工作模式:设置为主 SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 8 位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//选择了串行时钟的稳态:时钟悬空高
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS 信号由硬件管理
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //预分频 256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从 MSB 位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC 值计算的多项式
    SPI_Init(SPI1, &SPI_InitStructure); //②根据指定的参数初始化外设 SPIx 寄存器
    SPI_Cmd(SPI1, ENABLE); //③使能 SPI 外设
     

     

     

    展开全文
  • SPI通信协议的介绍

    2020-07-20 16:20:38
    本文章是关于SPI通信协议的介绍。
  • SPI通信协议笔记

    2019-03-01 14:51:15
    比较详细的SPI通信协议博客: SPI通信协议 SPI通信协议-博客园

    比较详细的SPI通信协议博客:

    SPI通信协议

    SPI通信协议-博客园

    展开全文
  • 串口通信协议之SPI通信协议 SPI通信协议 什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 SPI优点...
  • SPI 通信 协议 中文

    2012-02-15 09:52:49
    SPI 通信 协议 中文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,729
精华内容 691
关键字:

spi通信协议