STM32的SPI通信介绍

SPI简介

  • SPI:串行外设接口,与IIC一样都是通用数据总线。
  • 四根通信线:SCK,MOSI(DO),MISO(DI),SS。
  • 同步(共用一根时钟线),全双工(数据发送和接收单独占一条线)
  • 支持挂载多设备,一主多从,每个从机占用一根ss线

SPI与IIC对比: 

        与IIC不同,IIC可以实现多主机,半双工。IIC可以在消耗最低硬件资源的情况下实现最多的功能,性价比很高,缺点是通信线高电平的驱动能力较弱,低电平上升到高电平时需要花费很多时间,标准模式只有100KHz左右的速度,快速模式也只有400KHz。

        SPI传输更快,设计简单粗暴,较为简单,硬件开销较大,通信线较多,简单快速。

硬件电路:

  • 所有SPI设备的SCKMOSIMISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入

        得益于推挽输出的强驱动能力,使得高低电平变化很快,因此它的传输速度很快,注意:当从机的SS引脚为高电平,也就是从机未被选中的时候它的MISO引脚必须为高阻态,在SS为低电平时,才允许变为推挽输出。

SPI移位示意图:

        SPI运行原理:波特率发生器的作用就是产生时钟信号,经过一个上升沿和一个下降沿的时候,主机和从机就会交换一个数据,如图当产生上升沿时候,SPI主机和从机的移位寄存器都往左移,主机移出来一位1,从机移位出来一位0,这个移出来的数据放在各自线上的寄存器中,当产生下降沿时,主机与从机读取对方线上的数据,此时SPI主机的移位寄存器的最低位接收到了从机发出的0,同理SPI从机的移位寄存器接收到了1。这就是主机和从机交换一个字节的原理,就能同时实现数据的收发。

        主机和从机都是基于字节交换来完成数据收发的,每次收发数据就执行一次字节交换的时序,当需要发送不需要接收数据的时候怎么办呢?这时候还是调用字节交换的时序,只是不去读取从机接收的数据是什么。同理只需要接收不需要发送的时候,一般会让主机发送0x00或0xFF这种数据来把从机的数据置换过来。

SPI时序

  • 通信开始:SS从高电平切换为低电平
  • 通信保持:SS一直保持低电平
  • 通信终止:SS从低电平切换为高电平

        SPI有两个可以配置的位,分别为:CPOL,CPHA,每一位可以配置为1或0,总共组合起来一共有四种模式。

  • CPOL:时钟极性
  • CPHA:时钟相位

模式0(最常用)

  • CPIOL= 0,表示空闲状态时,SCK为低电平
  • CPHA = 0,表示SCK第一个边沿移入数据,第二个边沿移出数据

        模式0如图:由于时钟第一个边沿就要移入数据,那么应该提前有数据在数据线上,因此,在SS刚产生跳变时,MOSI和MISO就移出了一次数据,在时钟产生上升沿时,移入B7,紧接着时钟继续产生跳变,开始移出数据,就这样依次进行到最后一次时钟产生跳变时,MISO和MOSI还会再多移出一次数据,这样在下一次时钟产生上升沿的时候,才能继续移入数据,这样就能重复一个字节数据的收发了。

模式1:

  • CPIOL= 0,表示空闲状态时,SCK为低电平
  • CPHA = 1,表示SCK第一个边沿移出数据,第二个边沿移入数据

        如图模式1的时序图,MISO开始时为中间态,表示未选中从机时MISO为高阻态,当选中后也就是SS产生下降沿变为低电平时,开始传输数据,当SCK产生上升沿时,MOSI和MISO同时移出数据,当时钟产生下降沿时,又同时移入数据,这样就完成了一次数据交换,之后数据依次移出,移入,最后一个下降沿数据B0传输完成。然后将MOSI置到一个默认的高电平或者低电平,也可以不用去操作,从机将MISO置为高阻态。

模式2:

如图:

        模式2就是模式0的时钟相位取反,其余都相同。

模式3:

        同理,模式3与模式1也是时钟相位取反,其余相同。

SPI时序图:

发送一个字节的时序图

下图为发送一个0x06指令的时序图:

        通常使用指令码给从机,在从机中对应有指令集,这样可以指导从机进行相应的操作。具体指令参考从机的数据手册,有的指令只需要指令码,有的则是指令码+数据。

        如图这个波形为主机发送0x06指令,使用模式0,SS产生下降沿,MOSI和MISO开始变换数据,MOSI最高位是0,这里保持低电平不变,MISO这里从机没有数据发送给主机,引脚电平不用变换,MISO采用上拉输入,这里一直是高电平。在第一个时钟沿时,从机采样输入MOSI线,得到数据0,主机采样MISO线,得到数据1。到第6根绿线时,也就是第六个时钟沿,主机数据变化,这一位是1,那么改变MOSI信号为高电平。第二个时钟沿,也就是第二条绿线,这时候主机进行输出,由于第二位是0,那么波形也不用变化。

        有些芯片在不需要回传数据时,会保持MISO为高阻态,例如,W25Q64芯片在不需要回传数据时,MISO一直保持高阻态。

        总结来说就是下降沿变换数据,上升沿采样数据。

指定地址写的指令时序图

        如图实现了向指定设备发送写指令(0x02),再在指定地址下,写入数据。这个地址为24位,就需要三个字节进行传输,就要发三次8位的数据。如图,第一个字节时序实现了发送0x02指令,第二、三、四个字节时序分别发送了指令的23-16位,15-8位,7-0位的数据,最后一个字节时序发送了数据0x55。整个指令时序实现了在0x123456地址下写入0x55这个数据。

        如果发送一个字节后不终止,继续发送字节的话就会存储到下一个地址中,在SPI通信中,也会有地址指针,每读写一个字节,地址指针自动加1。

指定地址读的指令时序图

        如图实现了读从机的指定地址,第一个字节时序为读指令,第2、3、4个字节时序为地址,第五个字节时序就是随便发送一个数据来把从机的数据置换过来,一般这个数据为0xFF。 同理在这里也有地址指针,继续置换数据也会得到从机后一个地址的数据。

注意:由于MISO是由硬件自动控制,那么它会紧贴时钟的下降沿,MISO数据的最高位实际上是在上一个字节,最后一个下降沿提前发生的,因为是SPI模式0,所以数据变化都提前半个周期。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器多少钱一个月?低至5元1个月

阿里云服务器一个月多少钱?最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年,折合5元一个月,2核4G服务器30元3个月,2核2G3M带宽服务器99元12个月,轻量应用服务器2核4G4M带宽165元12个月,4核16G服务…

搜维尔科技:【应急演练】【工业仿真】救援模拟演练可视化仿真项目实施

安全救援综合演练系统是一套面向公共安全事故、预案管理、应急救援模拟演练的虚拟仿真解决方案,它为警察、消防以及专门的应急救援保障部门提供一个综合的应急救援培训和仿真演练平台。平台主要通过设计不同的事故模型和特定的灾难场景,定制不同的应急救…

上班几周了,

过年回来后,时间变得飞快,很多事情都是马上要去干,而且又是很着急的事,呵呵,真的要干趴了 然后——经历了第一次年后的周末连续加班出版本保量产,经历了加班到凌晨3点调试问题,经历我们在疯狂的…

【TypeScript系列】实用工具类型

实用工具类型 TypeScript 提供一些工具类型来帮助常见的类型转换。这些类型是全局可见的。 目录 Partial<T>&#xff0c;TypeScript 2.1Readonly<Type>&#xff0c;TypeScript 2.1Record<Keys, Type>&#xff0c;TypeScript 2.1Pick<Type, Keys>&am…

【字符串算法题记录】反转字符串中的单词(leetcode),右旋字符串(kama)——双指针以及反转的奇思妙用

反转字符串中的单词 题目链接 思考 这题的思路顺序是&#xff1a;移除多余空格&#xff08;双指针法&#xff09;——》反转整个字符串&#xff09;——》反转字符串中每个单词。 移除多余空格&#xff08;双指针法&#xff09; 因为字符串开头也可能有多个字符&#xff0…

深入理解React的setState机制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

修复ubuntu引导

一、制作ubuntu启动U盘 进入启动盘后&#xff0c;点击Try ubuntu&#xff0c;进入U盘的ubuntu系统。 二、配置和添加源 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update三、运行 Boot Repair重新制作引导 sudo boot-repair注意&#x…

关于HashSet的五个问题

1.HashSet集合的底层数据结构是什么样的? HashSet 集合的底层数据结构是哈希表&#xff0c;它是由一个数组和链表&#xff08;或红黑树&#xff0c;具体取决于 JDK 版本&#xff09;组成的数据结构。 数组&#xff1a;哈希表的主要部分是一个数组&#xff0c;它的每个位置称为…

【java】线程thread

线程池 线程池状态 1.RUNNING 表示线程池正常运行&#xff0c;既能接受新任务&#xff0c;也会正常处理队列中的任务 2. SHUTDOWN 当调用线程池的shutdown(&#xff09;方法时&#xff0c;线程池就进入SHUTDOWN状态&#xff0c;表示线程池处于正在关闭状态&#xff0c;此状…

STEP 格式三维模型读取

STEP是常用的三维模型存储格式&#xff0c;使用Express语言描述几何图形&#xff0c;文件存储方式为BRep&#xff0c;分为STEP203和STEP214&#xff0c;后者多了颜色信息&#xff0c;opencascade中提供了相应算法读取STEP文件。 #include <STEPControl_Reader.hxx>TopoD…

冒泡排序(六大排序)

冒泡排序 冒泡排序的特性总结&#xff1a; 1. 冒泡排序是一种非常容易理解的排序 2. 时间复杂度&#xff1a;O(N^2) 3. 空间复杂度&#xff1a;O(1) 4. 稳定性&#xff1a;稳定 动图分析&#xff1a; 代码实现&#xff1a; Swap(int*p1,int*p2) {int tmp *p1;*p1*p2…

利用Cas中service重定向钓鱼网站问题

前言 今天运维反馈现网有个系统http://aaa-test-env.com/cas/logout?servicehttp://www.evil.com/存在重定向钓鱼网站的安全漏洞。熟悉Cas实现单点登录的都知道&#xff0c;通过service参数&#xff0c;在Cas认证中心登录认证之后重定向到service对应的业务系统。但是Cas本身…

Vue.js 实例

每个 Vue 应用都需要通过实例化 Vue 来实现。 语法格式如下&#xff1a; var vm new Vue({// 选项 }) 接下来让我们通过实例来看下 Vue 构造器中需要哪些内容&#xff1a; <div id"vue_det"><h1>site : {{site}}</h1><h1>url : {{url}}…

tewa-707e光猫超级密码获取方法

这款光猫很魔性&#xff0c;没有WIFI&#xff0c;没有USB接口&#xff0c;没有Telnet&#xff0c;试了很多方法去获取超级密码都不行。后来偶尔的机会找到了方法&#xff0c;现与大家共享。 1、用FTP登录&#xff0c;用户名和密码就是光猫背面标签上的。FTP软件比较好使的是&am…

基于 Linux 的更新版 MaxPatrol VM 可扫描 Windows

&#x1f47e; MaxPatrol VM 2.1 是俄罗斯唯一一款可以安装在 Linux 上并以审计和五重测试模式扫描 Windows 主机&#xff08;甚至是旧版本&#xff09;的漏洞管理产品。 让我们告诉你更新后的 MaxPatrol VM 还有哪些有用的功能&#xff1a; 1. 由于采用了新的数据存储模式&a…

p8782题解

此处仅讲思路。 1 题意&#xff1a;两个 X X X 进制数&#xff0c;求差最小值。 为了方便描述&#xff0c;我们规定&#xff1a; M A M B M_AM_B MA​MB​。两个数为 ( A ) X {(A)}_X (A)X​ 与 ( B ) X {(B)}_X (B)X​ 两个 X X X 进制数。两个数可表达为 ( A ) X x…

基于SSM的高校推免报名(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的高校推免报名&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

37、Linux中Xsync数据同步备份工具

37、Linux中Xsync数据同步备份工具 一、介绍二、配置集群hostname三、修改xsync文件四、赋权五、安装Rsync六、验证一七、配置免密登录1、生成rsa密钥2、copy机器自身公钥到目标机器3、.ssh/文件目录赋权 八、验证二 ⚠️ 注&#xff1a;本文全程在普通用户下操作&#xff0c;…

【数字图像处理matlab系列】数组索引

【数字图像处理matlab系列】数组索引 【先赞后看养成习惯】【求点赞+关注+收藏】 MATLAB 支持大量功能强大的索引方案,这些索引方案不仅简化了数组操作,而且提高了程序的运行效率。 1. 向量索引 维数为1xN的数组称为行向量。行向量中元素的存取是使用一维索引进行的。因此…

遇到了问题,Firepower 2140配置带外IP时报错 commit-buffer failed

onsite we have a cisco firepower 2140 device which run ASA as we try to modify the 2140 OOB mgmt ip by CLI, we got an error why ? 经过查询发现&#xff0c;需要进入ASA里面打上以下这条命令&#xff0c;并重启ASA 1 修改模式并重启 ciscoasa# configure termina…