首页 > 其他分享 >【江协STM32】11-1 SPI通信协议

【江协STM32】11-1 SPI通信协议

时间:2025-01-13 17:01:32浏览次数:3  
标签:STM32 字节 SCK 高电平 SS 引脚 通信协议 江协 SPI

  • SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
  • 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
  • 同步,全双工
  • 支持总线挂载多设备(一主多从)

               

1. 硬件电路

  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚(低电平有效,主机想指定哪个从机,就把对应的SS输出线置低电平)
    同一时间,主机只能置一个SS为低电平,选中一个从机
  • 输出引脚配置为推挽输出输入引脚配置为浮空上拉输入
    SPI协议在从机中的规定:当从机的SS引脚为高电平(从机未被选中),它的MISO引脚必须切换为高阻态(相当于引脚断开,不输出任何电平),在SS为低电平时,MISO才允许变为推挽输出,避免了MISO引脚数据冲突

2. 移位示意图

SPI一般为高位先行,每来一个时钟,移位寄存器都会向左进行移位。移位寄存器的时钟源(波特率发生器)由主机提供。主机移位寄存器向左移出去的数据,通过MOSI引脚,输入到从机移位寄存器的右边。从机移位寄存器向左移出去的数据,通过MISO引脚,输入到主机移位寄存器的右边。

规定波特率发生器时钟的上升沿,所有移位寄存器向左移动1位,移出去的位放在引脚上。波特率发生器的下降沿,引脚上的位采样输入到移位寄存器的最低位。

3. SPI时序基本单元

  • 起始条件:SS从高电平切换到低电平
  • 终止条件:SS从低电平切换到高电平

  • 交换一个字节(模式0)该模式使用较多
  • CPOL=0 (Clock Polarity, 时钟极性):空闲状态时,SCK为低电平
  • CPHA=0 (Clock Phase, 时钟相位):SCK第一个边沿移入数据,第二个边沿移出数据

  • 交换一个字节(模式1)
  • CPOL=0:空闲状态时,SCK为低电平
  • CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据(数据采样)

SS高电平时,MISO用一条中间的线表示高阻态 

  • 交换一个字节(模式2)
  • CPOL=1:空闲状态时,SCK为高电平
  • CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据

  • 交换一个字节(模式3)
  • CPOL=1:空闲状态时,SCK为高电平
  • CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

4. SPI时序 

每个芯片对SPI时序字节流功能的定义不同,这里以W25Q64的时序为例。

SPI对字节流功能的规定与I2C不同。I2C的规定一般是,有效数据流第一个字节是寄存器地址,之后依次是读写的数据,使用的是读写寄存器的模型。而在SPI中,通常采用的是指令码加读写数据的模型。SPI起始后,第一个交换发送给从机的数据,一般叫做指令码。在从机中,对应的会定义一个指令集,这样就可以指导从机完成相应的功能。

4.1 发送指令

  • 向SS指定的设备,发送指令(0x06)

SS产生下降沿,时序开始。MOSI,由于指令码最高位仍然是0,所以保持低电平不变。MISO,从机现在没有数据发送给主机,引脚电平没有变换,实际上W25Q64不需要回传数据时,MISO仍然为高阻态,从机没有开启输出,这里因为STM32的MISO为上拉输入,所以MISO呈现高电平。之后,SCK第一个上升沿,进行数据采样,从机采样输入得到0,主机采样输入得到1。

再往后,主机要发送数据1,SCK下降沿,主机将1移出到MOSI,MOSI变为高电平,这里因为是软件模拟的时序,所以MOSI的数据变化有延迟,没有紧贴SCK的下降沿,只要在下一个SCK上升沿之前完成变化即可。然后SCK上升沿,数据采样输入。在最后一位,下降沿,数据变化,MOSI变为0。上升沿,数据采样,从机接收数据0。SCK低电平是变化的时期,高电平是读取的时期。

4.2 指定地址写 

  • 向SS指定的设备,发送写指令(0x02),随后在指定地址(Address[23:0])下,写入指定数据(Data)

SS下降沿,开始时序。这里MOSI空闲时是高电平,所以在下降沿之后,SCK第一个时钟之前,MOSI变换数据,由高电平变为低电平。随后SCK上升沿,数据采样输入。下降沿变换数据,上升沿采样数据。8个时钟后,一个字节交换完成,用0x02换来了0xFF,接收的0xFF不需要使用。第二个字节,用0x12(发送地址的23~16位)换来了0xFF。第三个字节,用0x34(发送地址的15~8位)换来了0xFF。第四个字节,用0x56(发送地址的7~0位)换来了0xFF。通过3个字节的交换,24位地址发送完毕。从机收到的24位地址是0x123456。3位地址结束后,发送写入指定地址的内容。第五个字节,发送数据,这里的波形是0x55。如果只想写入一个数据,就可以SS置高电平,结束通信。

这里也可以继续发送数据,SPI也有和I2C一样的地址指针,每读写一个字节,地址指针自动加1,如果发送一个字节之后不终止,继续发送的字节就会依次写入到后续的存储空间内。由于SPI没有应答机制,所以交换一个字节后,立刻交换下一个字节即可。

4.3 指定地址读

  • 向SS指定的设备,发送读指令(0x03),随后在指定地址(Address[23:0])下,读取从机数据(Data)

 

标签:STM32,字节,SCK,高电平,SS,引脚,通信协议,江协,SPI
From: https://blog.csdn.net/qq_19395823/article/details/145115948

相关文章

  • STM32 HAL库函数入门指南:从原理到实践
    1STM32HAL库概述STM32HAL(HardwareAbstractionLayer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层,这个抽象层屏蔽了底层硬件的具体实现细节,为开发者提供了一套统一的、标准化的应用程序接口(API)......
  • 嵌入式Linux SPI子系统驱动 通信协议原理 硬件 时序 深度剖析
    SPI(SerialPeripheralInterface,串行外设接口)是一种同步的串行通信协议,通常用于微控制器和外部设备(如传感器、存储器、显示屏等)之间的高速数据传输。SPI协议由主设备(Master)和从设备(Slave)组成,主设备发起通信并控制时序,而从设备根据主设备的指令进行响应。SPI使用4根信号线进行......
  • ESP32模拟IIC,0.96英寸OLED(四针),改编自江科大/江协。
    #喜欢的宝子可以copy。#本文采用ArduinoIDE开发,用到了多文件形式。点击这里可以创建文件。下面直接分享代码和效果图。效果图0.96OLED.ino #include"OLED.h"voidsetup(){OLED_Init();OLED_ShowString(1,1,"sugkug");}intcnt=0;voidloop()......
  • STM32中的内存映射
     STM32中的内存映射在STM32中,内存映射通常如下:Flash:存储.text段(代码)、.rodata段(只读数据)和.data段的初始值。RAM:存储.data段(运行时)、.bss段、栈和堆。4. 程序启动过程在STM32中,程序启动时会发生以下操作:从Flash中加载.data段的初始值到RAM。将.bss......
  • 【STM32】利用SysTick定时器定时1s
    1.SysTick简单介绍SysTick定时器是一个24位的倒计数定时器,当计数到0时,将从RELOAD寄存器中自动重装载定时初值,开始新一轮计数。SysTick定时器用于在每隔一定的时间产生一个中断,即使在系统睡眠模式下也能工作。关于SysTick详细说明,请查看该文章:STM32—delay和操作系统共用Sys......
  • STM32之LWIP网络通讯设计-上(十四)
    STM32F407系列文章-LWIP-Network(十四)目录前言一、以太网简介二、网络协议简介1.OSI模型2.TCP/IP协议3.协议层报文间的封装与拆封4.lwIP1.lwIP特性2.lwIP开源网址3.lwIP参考书籍三、通讯连接示意四、STM32内部ETH 1.内部MAC2.内部DMA五、PHY驱动芯片1.功......
  • SENT协议深度解析-----使用STM32发送SENT信号
    一、SENT信号的结构在上一期中,我们介绍了SENT信号的接收,这一期我们来讲解一下SENT信号的发送,在讲解之前,我们需要先了解一下SENT信号的结构,SENT信号分为两种类型:快速通道类型、慢速通道类型,慢速通道分为短串行数据、增强串行数据,一共三种信号结构发送方式,在汽车MCU领域中,SEN......
  • 【STM32】MCU运行多段代码,Flash程序更新的实现方式之一
    【STM32】MCU运行多段代码,Flash程序更新的实现方式之一文章目录BootLeader跳转到BootLeader跳转到Flash其他位置MCU运行多段代码其他程序更新烧录方式附录:Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时......
  • STM32垃圾分类系统设计与实现
    引言垃圾分类作为现代环保和资源回收的重要环节,已经成为了各地政府和环保组织高度关注的议题。合理的垃圾分类不仅能够有效减少垃圾的填埋量,还能提高资源的回收利用率,减少环境污染。随着物联网技术的发展,智能垃圾分类系统的设计和实现成为了当前研究的热点。本文将介绍如......
  • STM32驱动0.96寸OLED基于 “软/硬IIC协议”
    一、简介      本章讲解模拟IIC和硬件IIC驱动方式,软件IIC可以使用任意GPIO进行模拟,比较灵活,但是速率和稳定性不如硬件IIC,硬件IIC由单片机硬件自主完成时序,并支持多种速率模式,在资源充足情况下推荐使用硬件IIC。二、0.96寸OLED模块介绍    2.1简介:  ......