STM32SPI协议通信详解

      最后更新:2022-05-22 10:12:36 手机定位技术交流文章

      目录

      • 一.SPI协议简介
      • 二.SPI物理层
      • 三.SPI协议层
        • 一. 通信开始和停止信号
        • 2.数据有效性
        • 三. 时钟信号相和极度(重点)
      • IV. SPI特征和结构(重点)
        • 1.通信引脚
        • 2.时钟控制逻辑
        • 三. 数据控制逻辑(临界)
        • 四. 完成复入境和接收程序模式(关键)
        • SPI 初始化结构 5
      • NM25Q64EV 诺法拉什芯片五
        • FLASH简介
        • 一. 北FLASH储存特性(集中)
        • 2. FLASH指令摘要(着重)
        • 1)读取设备ID号
        • 2) RSM1(读国家记忆)
        • 3)擦除扇区
        • 3)写使能
        • 4)页写入数据
        • 5)读取数据
        • 第六,FALSH低功率模式和觉醒
      • 使用 SPI 读写串行 FLASH 游戏。
        • 实验目的
        • 实验原理
        • 源码
      • 总结

      一.SPI协议简介

      摩托罗拉的 SPI 协议( 连续近光界面) 是通信协议( 连续近光界面) 。半时/全时该界面可以设置为主模式,提供设备外部通信时钟,也可以配置多层主机,可用于若干应用,包括双线单体工人通过双向数据线同时传输,以及使用经《儿童权利公约》验证的可靠通信。
      它通常用于ADC、LCD和其他装置和需要更高通信率的多边协调单位之间。

      SPI经常每天24小时从两个方向进行交流:

      • 全职双工作通信:两个装置同时通信同时收发数据双向程序不需要方向开关,它既需要发件人,也需要接收人,但它确实需要两条数据线。
        在这里插入图片描述

      二.SPI物理层

      SPI 通用通讯设备连接:
      在这里插入图片描述
      只有三条公共汽车线,所有关键装置或来自设备SCK、MOSI和MISO的信号线都同时连接到同一辆SPI公共汽车上。

      • CS片选信号线

      (奴隶选择):从设备中选择信号线, 即选择片段的信号线, 也称为NSS, CS。 当设备通过多个 SPI 连接到 SPI 主机时,每个装置都有不同的NSS信号线此信号线是主机触发器之一的特有信号线, 即从设备中选择了多少个, 以及选择了多少个。 当主机从设备中选择时, 请取它从装置的NSS信号线 设定到低水平,该工具是选择的,主机启动与选定设备的 SPI 连接, 而该设备的其他未选中数据传输( NSS 到高级) 忽略了总线 。
      SPI通信从低NSS线路开始,以高NSS线路结束。

      • SCK时钟信号线

      SCK( 序列时钟) : 用于同步通信数据的时钟信号线 。只能由通讯主机产生决定了通讯的速率由各种设备支持的STM32型SPI时钟的最高频率是fpclk/2,两个装置之间的通信仅限于低速设备。

      • 该机器向MOSI主机发送数据线。

      MOSI(主输出,奴隶投入):初级设备产出/来自初级设备投入的指导。
      主机发送来自机器的数据,接收来自机器的数据。

      • MOSI主机接收由机器传输的数据线。
        MISO(主输入,奴隶输出):设备输出的主要设备输入/制导。
        数据从服务器传输到主机,主机接收数据。

      你的意思是不需要写首字母缩写?

      三.SPI协议层

      一. 通信开始和停止信号

      NSS是机器专用的信号线

      • 当从机器自己的NSS线探测到初始信号时,选择成功,并准备与主机进行互动。
      • 停止信号:NSS信号是来自SPI通信的低到高信号,表明通信中断,机器指定状态被取消。

      2.数据有效性

      SPI使用MOSI和MISO信号线传输数据和SCK信号线同步数据。MOSI和MISO数据线在公共汽车上。SCK每时钟周期需要一个数据点 。数据输入和输出同时进行 这意味着我们当您发送一个数据时,您也将获得一个数据。MSB第一级或LSB第一级是不需要的,可以配置,但双向通信方法是不变的,MSB首先在大部分时间使用。

      与其它协议一样,SPI协议保证在收集数据时数据稳定,并能够准备数据传输,以便在触发时进行下一次数据传输,但当收集到关于CPOL时钟两极分化的数据时,如何设置时钟。

      三. 时钟信号相和极度(重点)

      SPI_CR登记册的PCOL和CPHA比特可用于形成四种不同的时间序列关系。

      • CBOL时钟的极度

      CCPOL( 时钟极) 位置设定在 :没有数据传输的时钟水平 。主要模式和模式设备都是如此。

      如果CPL已经清除了"0",SCK已经启动并运行。空闲状态保持低电平;
      如果CCPL设为“ 1 ”, SCK 将被激活 。空闲状态保持高电平。
      在这里插入图片描述

      • 时钟阶段CPHA(时钟框架)

      如果CPHA 位元设为“ 1 ”, 则启动SCK 时钟 。第二个边沿为了保持数据稳定,数据比特被抽样并紧紧锁在第二钟上。
      (如果是"0",就是"0",是"1",就是"1",就是了"0")

      如果CPHA设为 '0', SSCK 时钟将被重置 。第一个边沿数据比位抽样,数据锁定第一时钟(数据稳定性)
      (如果CBOL在“ 1” 中, 它在样本下方, 如果在“ 0 ” 中, 它在样本上方 。)

      因此,根据CPOL和CPHA的数值(加上四项调查结果),不能完全确定数据是否一直在增加或下降。

      • 当CPHA位为1时 如果是"0",就是"0",是"1",就是"1",就是了"0"

      在这里插入图片描述

      • 当CPHA位为0时 如果CBOL在“ 1” 中, 它在样本下方, 如果在“ 0 ” 中, 它在样本上方 。

      参考上图即可,凌晨一点,只是CPHA,今天是第一天

      • CCPOL和CPHA的登记安排

      在这里插入图片描述

      总结:
      在这里插入图片描述
      拟使用的确切模型由双方支持连接的模型确定,如果我们任意配置主机,这一实验的FLASH支持模式0和3就足够了。

      IV. SPI特征和结构(重点)

      SPI框图:
      在这里插入图片描述

      1.通信引脚

      在这里插入图片描述
      SPI2和SPI3允许I2S通信,因为I2S协议与SPI协议相似,因此它们有一套相同的逻辑,即上面的SPI框架。
      在这里插入图片描述

      2.时钟控制逻辑

      在这里插入图片描述
      波特速率生成器控制SCK线的时钟信号, 以 BR [0: 2] 位元为基础, 在“ Control Repositor CR1” 中, 这是 fpclk 钟的分数频率系数, 以及 fpclk 输出时钟频率的频率, 即 SCK 页脚 。
      在这里插入图片描述
      STM32 SPI是作为主机和接口提供的,用于处理最高SCK时钟频率fpclk/2(STM32F103上的fpclk1为72兆赫,STM32F103上的fpclk2为36兆赫)。

      SPI1附属于APB2大客车,最大传输速率为fpclk2/2=36Mbtis/s。
      SPI2和SPI3被放置在APB1公共汽车上,通信率最高为Pklk1/2=18Mbits/s。

      三. 数据控制逻辑(临界)

      收到的数据在收到时保存在内部接收器缓冲器中。
      在传送之前,数据将在发送时存放在内部发件人缓冲区内。
      如果读取 SPI_DR 登记册, 接收缓冲内容将返回 。
      写入 SPI_DR 登记册的数据存储在发件人缓冲器中。

      理解以下图表至关重要:
      为了制作时钟, 只有主机能提供数据 。因此,即使主机只接收数据,我们也必须从主机传输数据,只要它发送的数据被意外忽略。
      在这里插入图片描述MOSI的脚相互连接, MISO的脚相互连接。 这样数据就可以在主体和下一个主体之间相继传递( 前方的MSB ) 。主设备通过MOSI脚从设备中发送数据,通过MISO脚从设备中转发数据。这表明数据输入和输出以同一时钟信号同步进行。主设备通过SCK脚提供时钟信号。

      总结:
      序列移动器通过MOSI信号线向机器发送字节,序列移动器的内容通过 MISO 信号线返回主机,交换两个移动器的内容。

      所有标准书写和阅读操作都同步进行。
      机器向主机传送数据信息,主机几乎肯定会得到另一个字节(可能毫无用处)。由于数据交换相当于两个装置的迁移内存,在数据发送时,数据交换传输了一个数据,并同时收到一个数据。

      主机接收从机发送的数据时,由于为了制作时钟, 只有主机能提供数据 。驱动移位寄存器,所以要向从机发送一个空字节

      • 一. 如果只做了笔记操作,主机就完全无视收到的字节。
      • 二. 如果东道方希望从机器收到字节,它必须首先发送空字节,以便启动从机器的传输。
        在这里插入图片描述
        在这里插入图片描述

      以STM32主模式, 开始传输 。
      重点看全双工模式:
      在这里插入图片描述
      我们平时都是全天候忙着这些花 谁会有时间?

      • 全职(BIDIMIMDE=0和RXONLY=0)模式
      - 将数据写入 SPI_DR 登记册(发送缓冲)时开始传输。
      数据从发送者平行发送到八位数移动登记册(可与仅一个时钟周期平行传输),然后在交付第一批数据的同时,依次移动到MOSI脚。
      同时,MISO脚上收到的数据被相继转入八位数移动登记册,然后与SPI_DR登记册(收到缓冲)平行发送。

      • 单向接收(BIDIMODE=0和RXONLY=1)
      - 传送从SPE=下午1时开始。
      - 仅启用接收器,MISO脚上收到的数据将逐步转入八位数的迁移登记簿,然后与SPI_DR登记簿(接收缓冲)平行发送。

      • 双向交付(BIDIMODE=1和BDIMOE=1)
      - 将数据写入 SPI_DR 登记册(发送缓冲)时开始传输。
      - 初始数据由发送者发送,与八位数字移动器登记册平行,然后按顺序移动到MOSI脚上。
      ─ 不接收数据。

      • 双向接收模式(BIDIMODE=1和BDIMOE=0)
      - SPE=1,BIDIOE=0,开始传输。
      - MOSI脚上收到的数据按顺序移入八位数移动登记册,并同时传送到SPI_DR登记册(收到缓冲)。
      - 发射机失效,没有数据通过绳子传送到MOSI脚上。

      四. 完成复入境和接收程序模式(关键)

      准备工作:
      理解以下形象至关重要:
      总之,主机发送一个字节的数据并接收一个字节的数据。
      在这里插入图片描述
      TXE RXNE的第二项理解:
      SPI_DR数据储存库与两个缓存库相关联:数据分发缓存和数据接收缓存。

      • 数据的发送

      当数据从发送者传输到移动内存时,将设置 TXE 标记(发送缓冲是空的)。下一个数据可由内部发送人接收。如果设置 SPI_CR2 登记册中的 TXEIE 位元, 此时会发生中断 。要清除 TXE 位元, 请向 SPI_ DR 注册处写入 。

      注1:在写给发件人缓冲符时,程序必须检查 TXE 符号为“ 1 ” ;否则,新数据将覆盖发件人目前的数据。
      注1: 存于缓存中的数据只有在由一人,即一人,向移动登记册发送后,才会传送到移动登记册中。移民登记册的数据不会被覆盖。

      • 数据的接收

      在取样时钟的最后边缘随着数据从移动登记册传送到接收缓冲,将出现下列情况:设置 RXNE 指示器( 接收器缓冲区不是空的); 这表示数据是可用的 。可从 SPI_DR 登记册中读取;如果在 SPI_CR2 登记册中设置 RXNEIE 空格, 可以读取 。此时将发生中断;为了清除RXNIE标记,请阅读 SPI_DR 登记册。在一些设置中,BSY表示值可用于等待数据传输完成,同时传输最后的数据。

      • 平行连锁差异的第三种解释
        在这里插入图片描述
        发送数据:数据被并行,然后从发件人发送到移动登记册(平行传输需要一个时间周期)串行转入MOSI脚(序列转移需要一个时钟周期)。
        接收数据:按时间顺序排列的MISO脚上收到的数据串行然后转到8位数的移动登记册。并行SPI_DR 登记册(接收缓冲)已移交。

      总而言之,同时把登记簿转到缓存处,内存转到领先线。
      重点来了:
      在这里插入图片描述
      事实上,你们知道你们面前的是什么,这幅图象没有问题。

      SPI 初始化结构 5

      在这里插入图片描述

      • SPI_Direction
        等我们做了彻底的介绍 再说吧
        在这里插入图片描述

      • SPI_Mode
        此元素配置 SPI 任务, 从主机模式( SPI_ Mode_ Master) 或机器模式( SPI_ Mode_ Slave) 从主机生成时钟信号 。如果从机器模式STM32中设置为 SPI 外部, 它将会接受外部 SSCK 信号 。
        在这里插入图片描述

      • SPI_DataSize
        此成员可以指定 SPI 通讯的数据框架大小是 8 位( SPI_ DataSize_ 8b) 还是 16 位( SPI_ DataSize_ 16b) 。
        在这里插入图片描述

      • SPI_CPHA和SPI_CPOL SPI_CPHA和SPI_CPOL SPI_CPHA 和SPI_CPOL SPI_CPHA 和SPI_CPHA SPI_CPPI
        在这里插入图片描述在这里插入图片描述

      • SPI_NSS
        此组件配置 NSS 脚的操作模式 。您可以选择使用硬件模型( SPI_ NSS_ Hard) 或软件模型( SPI_ NSS_ Soft) 。在硬件模式中,SPI视频选择信号由SPI硬件自动生成。此外,软件模型需要我们人工增加或降低相关的GPIO端口,以便提供非狙击和电影选择信号。实际上,有更多的软件模型应用。在这里插入图片描述

      • SPI_BaudRatePrescaler
        在这里插入图片描述

      • SPI_FirstBit

      这一结构的成员可编入STM32 SPI模块,以控制这一功能。
      在这里插入图片描述

      • SPI_CRCPolynomial

      这是以多种方式执行SPI的《儿童权利公约》核查工作。如果我们使用CRC检查,这是首次允许成员使用该成员的参数(多个公式)。计算了CRC值。根据这些结构各组成部分的配置,要将这些参数写入登记册, 我们必须使用 SPI_ Init 函数 。实
      当前 SPI 在使用 SPI_ cmd 启用 SPI 之前先初始化 。

      下面的作为了解:

      状态标志
      该方案可以利用三个状况指标彻底监测斯皮尔斯公共汽车的状况。
      发送空缓冲指示( TXE) 。
      此符号为“ 1 ”, 以信号显示发报机是空的, 您可以将下一个数据传送到缓冲。 在写入 SPI_ DR 时, TXE 标记将被删除 。
      无空接收缓冲(RXNE)
      此符号是“ 1 ”, 表示接收器缓冲中存在有效的接收数据。 此符号通过读取 SPI 数据登记册被删除 。

      忙(Busy)标志
      SPI电信层用BSY表示,用硬件设置和删除(写作无效)。
      当设定为“ 1 ” 时, 它表示 SPI 进行通信, 只有一个例外: 在主要模式双向接收模式( MSTR=1, BDM=1, 和 BDOE=0) 接收时, BSY 标记保持低位 。在软件关闭 SPI 模块并进入模式( 或关闭设备钟) 之前, BSY 标记可用于识别传输的结束, 防止中断先前的传输, 要求严格遵守以下程序 :
      在多领域系统中,BSY标记也可以用来避免书面冲突。
      除了主模式的双向接收模式(MSTR=1、BDM=1和BDOE=0)外,BSY符号在传输开始时设置为“1”。
      如果符合下列任何条件,标记将删除为“0”。
      • 传输终止(主要模式,除非使用连续通信);
      关闭 SPI 模块时;
      • 当主要生产方式(MODF=1)失败时。
      如果信息通报不是连续的,则数据项传输之间的BSY指标较低。
      当通信是连续时:
      • 在主模式下,BSY信号在传播期间保持高位;
      • 从模式上看:每个数据项目传输之间的SPI时钟周期,BSY标记低。
      在这里插入图片描述
      关闭SPI
      通信完成后, 关闭 SPI 模块。 清除 SPE 位元并关闭 SPI 。
      如果转让未完成,某些装置可能关闭SPI模块和停机模式,造成当前传输中断和对BSY标识失去信心。
      为了避免这种情况,建议在关闭SPI模块时采取下列程序:
      进入或脱离模式(BIDIMODE=0,RXONLY=0)
      1. 等待RXNE=1并获得最新数据;
      2 TXE=1正在等待;
      3.等待BSY=0
      四. 关闭 SPI(SPE=0)并输入关闭模式(或关闭模块的时钟)。

      溢出错误
      当主设备发送数据字节时出现溢出错误, 而前一数据字节创建的 RXNE 不从设备中删除 。
      • OVR设为“1”;当ERRIE设为“1”时,即出现中断。
      目前,接收器中的缓冲数据不是主设备提供的新数据。 请检查 SPI_ DR 登记册 。归还了以前所有未见的数据,并删除了今后所有通信。
      要清除孤儿和易受感染者,请按顺序阅读SPI_DR和SPI_SR。

      总之,读取缓存就是原始未读数据,如果发送溢出错误后收到的数据被删除的话。

      这就是为什么我们必须在传输之前获得一个数据。因为我们要给闪电侠发一个指令 比如说仅一个空字节( 应该是 0xFF), 由闪光的第一个字节返回 。此时RXNE置位,如果我们不读的话 我们就在你后面

      NM25Q64EV 诺法拉什芯片五

      FLASH简介

      FLSAH内存也称为闪存库。它有EPROM和EPROM,这是一种记忆,在停电期间不会丢失数据。然而,FLASH的储存能力往往大于EPROM,而EPROM是世界上最大的。其地位基本上已被取代。U磁盘、SD卡、SSD固态硬盘以及用于在我们的STM32处理器中存储程序的设备,我们在日常生活中使用这些程序。所有这些都是FLASH储存装置。在存储控制上,主要区别是,FLASH芯片只能写在一块巨大的土地上。我们还在第一章C节中听说了EPROM擦擦字节。

      NM25Q64EV芯片与W25Q64BV非常相同。

      在这里插入图片描述
      在这里插入图片描述
      原理图:
      在这里插入图片描述
      在这里插入图片描述
      硬件SPI协议逻辑
      在这里插入图片描述
      在这里插入图片描述

      一. 北FLASH储存特性(集中)

      第一,在写入数据之前必须将其删除。
      二. 在删除数据时,将所有数据位数重置为 1。
      三. 当数据被写入时, 只有 1 可更改为 0 。 (这就是为什么您在写入数据前必须擦拭 。)
      四区(4KB字节)加1是最小的清除单位。
      在这里插入图片描述

      2. FLASH指令摘要(着重)

      我们的正常指挥是红色标志
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

      1)读取设备ID号

      在这里插入图片描述
      在这里插入图片描述

      • ABH指令

      在这里插入图片描述
      返回的是 16H

      • 9FH指令
        在这里插入图片描述
        52217H返回。

      • 90H指令
        在这里插入图片描述
        5216H返回。

      记住当我们返回 Flash 返回的 ID 时, 主机必须将空字节( 0x00) 传送给 Flash, 因为只有主机才能生成将 Flash 驱动回主机的时钟( 这是 ID ) 。

      使用相同的时钟对传输和接收进行操作,主机在接收来自机器的数据时发送空字节( 这是 ID ) 。

      2) RSM1(读国家记忆)

      读取状态登记簿 1, 看看 FLASH 芯片是否有效( 擦拭或写入数据 ) 。
      在这里插入图片描述
      在这里插入图片描述
      S7S0 / S15-S8 / S16-S23 命令代码“ 05H” / “35H” / “15H” 的等效输出状态内存槽S7S0 / S15-S8 / S16-S23 。
      在这里插入图片描述
      只要我们拿到数据 就能看FLASH芯片是否繁忙

      我们必须检测当我们写数据时闪存芯片是写还是删除,或者当闪存擦去自己的数据时。

      3)擦除扇区

      在这里插入图片描述
      为什么有24个地址?因为24个地址足够8M字节

      在这里插入图片描述

      3)写使能

      在您可以写入数据以闪光或删除您自己的数据之前,首先必须开发一个推进器。
      闪光灯通过将其设置为 1 来抹去数据,与写入操作相同。
      在这里插入图片描述

      4)页写入数据

      在这里插入图片描述
      页写入特点:
      一. 最多可同时写出256字节的数据。
      二。 超过 256 字节不会写入 。
      三。 写入 256 (Addr% 256=0) 地址
      四. 无法写入少于256个不匹配地址数的更多数据。

      5)读取数据

      在这里插入图片描述
      此地址自动增长到每个地址后下一个更高的地址数据字节。 因此, 整个内存可以使用单个读取数据字节读取( 读取) 指令。 当地址计数器达到最大地址时, 它会滚动到 0 。

      数据总是可以读取的,但只有时钟才能被驱动。

      第六,FALSH低功率模式和觉醒

      在这里插入图片描述
      输入断电指令(DP),以确保该装置不处于深度封闭模式,并且不理会任何书面/方案/审查指令。

      解除掉电模式
      在这里插入图片描述
      RDP(断电释放令)和RDI(阅读设备ID)多用途命令用于恢复设备停机状态或检索设备电子身份号码。

      当命令只是用来获取设备识别码而不关闭时,它就通过将 CS# foot 驱动到最低水平,然后移动命令代码“ABH”,然后是三个虚拟字节(空字节)。

      这就是全部。写这个代码并不难,它是一个时间图。

      使用 SPI 读写串行 FLASH 游戏。

      实验目的

      SPI数据应写入FLASH芯片,并宣读供核查**。

      实验原理

      在这里插入图片描述
      其指数脚CS/CLK/DIO/DO与STM32挂钩,用于对NSS/SCK/MOSI/MOISO的SPI指导。STM32NSS是一个标准的GPIO。不是SPI独特的NSS踢球因此,我们必须将软件控制纳入应用中。PA2作为我们的NSS,控制通信的启动和完成。

      • 引脚的工作模式
        在这里插入图片描述

      源码

      spi_flash.h

      spi_flash.c

      main.c

      总结

      USATR、I2C和SPI协议都至关重要。这是一个合同 有很多相似之处。例如,数据可以平行传输。例如,数据发射机和转移地点。有着异曲同工之妙,因此,当我们了解这些通讯议定书时,我们必须反其道而行之。从中学习对其他通信协定极为有益。

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

          热门文章

          文章分类