MCU常见通信总线串讲(四)—— SPI总线协议

🙌秋名山码民的主页
😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
获取源码,添加WX

目录

  • 前言
  • 一、SPI总线协议基本概念
  • 二、SPI协议层
  • 三、I2C和SPI的区别
  • 四、SPI的定义
  • 最后


前言

首先明确一个概念,关于MCU中通信总线和通信协议,通信总线是一种用于连接各种外设和模块的物理接口,它可以传输数据和控制信息。通信协议则是指在通信总线上传输数据时所遵循的规则和约定,以确保不同设备之间能够正确地交换信息,我们也可以把他叫做通信总线协议。

系列文章,主要讲解以下几个总线协议,读者可以按需选择:

  1. UART和USART
  2. RS232、RS485总线
  3. IIC总线
  4. SPI总线
  5. CAN总线
  6. USB总线

一、SPI总线协议基本概念

SPI是一种高速全双工的通信总线。
在这里插入图片描述
如上图所示,SPI有三根总线,和一根片选线组成,3条总线分别为SCK、MOSI、MISO,片选线为SS

  1. SS(Slave Select):从设备选择信号线,常称为片选信号线
  2. SCK(Serial Clock):时钟信号线,用于通信数据同步
  3. MOSI(Master Output,Slave Input):主设备输出/从设备输入引脚
  4. MISO(Master Input,Slave Output):主设备输入/从设备输出引脚

二、SPI协议层

在这里插入图片描述
NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期,MOSI和MISO传输一位数据。

  1. NSS信号线由高变低,是SPI通信的起始信号,NSS信号线由低变高是SPI通信的停止信号
  2. 数据有效性:观察图中的②③④⑤标号处,MOSI及MISO的数据在SCK的上升沿期间变化输出,在SCK的下降沿时被采样。即在SCK的下降沿时刻,MOSI及MISO的数据有效,高电平时表示数据“1”,为低电平时表示数据“0”。在其他时刻,数据无效,MOSI及MISO为下一次表示数据做准备。
  3. CPOL/CPHA及通信模式:
    在这里插入图片描述

三、I2C和SPI的区别

I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)都是两种常见的串行通信协议,它们在硬件接口、数据传输方式和应用场景上有一些明显的区别。

  1. 硬件接口:

    • I2C需要两根线,即时钟线(SCL)和数据线(SDA)。它使用开漏输出来实现总线的双向数据通信。
    • SPI通信需要至少四根线,包括时钟线(SCLK)、数据输入线(MISO)、数据输出线(MOSI)和片选线(SS)。
  2. 数据传输方式:

    • I2C使用一个主从架构,允许多个设备连接到同一总线上。数据是以帧的形式进行传输,每个帧包括一个起始位、7或8位数据位、一个可选的ACK位和一个停止位。
    • SPI通常采用一对主从设备的方式,其中一个设备作为主控制器,其他设备作为从设备。它通过全双工通信进行数据传输,可以实现高速数据传输。
  3. 应用场景:

    • I2C通常用于连接低速外设,如传感器、EEPROM和实时时钟等,因为它比较简单并且支持多主机连接。
    • SPI通常用于连接高速外设,如存储器芯片、显示器、AD/DA转换器等,因为它可以提供更高的数据传输速率和灵活性。

四、SPI的定义

初始化结构体及函数定义在库文件stm32f10x_spi.h及stm32f10x_spi.c中,

typedef struct
{uint16_t SPI_Direction;           /*设置SPI的单双向模式 */uint16_t SPI_Mode;                /*设置SPI的主/从机端模式 */uint16_t SPI_Data Size;           /*设置SPI的数据帧长度,可选8位或16位 */uint16_t SPI_CPOL;                /*设置时钟极性CPOL,可选高或低电平*/uint16_t SPI_CPHA;                /*设置时钟相位,可选奇或偶数边沿采样 */uint16_t SPI_NSS;                 /*设置NSS引脚由SPI硬件控制还是软件控制*/uint16_t SPI_Baud Rate Prescaler; /*设置时钟分频因子,fpclk/分频数=f SCK */uint16_t SPI_First Bit;           /*设置MSB/LSB先行 */uint16_t SPI_CRCPolynomial;       /*设置CRC校验的表达式 */
} SPI_Init Type Def;

最后

如果本文对你有所帮助,还请三连支持一下博主!
请添加图片描述

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

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

相关文章

PyCharm 无法登陆 Codeium 的解决方法

PyCharm 登陆 Codeium PyCharm 无法登陆 Codeium 的问题描述PyCharm 使用 token 登陆 Codeium PyCharm 无法登陆 Codeium 的问题描述 使用 PyCharm 登录 Codeium 时,单击 Login 无反应,单击侧边栏的 Codeium 图标也一直显示连接失败。 PyCharm 使用 to…

pandas教程:Interacting with Web APIs API和数据库的交互

文章目录 6.3 Interacting with Web APIs (网络相关的API交互)6.4 Interacting with Databases(与数据库的交互) 6.3 Interacting with Web APIs (网络相关的API交互) 很多网站都有公开的API,通过JSON等格式提供数据流。有很多方法可以访问这些API,这里…

【Unity细节】Json序列化时出现:An item with the same key has already been added. Key:

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

机器学习——CBOW负采样(纯理解)

刚从前一个坑里,勉强爬出来,又掘开另一坑 看了很多文章B站up主。。。糊里糊涂 但是我发觉,对于不理解的东西,要多看不同up主写的知识分享 书读百遍,其意自现,我是不相信的,容易钻牛角尖 但是&am…

前端-选中DOM定位源代码

用到的工具:react-dev-inspector 使用流程 根据react-dev-inspector文档进行配置 安装 yarn add --dev react-dev-inspector配置:在根目录下配置Inspector import { createRoot } from react-dom/client import { Inspector } from react-dev-inspe…

draw.io与项目管理——如何利用流程图工具提高项目管理效率

draw.io 是一款强大的图形绘制工具,用于创建各种类型的图表、流程图、组织结构图、网络图和平面设计等。它提供了丰富的绘图工具和预定义的图形库,使用户能够轻松创建专业水平的图形作品。 draw.io具有直观的界面和简单易用的功能,适合各种用…

一个拖拽内容到Word的例子

这是一个拖拽内容到Word中的例子。如视频所示: 从程序中的Tree这拖内容到Word中。然后 在拖拽完成后事件中,记录日志。 拖拽 代码如下: typeTForm1 class(TForm)Panel1: TPanel;TreeView1: TTreeView;GroupBox1: TGroupBox;Memo1: TMemo;D…

Webpack 的作用和工作原理是什么?

Webpack 是一个现代的静态模块打包工具,它的作用是将前端应用程序的各种资源(如 JavaScript、CSS、图片等)视为模块,并将它们打包成可以在浏览器中运行的静态文件。它的主要功能包括模块打包、资源优化、代码分割、加载器转换等。…

oracle_19c 安装

oracle安装部署 1、安装docker,docker-compose环境。 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun curl -L "https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/b…

云计算的大模型之争,亚马逊云科技落后了?

文丨智能相对论 作者丨沈浪 “OpenAI使用了Azure的智能云服务”——在过去的半年,这几乎成为了微软智能云最好的广告词。 正所谓“水涨船高”,凭借OpenAI旗下的ChatGPT在全球范围内爆发,微软趁势拉了一波自家的云计算业务。2023年二季度&a…

linux 安装 Anaconda3

文章目录 一、下载二、安装1.使用xftp把下载包拉到服务器上2.执行安装命令3、在安装时没有自动添加环境变量,这里手动设置3.1.1通过修改~/.bashrc来配置环境变量3.1.2 重新载入配置文件3.1.3 测试 一、下载 官网下载链接 二、安装 1.使用xftp把下载包拉到服务器上…

从零开始搭建微服务(二)

忘记了软件还没有装全,今天先把所有的软件装上,nacos已经装过了我们就不在装了,剩余的软件全部都是通过docker安装,我在centos7里面 1. 安装docker 安装dockeryum -y install docker开机自启 systemctl enable docker启动dockre systemctl start docker查看docker版本 doc…

css控制卡片内部的左右布局

先放效果图 纯css样式 可以根据需求进行更改 <template> <!-- 卡片盒子 --><div class"card_box "><el-card class"box-card w400" v-for"(item,index) in cardList" :key"index"><div slot"heade…

【五、http】go的http的信息提交(表单,json,上传文件)

一、post提交的几种 form表单json文件 1、提交表单 //http的postfunc requstPost(){params : make(url.Values)params.Set("name", "kaiyue")params.Set("age", "18")formDataStr : []byte(params.Encode())formDataByte : bytes.N…

学习与科学研究总决

前言 学习方法&#xff0c;做学问之道历来为人重视。 学习的一般方法 看书&#xff1a;课本阅读&#xff0c;查相关资料、论文&#xff0c;都是摄取的形式&#xff0c;是一个知识输入的过程。笔记&#xff1a;课堂笔记&#xff0c;读书笔记&#xff0c;写博客&#xff0c;发…

【python 学习】代码插桩调试

Python 代码插桩方法 文章目录 Python 代码插桩方法什么是插桩技术&#xff1f;使用插桩调试python插桩的一种实现方法 什么是插桩技术&#xff1f; 插桩技术是指在保持原有程序逻辑完整性的基础上&#xff0c;在程序中加入探针&#xff0c;通过探针来收集代码在执行过程中的信…

力扣 LCR 024. 反转链表两种解法

目录 1.解题思路Ⅰ2.代码实现Ⅰ3.解题思路Ⅱ4.代码实现Ⅱ 1.解题思路Ⅰ 利用头插法&#xff0c;遍历数组将后面的元素头插到前面的元素. 2.代码实现Ⅰ struct ListNode* reverseList(struct ListNode* head) { struct ListNode*curhead;;struct ListNode*newheadNULL;whil…

网络工程实验记录

网络工程 show ip route show running-config 第一周 相同设备使用交叉线&#xff0c;不同设备之间使用直通线 R1能ping通10.1.1.1 R2能ping通所有的 R3能ping通172.16.1.1 即路由器只能到达自身线连接出去的&#xff0c;另一端就连接不了了。 此时给R1分配静态路由 R…

单线程介绍、ECMAScript介绍、操作系统Windows、Linux 和 macOS

目录 单线程介绍ECMAScript介绍操作系统Windows、Linux 和 macOS &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的意见是我进步的财富&#xff01; 单线程介绍 单线…

Spring Security OAuth 2.0 资源服务器— JWT

目录 一、JWT的最小依赖 二、JWT的最基本配置 1、指定授权服务器 2、初始预期&#xff08;Startup Expectations&#xff09; 3、运行时预期&#xff08;Runtime Expectations&#xff09; 三、JWT认证是如何工作的 四、直接指定授权服务器 JWK Set Uri 五、提供 audie…