当前位置: 首页 > news >正文

STM32(十八):SPI通信

SPI通信:

        SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线

        四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)主机输出从机输入、MISO(Master Input Slave Output)、SS(Slave Select)

        同步,全双工

        支持总线挂载多设备(一主多从

硬件电路:

        所有SPI设备的SCK、MOSI、MISO分别连在一起

        主机另外引出多条SS控制线,分别接到各从机的SS引脚

        6输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入

移位示意图:

 SPI时序基本单元

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

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

        交换一个字节(模式0)

        CPOL=0:空闲状态时,SCK为低电平

        CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据

        交换一个字节(模式1)

        CPOL=0:空闲状态时,SCK为低电平

        CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

        交换一个字节(模式2)

        CPOL=1:空闲状态时,SCK为高电平

        CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据

        交换一个字节(模式3)

        CPOL=1:空闲状态时,SCK为高电平

        CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

 SPI时序:

发送指令

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

指定地址写

向SS指定的设备,发送写指令(0x02),

随后在指定地址(Address[23:0])下,写入指定数据(Data)

 

指定地址读

向SS指定的设备,发送读指令(0x03),

随后在指定地址(Address[23:0])下,读取从机数据(Data)

 W25Q64简介

W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景

存储介质:Nor Flash(闪存)

时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)

存储容量(24位地址):

       W25Q40:      4Mbit / 512KByte

       W25Q80:      8Mbit / 1MByte

       W25Q16:      16Mbit / 2MByte

       W25Q32:      32Mbit / 4MByte

       W25Q64:      64Mbit / 8MByte

       W25Q128:  128Mbit / 16MByte

       W25Q256:  256Mbit / 32MByte

 

         64KB为1块,一共128块。xx0000-xxFFFF

        每一块分为多个扇区Sector,每个扇区为4KB,每块一共是16个扇区。xxx000-xxxFFF.

        一页内的地址变化范围是xxxx00,到xxxxFF。

写入操作时:

        写入操作前,必须先进行写使能

        每个数据位只能由1改写为0,不能由0改写为1。例如某存储单元存储0xAA(1010  1010)

在这个存储单元里写入新的数据0x55(0101  0101) 就变成0x00了。

        写入数据前必须先擦除,擦除后,所有数据位变为1

        擦除必须按最小擦除单元进行(全部,块、扇区)最少4096个字节一起擦。

        连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入

        写入操作结束后,芯片进入忙状态,不响应新的读写操作

读取操作时:

        直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取。

这个芯片可以支持SPI模式0和SPI模式3 。

SPI外设:

        STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担

        可配置8位/16位数据帧、高位先行/低位先行   (串口是地位先行,I2C和SPI是高位先行)

        时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)

        支持多主机模型、主或从操作。

        可精简为半双工/单工通信。

        支持DMA。

        兼容I2S协议。

STM32F103C8T6 硬件SPI资源:SPI1(APB2、PCLK72M)、SPI2(APB1、PCLK36M)

        图中左上角表示移位寄存器右移,低位先行的模式。LSBFIRST控制位可以控制低位先行还是高位先行。给0先发送高位,给1先发送低位。

 接收缓冲区分为TDR和RDR,他俩共用一个地址。 发送寄存器移入到移位寄存器时候,置TXE位为1,检测到TXE位为1时,可以移入发送缓冲区。 移位寄存器完成输出和移入时候,移入的数据会整体的转入到接收缓冲区中,置RXNE为1,检测到为1后就要尽快把数据从RDR中读出来。 

        SPI是全双工,发送和接收同步进行,所以数据寄存器发送和接收分离。移位寄存器发送和接收可以共用。

        BR0、BR1、BR2三位对时钟分频进行控制。

        SPE:SPI使能。

        CPOL、CPLA:配置SPI的四种模式

        SSOE为1时,NSS作为输出引脚,并在当前设备变为主设备时,给NSS输出低电平。当主机结束后,SSOE要清零,NSS变为输入。

        SSM位决定右侧中间的数据选择器的选择哪一路,上面一路是硬件NSS模式,即:外部如果输入了低电平,那当前的设备就进入不了主模式,线路中已经有了主模式。下面一路是软件管理NSS输入,NSS是1还是0,由SSI来决定。

主模式全双工连续传输 

        效率高、程序逻辑复杂。

 非连续传输

         程序逻辑简单,效率低。

软硬件波形对比 

 


http://www.mrgr.cn/news/46157.html

相关文章:

  • 免费ppt模板从哪找?一文看这里
  • RAG 分块检索难,Late Chunking 值得试试
  • Linux系统和数据库常用的命令2
  • 怎么将手机备忘录传送至电脑
  • 2024年山东省安全员A证证考试题库及山东省安全员A证试题解析
  • windows 安装 ElasticSearch
  • 基于SSM vue uniapp 的个性化商铺系统(小程序)设计与实现
  • Langchain4j如何实现智能问答的跨越式进化?
  • 【C++篇】继承之巅:超越法则束缚,领略面向对象的至臻智慧
  • 用策略性文本序列影响大模型的输出
  • 【无人机设计与控制】基于控制避障函数(CBF)的四旋翼安全控制
  • Rocket MQ消费消息的两种写法
  • 【JDK17 | 7】Java 17 深入剖析:基础概述与新特性实战
  • 这个 JavaScript API 比你想象中更强大!
  • 国产长芯微LPA1311高性能隔离放大器P2P替代AMC1311替代ACPL-C87A-000E
  • 74.【C语言】文件操作(1)
  • Unity3D Compute Shader同步详解
  • 一文彻底搞懂大模型 - Hugging Face Transformers
  • Fetch获取内容乱码问题
  • 中医文献学:概念、历史、现状与展望