SPI通信协议详解

news2024/11/24 3:53:12

一,SPI的简介

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如MSP430单片机系列处理器。

二,SPI的物理层

1.多CS

 SCK:时钟线                                         CS:片选信号

MOSI:主机把向从机写入数据               MISO:主机从从机读取数据

CS:片选信号线,当有多少个从设备,就会有多少个外接线。当从设备的片选拉低的时候,就选中和主设备进行通讯,而其余的设备未被选中则会忽视总线数据上的传输。

SCK:时钟线,用于数据同步,由主机进行发送,决定的数据传输的速度。STM32的SPI的最大速率为fpclk/2。多个设备同时进行通讯的过程,速度受限于低速设备。

MOSI:主设备的输出引脚,从设备的输入引脚。【主设备输出数据,从设备接受数据】

MISO:主设备的输入引脚,从设备的输出引脚。【主设备输入数据,从设备输出数据】

2.菊花链

信号会通过将移位寄存器的数据通过MOSI输出,然后通过MOSI-1引脚进入从机1,在第二个数据命令周期,数据会通过从机1的MISO-1引脚将移位寄存器的数据传入到从机2里面,此时从机1便可以同时的接受来自主机的新命令,以此类推。当三个从机都收到了彼此需要的命令的时候,当检测到CS的上升沿信号,此时对应的从器件会执行自己移位寄存器里面的命令。当片选拉低时,命令不会执行,这就使得我们可以不断的通过一个一个的设备传递命令,直到到达我们需要执行该命令的从器件,去执行命令。

三,SPI的协议层

1.起始信号和终止信号

起始信号:CS片选信号高电平变为低电平,当从机检测到自己的片选拉低后,开始与主机进行通信。

终止信号:CS信号由低电平变为高电平,结束和主机之间的通讯,本次数据交互结束。

2.数据的有效性

数据借助MOSI和MISO进行传输,通过SCK时钟线进行数据的同步传输,数据在每一个SCK时钟周期传输一位数据。数据的输入和输出是同时进行的,发送一个数据也就会接受一个数据。在进行双向通信的时候,一边采用的是“MSB先行”。

3.时钟的相位和极性

SPI_CR寄存器的时钟和极性,出现了四种组合形式。

时钟极性【CPOL】:控制的是设备在空闲状态下的电平状态

CPOL为1:空闲状态为高电平           CPOL为0:空闲状态为低电平

时钟相位【CPHA】:控制采样信号的边沿

CPHA = 1:在SCK时钟的第二个边沿进行采样,同时数据要保持稳定,与此同时,则在第一个边沿进行数据的转换,准备下一次的数据传输。

CPHA = 0:在SCK时钟的第一个边沿进行采样,同时数据要保持稳定,与此同时,则在第二个边沿进行数据的转换,准备下一次的数据传输。

  四种组合: 

空闲状态为低电平:

CPOL= 0,CPHA = 0  在第一个上升沿采集信号

CPOL = 0,CPHA = 1 在第一个下降沿采集信号

空闲状态为高电平:

CPOL = 1,CPHA = 0 在第一个下降沿采集信号

CPOL = 1,CPHA = 1 在第一个上升沿采集信号

4.外设速率

stm32的SPI外设的速率为fpclk/2。

SPI1挂在在APB2总线上,速率为fpclk2/2 = 36Mbits/s。

SPI2挂在在APB1总线上,速率为fpclk1/2 = 18Mbits/s

5.数据的发送控制

不管是发送还是接收,数据都先会被存放在一个缓存器当中,发送时,先把数据放在发送缓存器中,再发送,接收时,先接收到接收缓存器,再被从设备接收。

 不难看出,每次发送一个字节数据,同时也要接收一个字节数据,同步完成。时钟信号由主设备发出。

移位寄存器通过MOSI线将数据传输给从机,从机也通过将移位寄存器的数据通过MISO传输给主机当主机只读取一个从机的字节的时候,也需要向从机发送一个空字节,但是从机可以忽略这个字节,同理,从机只读取主机的一个数据,也需要向主机发送一个空子节,但是主机可以忽略掉。

发送时:当数据被写入到SPI_DR【发送缓存器】,数据被并行的传送到移位寄存器,然后串行的被移位到MOSI引脚。

接收时:当数据从MISO引脚接收到后,然后串行移位到移位寄存器,数据再从移位寄存器并行的移动到SPI_DR【接收缓存器】。

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

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

相关文章

【力扣刷题】预测赢家

🔗 题目链接 题目描述 给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。 玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数…

leetcode热题HOT100汇总——持续更新中

文章目录前言1. 两数之和2. 两数相加3.无重复字符的最长子串4. 寻找两个正序数组的中位数5. 最长回文子串10. 正则表达式匹配11. 盛最多水的容器15. 三数之和17. 电话号码的字母组合19. 删除链表的倒数第 N 个结点20. 有效的括号21. 合并两个有序链表前言 为了学习本文捋顺lee…

再多学一点Spring之过滤器与拦截器的区别

学习和使用Spring这么久了,我们都用过过滤器和拦截器,但是真要被问到过滤器和拦截器有什么区别,我又一脸懵逼了,回答不上来。今天我们就来学习一下,过滤器和拦截器。 过滤器 通过实现javax.servlet.Filter接口来自定义…

网站被篡改 收录一些非本网站快照跳转如何解决

在实际的网站运营维护过程中&#xff0c;经常发生网站被HACK攻击等情况&#xff0c;尤其网站的标题被篡改为中文关键词<title>&#xff0c;使得网站在百度搜索的索引结果非常的明显&#xff0c;直接在浏览器里打开网站&#xff0c;用肉眼看到的是未被篡改的首页标题。根据…

计算机学徒等级划分

目录 第一级&#xff1a;菜鸟级 第二级&#xff1a;新手级 第三级&#xff1a;入门级 第四级&#xff1a;精通级 第五级&#xff1a;巅峰级 第一级&#xff1a;菜鸟级 概述&#xff1a;你问他计算机是干什么的&#xff1f;他说&#xff1a;“打游戏的&#xff0c;看电影的…

地下水监测系统的构成,优势是什么?

平升电子地下水监测系统由地下水自动监测站监测设备和监测中心平台软件组成。监测设备自动采集、存储地下水水位、水温、水量、水质数据&#xff0c;通过4G/NB-IoT/北斗无线通信网络定时上报至省/市/县级监测中心平台&#xff0c;平台自动接收和存储数据&#xff0c;并对地下水…

排查 Edge WebView2 在某个设备上不出图像的问题

我们在 Windows 应用内嵌入 Edge WebView2&#xff0c;来展示部分用网页实现的界面。总得来说还是不错的&#xff0c;比如&#xff1a; 渲染很快&#xff0c;基本上内置网页100毫秒以内控件样式很清爽&#xff0c;没有多余界面开发需要调用的 API 也不多 但是最近在某个用户那…

2022年山东最新建筑施工架子工(建筑特种作业)模拟题库及答案

百分百题库提供特种工&#xff08;架子工&#xff09;考试试题、特种工&#xff08;架子工&#xff09;考试预测题、特种工&#xff08;架子工&#xff09;考试真题、特种工&#xff08;架子工&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助…

21天学Python --- 打卡12:python执行jar包

21天学Python --- 打卡12:Python执行jar包1. Subprocess1.1 Method1.2 Execure Jar2. Jpype2.1 Install2.2 Execute Simple Jar2.2.1 Java Code2.2.2 Python Code2.3 Execute Maven Jar3. Awakening1. Subprocess subprocess 是 Python 2.4 中新增的一个模块 1.1 Method subpro…

第二证券|医药板块短期轮动加快 机构看好后市机会

作为现在商场行情继续性最强的职业板块&#xff0c;医药股昨日早盘呈现回调&#xff0c;午后继续反弹&#xff0c;体现出较强的承接动能。机构以为&#xff0c;本轮新冠医治概念主线行情或仍将延续&#xff0c;但个股或将继续分解。 在本轮反弹行情中&#xff0c;医药板块表现较…

postgres 源码解析 44 btree插入流程 btinsert

基于前两篇对btree的基础介绍&#xff0c;本文将从源码角度讲解btree的插入流程&#xff0c;相关至内容见&#xff1a; postgres源码解析41 btree索引文件的创建–1 postgres源码解析42 btree索引文件的创建–2 数据结构 /** BTStackData -- As we descend a tree, we push t…

干货 | 鸿翼&深信服之内容安全3大应用场景实践

随着企业数字化转型的推进&#xff0c;在企业内容管理层面&#xff0c;面临着数据爆发式增长&#xff0c;内容安全合规、海量非结构化数据分散存储&#xff0c;业务系统重建数据难以整合&#xff0c;无法统一管理等问题。 在数据安全层面&#xff0c;随着新威胁层出不穷&#…

Docker的CICD

&#x1f38f;⭕引言 回顾使用docker进行项目部署的步骤&#xff1a; 将项目通过maven进行编译打包将文件上传到指定的服务器中将war包放到tomcat的目录中通过Dockerfile将Tomcat和war包转成一个镜像&#xff0c;由DockerCompose的docker-compose.yml去运行容器 以上操作&#…

frp内网穿透详细安装步骤以及使用

frp是一款内网穿透工具&#xff0c;首先要一台服务器用作服务端&#xff08;Linux&#xff09;&#xff0c;将自己的(WIN10)电脑用作客户端&#xff0c;我将通俗的讲解详细的安装以及使用过程&#xff0c;废话不多直接开始。 Linux要开放 7000 7500 9600端口&#xff0c;一…

Android入门第48天-静态BroadCast之接受开机广播

简介 我们在之前的BroadCast章节中写了动态BroadCast。但我们提过一笔BroadCast也有静态之分&#xff0c;而静态的BroadCast主要用于监听一些如&#xff1a;开机广播、SIM卡拨出插入等广播。这些广播都为静态注册广播事件。因此我们今天就以一个App监听Android开机广播为例子说…

[附源码]Node.js计算机毕业设计高校科研项目申报管理信息系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

三次握手四次挥手和SSL/TLS握手

http(TCP)三次握手四次挥手&#xff1a; 三次握手&#xff1a; SYN&#xff1a;同步位。SYN1 表示进行一个连接请求。 ACK&#xff1a;确认位。ACK1 表示确认有效&#xff0c;ACK0 表示确认无效。 ack&#xff1a;确认号。等于对方发送的序号1。 seq&#xff1a;序号。 握手…

高通Ride软件开发包使用指南(6)

高通Ride软件开发包使用指南&#xff08;6&#xff09;6.2使用SDK设置配置QDrive平台6.3生成SDK配置文件6.4 QDrive功能验证6.2使用SDK设置配置QDrive平台 配置平台 $ cd ~/qride/platform $ ./setup.sh [Platform SOC] 该脚本根据IP地址检测平台&#xff0c;然后推送摄像头Q…

【信息奥赛题解】位数问题(详细题解 C++ 代码)

&#x1f4da; 位数问题 &#x1f680; 题目浏览 【题目名称】位数问题 【题目描述】 在所有的 NNN 位数中&#xff0c;有多少个数中有偶数个数字 333 ? 由于结果可能很大&#xff0c;你只需要输出这个答案对 123451234512345 取余的值。 【输入】 读入一个数 N(N≤1000…

【Redis】数据类型操作一 (key/String/List)

文章目录0、Redis键(key)1、Redis字符串(String)2、Redis列表(List)实操0、Redis键(key)1、Redis字符串(String)2、Redis列表(List)0、Redis键(key) 切换数据库 select dbid select 8 清空数据库 flushdb &#xff08;清空当前库&#xff09; flushall &#xff08;通杀全部库…