【嵌入式】STM32中的SPI通信

SPI是由摩托罗拉公司开发的一种通用数据总线,其中由四根通信线,支持总线挂载多设备(一主多从),是一种同步全双工的协议。主要是实现主控芯片和外挂芯片之间的交流。这样可以使得STM32可以访问并控制各种外部芯片。本文主要是实现STM32连接W25Q64外挂Flash芯片。

I2C的优点是,无论外挂多少设备,只需要两根通信线就可以实现连接,但是由于其默认弱上拉的设计,其由低电平变换到高电平的时候会比较慢,这会使得其通讯频率较低,最高位400kHz。

SPI传输更快,其通讯频率更高,最高可达80MHz。SPI实现简单,没有继承这么多功能,没有应答机制,而且通信线较多。分别位四条通信线:

  • SCK(Serial Clock):串行时钟线,由主机控制,将主机的时钟信号同步输出到所有从机中
  • MOSI(Master Output Slave Input):主机输出从机输入
  • MISO(Master Input Slave Output):主机输入从机输出
  • SS(Slave Select):从机选择,其中每一个从机就需要一根SS信号线。当对应的从机SS线低电平的时候,表示主机和当前从机通信

硬件电路配置:

  • 所有SPI设备的SCK、MOSI、MISO分别连接在一起
  • 主机引出多条SS控制线,分别接到各个从机的SS引脚
  • 输出引脚为推挽输出,输入引脚为浮空或者上拉输入
  • 从机未被选中时,从机的MISO必须设置为高阻态

SPI基本收发电路

在这里插入图片描述
SPI基本收发电路使用的是一个移位模型,该模型中分别连接着主机和从机的两个移位寄存器,这两个移位寄存器就是负责存储需要发送的数据和需要接受的数据的。每当发送一个时钟信号,两个移位寄存器都会向左移位一位,然后最高位就会通过各自的MOSI口发送出去;而最低位则是通过MISO接收对方发送过来的一位数据。这就好像一个摩天轮一样轮转,主机的最高位会被移动到从机的最低位,相对的,从机的最低位会移动到主机的最高位上,经过8个时钟周期,刚好将两个移位寄存器的内容交换一次。

SPI时序基本单元

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

交换一个字节:
SPI对交换字节的时钟信号规定不是很严格,可以自定义。其中有两个标志位用于自定义时钟信号,CPOL用于指定极性,用于指定空闲状态的时候SCK是否为高电平,CPHA用于指定相位,CPHA=1指定MISO和MOSI在SCK的第一个边沿移入数据,第二个边沿移出数据。

在这里插入图片描述

CPOL=0,CPHA=0被称为模式0,是使用最广泛的模式,也是后面我们会继续使用的模式

SPI的报文模型

主机的第一个数据帧一般是指令帧,用于告诉从机需要机型什么操作。往后就是主机和从机的数据交换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8258.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大A终究是逃不过高开低走的魔咒

大A终究是逃不过高开低走的魔咒,早盘高开太多,周末休市,今天会议结束,各种不确定因素增加等原因导致午盘普跌。其实还是那句话,股市嘛,涨多了会跌,跌多了会涨,别急也别慌。 周末&…

知识付费小程序搭建,线上网课平台开发

我是【码云数智】平台的黄导,今天分享:知识付费小程序搭建,线上网课平台开发 在线网校小程序开发,在线教育小程序还不断优化界面设计,确保操作简便直观,无论是老人还是小孩都能轻松上手。​​ 01、小程序…

Python | Leetcode Python题解之第543题二叉树的直径

题目: 题解: class Solution:def diameterOfBinaryTree(self, root: TreeNode) -> int:self.ans 1def depth(node):# 访问到空节点了,返回0if not node:return 0# 左儿子为根的子树的深度L depth(node.left)# 右儿子为根的子树的深度R …

无代码开发平台smardaten R5C50 新版本更新!都做了哪些改变?

数睿数据为此次新版本做了7项体验优化、8项功能增补、1项性能优化,总计16个功能点。快来看看,哪个功能戳中你的心~ 一、体验优化 围绕smardaten搭建第一个原型并完成发布主链路,进行了体验优化,解决新手门槛高、模板使用路径长、…

175页PPTBCG某企业健康智能制造与供应链战略规划建议书

智能制造与供应链战略规划方法论是一个系统性、科学性的框架,旨在指导企业实现智能制造转型和供应链优化。以下是对这一方法论的核心内容的归纳和阐述: 一、智能制造的目标与原则 明确智能制造目标: 提高生产效率:通过引入自动…

DICOM标准:深入详解DICOM医学影像中的传输语法

引言 DICOM(数字成像和通信医学)标准在医学影像数据交换中扮演着至关重要的角色。其中,*传输语法(Transfer Syntax)是DICOM标准中定义数据编码和传输方式的核心部分。理解传输语法对于确保不同设备和系统之间的互操作性…

爱普生SG-8201CG可编程晶振智能门锁的核心驱动

在智能家居蓬勃发展的时代浪潮中,智能门锁作为智能家居的第一道防线,其安全性与便捷性至关重要。爱普生 SG - 8201CG 可编程晶振犹如一颗隐藏在幕后却发挥着关键作用的智慧芯片,为智能家居系统的高效、稳定运行提供了不可或缺的精准时钟信号。…

LLM大模型微调(lora原理)

一、微调方法介绍 1.1 Lora原理 通过低秩矩阵来降低模型训练的参数量,有点‘给我一个支点,就可以撬动地球’的感觉,其中矩阵的秩(rank)就有点像这个‘支点’的意思,大致原理如下: LoRA 的核心…

协议(OSI-tcp-udp)

目录 OSI七层协议模型 TCP/IP协议 3次握手 4次挥手 TCP VS UDP TCP和UDP分别对应的常见应用层协议 Tcp 状态机 TCP/ UDP /socket /http /webSocket 区别 RPC 和 RMI RPC与RMI的区别 Web Service SOAP(Simple Object Access Protocol:简单对…

源代码防泄密管理分享

随着信息技术的快速发展,软件已成为现代企业不可或缺的核心资产之一。然而,源代码作为软件的心脏,其安全性直接关系到企业的核心竞争力。为了有效防止源代码泄露,构建一套全面且高效的源代码安全管理体系显得尤为重要。以下是六个…

2024/11/3 随笔笔记

[NOIP2001 提高组] Car 的旅行路线 题目描述 又到暑假了,住在城市 A 的 Car 想和朋友一起去城市旅游。 她知道每个城市都有 4 4 4 个飞机场,分别位于一个矩形的 4 4 4 个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路&#xff0c…

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】 1、前言2、前置学习(1)window和Linux中python寻找目录的方式。&#x…

Shortcut Learning in In-Context Learning: A Survey

为我们的综述打一打广告,目前是初级版本,欢迎各位批评指正!后续的论文列表、测评基准会在Github更新[/(ㄒoㄒ)/~~最近比较忙容许我拖一拖] 这里是arxiv链接:Linking!!! Abstract:捷径学习是指模型在实际任务中使用简单…

ZDS 数字股票 布局全球视野,开启智能金融新篇章

在全球金融市场蓬勃发展的背景下,Zeal Digital Shares(ZDS)正迈向一个全新的发展阶段。通过采用先进技术与深度融合人工智能(AI),ZDS 吸引了各类顶尖人才,不仅推动了创新金融服务的建设&#xf…

Linux常用命令

常用命令: pwd、ls、cd mkdir,rmdir touch、cp rm、mv cat、more、less echo head tail history ln date cal find locate grep tar -zxvf -c 产生.tar打包文件 -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 -x 解包.tar文件打包&#xff1a…

Chromium Mojo(IPC)进程通信演示 c++(1)

网上搜索关于mojo教程 多数都是理论 加上翻译谷歌mojo文档的,但是如何自定义两个进程使用mojo通信呢?看下面的完整例子介绍:(本人也是参考谷歌代码例子改编而成) 本文演示了client.exe和service.exe 通过mojo::Incomin…

Late Chunking×Milvus:如何提高RAG准确率

01. 背景 在RAG应用开发中,第一步就是对于文档进行chunking(分块),高效的文档分块,可以有效的提高后续的召回内容的准确性。而对于如何高效的分块是个讨论的热点,有诸如固定大小分块,随机大小分…

收藏!python初学者必会,面向对象编程中的对象概念

在Python的编程世界中,“对象”这一概念是面向对象编程(OOP)的核心组成部分.理解对象的特性和使用方式,对于写出优雅以及可维护的代码至关重要.在本篇教程中,我们将探讨对象的基本概念,通过案例让你更好地掌握如何在实际代码中应用这些知识. 什么是对象…

《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端

《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端 《TCP/IP网络编程》学习笔记 | Chapter 6:基于UDP的服务器端/客户端理解UDPUDP套接字的特点UDP内部工作原理UDP的高效使用 《TCP/IP网络编程》学习笔记 | Chapter 6:基于UD…

前段(vue)

目录 跨域是什么? SprinBoot跨域的三种解决方法 JavaScript 有 8 种数据类型, 金额的用什么类型。 前段 区别 JQuery使用$.ajax()实现异步请求 Vue 父子组件间的三种通信方式 Vue2 和 Vue3 存在多方面的区别。 跨域是什么? 跨域是指…