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

嵌入式知识点-SPI通讯

该文原自 : 正点原子

01 SPI概述

       SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器。

        打开STM32F103手册,找到SPI的结构框图,了解它的大致功能,如以下图所示:


          

 




       关于SPI协议,那么我们理解一句话即可。SPI的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。


       主机与从机连接关系图:

一个GIF描述关于SPI传输过程:SPI可以指定数据传输从MSB位还是LSB位开始:例如数据传输从MSB位开始:

 

   上述GIF可知:当一个上升沿来临时,MOSI发送主机的最高位MSB为1,而MISO是由从机发出为1,然后等价交换。注意:上述SPI的GIF使用的是SPI模式1,SPI不一定是由上升沿为数据采样,是由SPI模式决定,上述GIF的MSB代表移位寄存器的最高位,由此类推,我们得到以下表格:



             




          注意:上述图中的颜色以及MSB为串行缓冲区的最高位 


02 SPI引脚信息


       MISO:主设备数据输入,从设备数据输出,简单来讲:从机发数据到串行总线上或者主机接收总线的数据。
       MOSI :主设备数据输出,从设备数据输入,简单来讲:主机发数据到串行总线上或者从机接收总线的数据。
       SCLK :时钟信号,由主设备产生,数据发送时,必须有方波输出,没有数据时,不会有方波输出。
       CS:从设备片选信号,由主设备控制。简单来讲:主机发送数据到那个从机,如果CS为低电平就是使能该从机,否则除能该从机。




03 SPI工作模式

       SPI的工作模式:是由CPOL(时钟极性)和CPHA(时钟相位)相关。
       时钟极性(CPOL):指通讯设备处于空闲状态(SPI开始通讯前、nSS线无效)时,SCK的状态。
       CPOL = 0:SCK在空闲时为低电平。
       CPOL = 1:SCK在空闲时为高电平。
       前面小编说了,如果从机没有数据发送或者主机没有数据发送,那么SCK不会有方波输出,SCK在空闲状态为低电平或者高电平是由时钟极性(CPOL)决定。
       时钟相位(CPHA):指数据的采样时刻位于SCK的偶数边沿采样还是奇数边沿采样。
       CPHA = 0:在SCK的奇数边沿采样。
       CPHA = 1:在SCK的偶数边沿采样。
      由上述CPOL(时钟极性)和CPHA(时钟相位)可知:SPI模式一共分为四种,如以下图所示:


          




      注意:上述图片红色部分:SPI模式0时,空闲状态时候SCLK为低电平,如果需要数据采样那么SCLK输出一个方波,那么该方波是奇数边沿时刻,采样边沿为上升沿。

      SPI模式1时,空闲状态时候SCLK为低电平,如果需要数据采样那么SCLK输出一个方波,那么该方波是偶数边沿时刻,采样边沿为下降沿。

      SPI模式2时,空闲状态时候SCLK为高电平,如果需要数据采样那么SCLK输出一个方波,那么该方波是奇数边沿时刻,采样边沿为下降沿。

      SPI模式3时,空闲状态时候SCLK为高电平,如果需要数据采样那么SCLK输出一个方波,那么该方波是偶数边沿时刻,采样边沿为上升沿。 

04 SPI实验


      例如:CPOL =0 和CPHA =0为例,其他模式一样的原理,SCL空闲时候为低电平,奇数边沿上升沿采样,那么下降沿接收数据,如果两块STM32的SPI1相连,如以下图所示:


          




       主机和从机都有一个串行移位寄存器,主机通过想它的SPI串行寄存器写入一个字节来发起一次传输。

       主机的串行移位寄存器通过MOSI线将字节传输给从机,同时从机也将自己的串行移位寄存器中的内容通过MISO线传输给主机。这样两个移位寄存器的内容就被交换了。

       外设的写操作和读操作是同步完成的。如果只想进行写操作,主机只需忽略接收的字节。如果只想进行读操作,也必须发送一个字节(可以是空字节)来引发从机传输。

       那么它们都具有一个串行移位寄存器,例如主机串行缓冲区数据为0xAA,那么发送从机的数据为0xaa就是10101010二进制,如果从机的串行缓冲区数据的数据为0x9F,转成二进制为10011111,所以我们得到下图所示:


总结

       前面我们已经说了CPOL设置为0,所以SCLK空闲状态为低电平,如果没有数据发送,那么SCLK一直为低电平。
       当主机发送数据时,SCLK一直为低电平转为输出一个方波,注意是八个脉冲,由于CPHA 设置为 0,所以奇数边沿,上升沿有效,所以数据采样在上升沿,当发送完成时,MOSI转成高电平。
       NSS为低电平有效,主要使能从机。
       主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输
       串行移位寄存器通过MOSI信号线将字节传送给从机,同时从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换; 

 

 

相关文章:

嵌入式知识点-SPI通讯

该文原自 : 正点原子 01 SPI概述 SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同…...

C#教程--01 简介

简介 C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。 C#的特性 现代的、通用的编程语言。 面向对象。 面向组件。 容易学习。 结构化语言。 它产生高效率的程序。 它可以在多种计算机平台上编译。 .Net 框架的一部分。 C#强大的编程…...

【java基础】一篇文章彻底搞懂lambda表达式

文章目录lambda表达式是什么lambda表达式的语法函数式接口初次使用深入理解方法引用 :: 用法快速入门不同形式的::情况1 object::instanceMethod情况2 Class::instanceMethod情况3 Class::staticMethod对于 :: 的一些示例及其注意事项构造器引用变量作用域使用外部变量定义内部…...

通用SQL查询分析器

技术:Java、JSP等摘要:本文主要针对当前很多软件都无法实现跨数据库、跨平台来执行sql语句而用户又仅需做一些基本的增删改查操作的矛盾,设计了一个能够跨平台跨数据库的软件。此软件是一个通用SQL查询分析器,利用java语言本身的跨…...

机器学习100天(三十八):038 朴素贝斯-处理离散数据

《机器学习100天》完整目录:目录 机器学习100天,今天讲的是:朴素贝斯-处理离散数据! 打开 spyder,新建一个 naive_bayes_category.py 脚本。上一节我们引入了一批西瓜样本。并使用朴素贝叶斯公式计算出一个瓜蒂脱落、圆形、青色的西瓜是熟瓜的概率。下面我们来使用 pytho…...

【3.3】指针、二分、SSM项目

二分查找 class Solution {public int search(int[] nums, int target) {int n nums.length;int left 0;int right n - 1;while(left < right){int mid left (right - left) / 2;if(nums[mid] < target){left mid 1;}else if(nums[mid] > target){right mid …...

buu [INSHack2017]rsa16m 1

题目描述&#xff1a; 打开的 rsa_16m 文件 &#xff1a; &#xff08;在此我只想说神人才找得到 c 的位置&#xff09; &#xff0c;这位置是真的难找啊 题目分析&#xff1a; 首先打开 description.md 文件&#xff0c;得到&#xff1a; 翻译下来&#xff1a; 当您需要真正…...

【数据结构起航】:衡量算法的好坏--时间空间复杂度

时间复杂度和空间复杂度 文章目录时间复杂度和空间复杂度1.算法效率1.1算法复杂度1.2复杂度在OJ里的应用2.时间复杂度2.1时间复杂度的概率2.2大O渐进表示法推导大O阶方法&#xff1a;2.3时间复杂度的举例计算3.空间复杂度3.1空间复杂度的举例计算4.复杂度各量级对比1.算法效率 …...

动手学深度学习【1】——线性回归

动手学深度学习网址&#xff1a;动手学深度学习 注&#xff1a;本部分只对基础知识进行简单的介绍并附上完整的代码实现&#xff0c;更多内容可参考上述网址。 简述 需要的准备知识 数学的偏导线性代数 线性模型 回归是能为一个或多个自变量与因变量之间关系建模的一类方…...

Html 相关知识

Html 相关知识 DOM 文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表述&#xff0c;并定义了一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构&#xff0c;样式和内容。DOM 将文档解析为一个由节点和对象&#xff08;包…...

【冲刺蓝桥杯的最后30天】day1

大家好&#x1f603;&#xff0c;我是想要慢慢变得优秀的向阳&#x1f31e;同学&#x1f468;‍&#x1f4bb;&#xff0c;断更了整整一年&#xff0c;又开始恢复CSDN更新&#xff0c;从今天开始逐渐恢复更新状态&#xff0c;正在备战蓝桥杯的小伙伴可以支持一下哦&#xff01;…...

c++泛型编程与模板-01函数模板

函数模板的定义 所谓函数模板&#xff0c;实际就是写一个通用函数&#xff0c;返回值和参数的类型都是可变的&#xff0c;用一个特定格式的变量来指定&#xff0c;然后调用此函数的时候&#xff0c;编译器会根据参数的数据类型自动推导出类型&#xff0c;从而达到函数再不同的…...

Golang http请求忘记调用resp.Body.Close()而导致的协程泄漏问题(含面试常见协程泄漏相关测试题)

参考&#xff1a; 知乎&#xff1a;别因为忘记close你的httpclient&#xff0c;造成goroutine泄漏 CSDN&#xff1a;resp.Body.Close() 引发的内存泄漏goroutine个数 先来看几道题&#xff0c;想一想最终的输出结果是多少呢&#xff1f; package mainimport ("fmt"…...

进程信号生命周期详解

信号和信号量半毛钱关系都没有&#xff01; 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定 义 #define SIGINT 2 查看信号的机制&#xff0c;如默认处理动作man 7 signal SIGINT的默认处理动作是终止进程&#xff0c;SIGQUIT的默认处理…...

2023-03-03干活小计

今天见识了 归一化的重要性&#xff1a;归一化 不容易爆炸 深度了解了学习率&#xff1a;其实很多操作 最后的结果都是改变了lr 以房价预测为例&#xff1a;一个点一个点更新 比较 矩阵的更新&#xff1a; 为什么小批量梯度下降 优于随机梯度下降 优于批量梯度下降&#xff…...

操作系统结构

随着操作系统的不断增多和代码规模的不断扩大&#xff0c;提供合理的结构对提升操作系统的安全与可靠性来说变得尤为重要。 1.分层法 指将操作系统分为若干层&#xff0c;最低层位硬件&#xff0c;最高层为用户接口&#xff0c;每层只能调用紧邻它的低层的功能和服务(类似于计…...

[SSD科普] 固态硬盘物理接口SATA、M.2、PCIe常见疑问,如何选择?

前言犹记得当年Windows 7系统体验指数中&#xff0c;那5.9分磁盘分数&#xff0c;在其余四项的7.9分面前&#xff0c;似乎已经告诉我们机械硬盘注定被时代淘汰。势如破竹的SSD固态硬盘&#xff0c;彻底打破了温彻斯特结构的机械硬盘多年来在电脑硬件领域的统治。SSD数倍于HDD机…...

【Java学习笔记】3.Java 基础语法

Java 基础语法 一个 Java 程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff…...

Python基础学习6——if语句

基本概念 if语句为条件判断语句&#xff0c;用来判断if后面的语句是真是假。if的用途有很多&#xff0c;比如作为条件测试可以判断两数是否相等与不等、进行数值笔记等等。例子如下&#xff1a; Lego_price (599, 799, 898) if Lego_price[0] 599:print("Correct!&quo…...

有免费的PDF转Word吗?值得收藏的7个免费 PDF转Word工具请收好

PDF 和 DOC 是人们在工作中广泛使用的两种最流行的文档格式。PDF 是 Adobe 的便携式文档格式&#xff0c;DOC 是 Microsoft 的 Word 文档格式。PDF 是一种更安全可靠的文件格式&#xff0c;因为它很难编辑 PDF 文件&#xff0c;但是有一些称为 PDF 编辑器的工具可用于编辑 PDF …...

N41 SRS与LTE共用XPXT开关的一些考虑

n41 SRS 与 LTE 共存冲突分析与工程设计指南 核心结论:在 n41 与 LTE 共用 XSPxT(DPDT / DP3T / DP4T)架构下,冲突是物理必然;硬件目标是将干扰压缩至软件可调度范围,系统稳定性最终取决于软件互斥策略。 一、问题本质:为什么 n41 SRS 会和 LTE 冲突? 1️⃣ n41 SRS 的…...

保边滤波深度学习红外可见光融合算法【附程序】

✨ 长期致力于红外与可见光图像融合、快速引导滤波器、交替引导滤波器、深度学习、卷积神经网络研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;双支流…...

从ARIMA差分到MIM网络:一个老派时间序列技巧如何革新了深度学习预测

从差分思想到记忆网络&#xff1a;传统时间序列技巧如何重塑深度学习架构 在气象预报的雷达回波图中&#xff0c;降水云团的形态每秒钟都在剧烈变化&#xff1b;城市交通流量监测数据里&#xff0c;早晚高峰的波动与平峰期形成鲜明对比&#xff1b;股票市场的价格曲线更是以难以…...

抖音下载器终极指南:3分钟实现无水印批量下载的高效解决方案

抖音下载器终极指南&#xff1a;3分钟实现无水印批量下载的高效解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

形转化理论:基本概念、深刻机制与研究框架的系统性阐述

摘要形转化理论&#xff08;Form-Transformation Theory, FTT&#xff09;是一种基于信息本体论的全新物理范式&#xff0c;旨在将宇宙的基本实在重新界定为永恒、离散的信息处理网络动力学。本文系统阐述该理论的核心概念体系、两大支柱性数学框架及从微观网络到宏观物理的涌现…...

Atlas机器人:人形设计、液压驱动与救灾场景下的技术权衡

1. 项目概述&#xff1a;Atlas&#xff0c;一个充满争议的工程里程碑2013年&#xff0c;当波士顿动力公司为DARPA&#xff08;美国国防高级研究计划局&#xff09;打造的Atlas机器人首次公开亮相时&#xff0c;它在工程技术社区引发的震动&#xff0c;远不止于其令人惊叹的行走…...

为什么你需要SRWE?5个轻松掌握Windows窗口管理的实用技巧

为什么你需要SRWE&#xff1f;5个轻松掌握Windows窗口管理的实用技巧 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾经为Windows窗口管理而烦恼&#xff1f;想要截图却受限于屏幕分辨率&#xff0c;需…...

基于双链笔记构建个人消费知识系统:从记录到生活策展

1. 项目概述与核心价值看到“SimonsTang/xiaofei-liberal-arts”这个项目标题&#xff0c;我的第一反应是&#xff0c;这应该是一个关于“消费”与“文科”交叉领域的知识库或工具集。作为一名长期关注效率工具和知识管理的从业者&#xff0c;我深知在信息爆炸的时代&#xff0…...

告别繁琐操作:一键下载国家中小学智慧教育平台电子课本的智能解决方案

告别繁琐操作&#xff1a;一键下载国家中小学智慧教育平台电子课本的智能解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内…...

JavaScript自动化PPT生成:如何用代码解放你的演示文稿生产力

JavaScript自动化PPT生成&#xff1a;如何用代码解放你的演示文稿生产力 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS 还在为…...