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

news2024/11/23 2:34:50

🙌秋名山码民的主页
😂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.coloradmin.cn/o/1185478.html

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

相关文章

什么是API接口测试?这可能是全网最全的教程了!

什么是 API ? API 是“应用程序编程接口”的缩写,是一种允许不同应用程序之间相互通信和交换数据的接口。就好像在餐厅点餐一样,你只需要告诉服务员你想要的食物,而不需要了解厨房中的具体操作,服务员会把你的订单传递…

深入asyncio:构建异步应用

文章目录 异步I/O操作示例:异步网络请求异步任务管理示例:并发执行多个任务使用异步队列示例:生产者-消费者模式在现代软件开发中,异步编程已经成为提高应用性能和响应性的关键技术之一。Python的asyncio库为编写单线程并发代码提供了强大的支持。本文将深入探讨asyncio的三…

CCF CSP认证 历年题目自练Day44

题目一 试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个…

python教程:把多张图片,合并成一张图

D:\Wdpython\environment\Scripts\python.exe D:/Wdpython/爬虫/测试8.py 图片列表 10 [‘刘亦菲/刘亦菲_1.jpg’, ‘刘亦菲/刘亦菲_11.jpg’, ‘刘亦菲/刘亦菲_12.jpg’, ‘刘亦菲/刘亦菲_13.jpg’, ‘刘亦菲/刘亦菲_15.jpg’, ‘刘亦菲/刘亦菲_2.jpg’, ‘刘亦菲/刘亦菲_3.jp…

MacOS升级后命令行出现xcrun: error: invalid active developer path报错信息

在Mac上用g编译cpp文件时,出现以下(类似于工具环境问题的)报错: 解决方案:重新安装最新版的MacOS Command Line Tools xcode-select --install重新尝试编译: 编译成功(忽略这个warning&…

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

一、EMQX介绍 这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。 Windows版本的看这里: https://blog.csdn.net/xiaolong1126626497/article/details/1…

蓝桥杯每日一题2023.11.8

题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年,将abc,cab,cba这三种情况进行判断合法性即可,注意需要排序去重,所以考虑使用set 此处为纯模拟的写法,但使用循环代码会更加简洁。 方法一: #include&…

servelt中请求路径的组成部分(Request Path Elements)

详情请参考:https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#request-path-elements 请求路径包含下面几部分: Context Path:与ServletContext 关联的路径前缀。如果这个上下文是默认的上下文(以…

定位内存溢出错误

添加虚拟机参数 -XX:HeapDumpOnOutOfMemoryError(内存溢出则会自动生成"溢出分析文件",如图1) 图1 -Xmx512m(为了快速模拟内存溢出,暂设堆空间为512m) 编写发生内存溢出代码 public class Me…

计算机基础知识48

web应用程序 # Django框架是一款专门用来开发web应用的框架 # Web应用程序是一种可以通过浏览器访问的应用程序, B/S架构 案例:淘宝网、京东网... # 应用程序有两种模式: C/S:客户端/服务器端程序,这类程序一般独立运行 B/S&#xff1…

子查询,内查询 嵌套查询

子查询语句 一个查询语句中还有一个查询语句 Select,,,(select) 括号里的查询语句优先于查询语句执行,然后再把子查询的结果作为条件返回给主查询条件进行过滤 格式: #In Select 列名from …

leetcode刷题日记:94. Binary Tree Inorder Traversal(二叉树的中序遍历)

给出二叉树的根结点,返回二叉树的中序遍历序列。 二叉树的中序遍历序列是先遍历左子树再遍历根结点然后再遍历右子树,在遍历左子树是这个结点是左子树的根结点,左子树有左子树和根结点右子树,也就是说在遍历的时候我们要递归遍历。…

某XX自考小程序的AES加密分析

前言 主要是报了自考在这个小程序上面做题,就研究了一下这个接口本文仅供学习交流使用,请勿随意传播。如有侵犯你的权益及时联系我删除。 一、抓包分析打开小程序,打开devtools 工具,这里就不啰嗦,直接上过程。 点击…

5亿美元!ChatGPT竞争对手Aleph获巨额融资

11月7日,生成式AI平台Aleph Alpha在官网宣布,获得超过5亿美元(约36亿元)B轮融资。本次由博世风投、施瓦茨集团、SAP、惠普等知名财团参投。 Aleph Alpha自研了大语言模型Luminous系列,包含130亿、300亿和700亿三种参数…

人工智能(AI)是一种快速发展的技术,其未来发展前景非常广阔。

人工智能(AI)是一种快速发展的技术,其未来发展前景非常广阔。以下是一些关于AI未来的可能发展方向和就业前景的详细说明: 1.机器学习工程师:机器学习是AI的核心技术之一,它涉及到从数据中自动学习模式并进…

『MapStruct』POJO 映射转换框架指南

前言 本文将会主要讲解后端开发中 VO、DTO、Entity 相互转化方式,并且针对其中比较成熟的框架 MapStruct 进行解读和教学 问题 微服务架构下,服务拆分会产生 VO、DTO、Entity 三类 POJO VO 用于前端接口参数传递,例如用于 http 接口接收请…

​【错误解决方案】ModuleNotFoundError: No module named ‘ahocorasick‘

1. 错误提示 ModuleNotFoundError: No module named ahocorasick,这意味着你试图导入一个名为 ahocorasick的模块,但Python找不到这个模块 2. 解决方案 安装缺失的模块: 如果你确定模块名称正确但仍然收到这个错误,那么可能是你没有安装这个…

基于springboot+vue的影城管理系统

影城管理系统 编号:springboot33 源码合集: www.yuque.com/mick-hanyi/javaweb 源码下载:博主私 目 录 摘 要 1 前 言 2 第1章 概述 2 1.1 研究背景 3 1.2 研究目的 3 1.3 研究内容 4 第二章 开发技术介绍 5 2.1相关技术 5 2.2 Java技术 6…

逆向-文心一言开发者控制台调试

一打开标准的无限debugger 往上一层可以发现是jsvmp,这样替换文件相对来说就不太好搞 根据测试如果卡在debugger就会跳转页面 但是放行debugger就可以正常使用 可以基本确定debugger前后存在计时程序 这个时候就可以考虑对apply做hook劫持无限debugger的函数&#…