[016] [STM32] SPI协议详解及CubeMX+HAL函数配置分析

      最后更新:2022-04-03 22:15:10 手机定位技术交流文章

      1 SPI协议

      连续外围装置接口(SPI)连续外围装置接口是同步的全时通讯巴士,芯片管脚上只有四条线。

      1.1 物理层

      image-20220402173102965

      • SS/NSS/CS:从设备中选择信号线。该信号线由主设备控制,并从设备中选择指定的信号线。

        当主机从列表中选择设备时,设置为低高度 通过设备 SS 信号线。该从设备即被选中,即片选有效,然后,主机开始与设备中指定的SPI进行通信。因此,SPI的传输从SSIS线路的低级别信号开始。作为终端信号 SS线被激活了

      • SCK时钟信号线。 两个设备之间的通讯速度限于低速设备,以便通讯数据同步,这只能由主要设备产生。

      • MOSI(主输出,奴隶输入):主要设备产出/来自设备输入的指导。主脚向模式提供数据,并从模式接收数据。

      • MISO(主输入,奴隶输出):主要设备输入/制导来自设备输出。它从模式中传输和接收数据。

      1.2 协议层

      SPI公共汽车的内部结构如下:
      在这里插入图片描述

      结构抽象图:
      在这里插入图片描述
      在时钟信号控制下,主机打算发送的数据已写入数据缓存( 记忆) 。缓存区由8位数的值班记录器扫描。系列港口转移登记系统通过MOSI信号线,一次从机器传输数据。移动登记册上的一人将机器MISO接口上的数据移动到数据缓存(记忆)上。它还通过MOSI向主机传送自己的移动登记数据。两个移动登记册的数据是交互式的。读写同时进行。

      因此, SPI 读写同步。 如果主机仅仅是写作, 收到的字节会被忽略; 如果主机要读取机器的字节, 必须给空字节来触发机器的传输 。

      一. 2.1 极化时钟和时钟式时钟

      • 时钟极性CPOL:表示SCK信号线的平面信号(即SCK在电源高峰时的状况,而SPI通信闲置(即在SPI通信开始之前))
        • CPOL=1:SCK水平较低,但免费。
        • CPOL1:当自由时,SCK处于高水平。
      • 时钟相位CPHA:指数据取样点。
        • CPHA= 0:MOSI/MISO数据线上的信号将在SCK时钟的“奇缘”(首次跳跃开始)取样。
        • CPHA= 1:MOSI/MICO数据线上的信号将在SCK时钟的“偶边缘”(第二次跳跃开始)取样。

      SPI模式 时钟极性CPOL 时钟相位CPHA 空闲时SCK时钟 采样时刻
      0 0 0 低电平 第一个边沿(奇)
      1 0 1 低电平 第二个边沿(偶)
      2 1 0 高电平 第一个边沿(奇)
      3 1 1 高电平 第二个边沿(偶)

      CPOLCPHASPI在不同条件下分为四种模式, 主机和机器必须用同一模式运作,才能正确互动,但实际上它比“模式3”更“模式0”和“模式3”。

      一.二.2 通信条约

      与IIC相比,SPI没有限制传输率、装置地址、通信响应方法或流量控制限制;只要四条线路有适当连接,并且SPI模式一致,而且装置的CS片断已经下降,它就可以与它直接互动,同时读写数据。

      当自由时SCK是低水平的,CPOL = 0,CPH = 1,SPI 模式2开始在第二边缘进行取样。

      • SPI通信的初始信号是1个NSS电线,从高到低。

      • 2/3/4/5 奇异边缘取样和奇异边缘触发器

      • 6个NSS从低到高的线路是SPI通信中断信号。

      1.3 SPI通信软件模拟

      初始化代码:

      MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI MOSI

      对SPI通信进行模拟(CPOL=0,CPHA=0)。

      • 读/写单个字节
      • 读写同时进行

      SPI 硬件STM32 2

      SPI第2号硬件SPI框架框架

      在这里插入图片描述

      2.2 SPI模式

      在这里插入图片描述

      建立SPI的步骤 2.3

      • 设置 BR [2.0] 比特来确定序列时钟端点速率(主要模式要求,视模式中时钟频率而定)。
      • 选择 CCPOL 和 CPHA 位元 。
      • 设置 DFF 比特以建立 8 或 16 比特的数据框格式 。
      • 配置 SPI_CR1 登记册的 LSBFIRST 位元来确定框架格式( msb 或 LSBs) 。 (默认为)Motorola模式,如果选择TI此步骤在模式中是可选的 。 )
      • NSS引脚配置
        • 主模式:如果NSS foot被配置为输入,则在NSS硬件模式序列的字节分布中,它与一个高级别信号相连;在NSS软件模式中,它将与一个低级信号连接。SPI_CR1寄存器中的SSM和 SSI位置一. 如果NSS基点被指定为输出,则只能使用一次。SSOE位置 1。如果选择TI此步骤在模式中是可选的 。
        • 模式 : 在硬件模式中, NSS 在整个传输序列的字节中踢动必须连接到低水平。 在软件模式中, NSS 将踢动所有发送序列的字节, 必须连接到低水平 。SPI_CR1寄存器中的SSM位置 1,将SSI位清零。如果选择TI此步骤在模式中是可选的 。
      • 在主模式中, SPE 位置 1 激活 SPI( 模式的 MSTR 0 ) 。

      2.4 事件标志

      在这里插入图片描述

      在STM32F4/L0上存在T框架格式错误指示,但在F1上则不存在。

      二、四.1 状况指标

      • TXE( 发送缓冲区空)

        当此符号设置为 1 时, 它表示传送缓冲区为空, 下一个要传送的数据可以放入缓冲区。 TXE 符号在写入 SPI_ DR 登记册后被清除 。

      • 无空接收缓冲区(RXNE)

      当这个标记设置为 1 时, 它表示接收的缓冲区内有合法接收的数据。 当读取 SPI_ DR 时, 标记为零 。

      • BUSY

        BSY标志由硬件1和零表示。用来控制SPI通信的状态BSY=1:表明SPI参与通信。然而,有一个例外:在主要模式的双向接收模式(MSTR=1,BDM=1,BDOE=0)中,主要模式的双向接收模式(MSTR=1,BDM=1,和BDOE=0)中。在整个接收阶段, " BSY " 表示值仍然暗淡。在以下情况下,硬件将重置:

        • 传输完成时<主模式连续通信除外>
        • 关闭SPI
        • 发生主模式故障时 <MODF=1>
        • 如果通信不是连续的,则BSY的表示值在两者之间处于低水平。
        • 当通信连续时:
          • 在所有广播中,主要模式的BSY标记仍然很高。
          • 在输电之间的SPI时钟周期中,BSY指标是低水平的。

      二. 四.2 错误

      主模式失败 (MODF)

      • 主模式故障, 当主设备 NSS 调低( NSS 硬件模式) 或 SSI 是 0 ( NSS 软件模式) 时自动插入 MODF 1 。
      • 受STI影响的外在因素:
        • 如果 ERRIE 位数设为 1, MODF 位数设为 1, 并创建 SPI 。
        • SPE 略为清晰。 这将关闭设备的所有输出和 SPI 接口 。
        • 由于 MSTR 是空的, 设备被迫从模式输入 。
      • 清除错误标记,允许在 MODF 位置 1 的 SPI_SR 注册处进行读写访问,然后写入 SPI_CR1 注册处。

      为了避免在与多个多边协调单位的系统中出现多模式冲突,在MODF零位序列中必须提升NSS比特。 在零序列之后,SPE和MSTR比特可以返回到以前的状态。

      溢出错误(OVR)

      • 当从主设备传输数据字节,而由前一设备收到的数据构成的RXNE位置没有清除时,就会发生重叠。
      • 受STI影响的外在因素:OVR 位置 1 并在 ERRIE 位置 1 时生成一个中断。此时接收器缓冲区内容不会更新,主器件后续发送的数据均丢失
      • 依次读取 SPI_DR 登记簿,而 SPI_SR 登记簿可以清除错误标记。

      CRC错误

      • 移动登记册中收到的价值与造成问题的SPI_RXCRCR的价值不符。

      该手册没有提到对STI外包或如何消除错误标记的影响。

      TITI 框架格式问题

      • 错误原因:SPI从模式下,且配置为符合 TI 模式协议,则在持续通信期间出现 NSS 脉冲 时,将检测到 TITI 框架格式问题。
      • 受STI影响的外在因素:SPI_SR 寄存器中的 FRE 标志将置 1,当发生错误时, SPI 将不会被关闭 。然而,它忽略了NSS脉冲。SPI还将等待下一次NSS脉冲。然后我们开始一个新的传输。因为发现错误可能导致损失两个数据字节,因此,数据可能会被损坏。
      • 读取 SPI_SR 注册以清除错误标记 。

      2.5 主要寄存器

      在这里插入图片描述

      2. 6立方体MX配置

      在这里插入图片描述
      在这里插入图片描述
      模式设置

      • 全全双机主机/机器模式
      • 双重主机操作/机器模式
      • 只支持主机/ 模式 。
      • 只发送主机/ 从机器模式发送

      硬件NSS信号

      • 不使能
      • NSS输入信号
      • NSS输出信号

      基本参数

      • 摩托罗拉摩托莫洛拉或Ti框架格式框架格式:摩托罗拉摩托罗拉或Ti
      • 用于数据大小的 8 或 16 位数
      • 第一点是MSB/LSB。

      时钟参数

      • 波特率分配因子:
        在这里插入图片描述
      • CPOL时钟的对极性要么低要么高。
      • CPHA时钟阶段:一或两边缘

      高级参数

      • 检查 CRC 循环: 能力/失效
      • NSS信号类型:软件

      2.7 HAL图书馆的SPI功能

      MX SPI 初始化设置 :

      对于问题模式, SPI 发送、 接收、 接收和发送功能 :

      这些功能也可以以中断的DMA模式提供。

      参考:

      • HAL图书馆 STM32 CubeMX 十四-SPI[STM32]
      • SPI 通信模拟STM32
      • SPI 接口软件模拟程序代码(4种模式)

      END

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/21389.html

          热门文章

          文章分类