嵌入式常见的几种接口

news2024/12/28 19:31:54

嵌入式开发中,常见的外设通信接口/协议有SPI,I2C,UART三种,本文先分三个部分对SPI,I2C,UART进行介绍,最后对这三种协议进行比较。
 

1 SPI

1.1 SPI的简介

SPI(Serial Peripheral Interface):串行外围设备接口。SPI是一种高速的,全双工的,同步的通信总线。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps,已知的有的器件SPI已达到50Mbps。

1.2 SPI接口的引脚

  • MOSI(Master Out Slave In):主设备数据输出,从设备数据输入
  • MISO(Master In Slave Out):主设备数据输入,从设备数据输出
  • SCLK(Serial Clock):时钟信号,由主设备产生,主从设备共用
  • CS/SS(Slave Select):从设备使能信号,由主设备控制,低电平有效

1.3 SPI的工作原理

  • SPI通过移位寄存器实现数据的交换
  • 每经历一个时钟脉冲,主设备和从设备同时发送接收一位数据(如上升沿发送数据,下降沿接收数据)。
  • 发送数据时,将移位寄存器中的数据左移一位,最高位发送出去;接收数据时,将数据补充到移位寄存器的最后一位
  • 当完成指定位数的数据发送或接收后,移位寄存器将数据存放到缓冲器中等待读取

1.4 SPI的四种工作方式

为了和外设进行数据交换,需要根据外设工作要求,设置SPI的时钟极性(CPOL)和时钟相位(CPHA)。CPOL和CPHA决定数据发送和接收的时序(注意:数据总是先发送后接收的)。

  • CPOL:时钟极性选择
    CPOL = 0 :SPI总线空闲为低电平
    CPOL = 1 :SPI总线空闲为高电平
  • CPHA:时钟相位选择
    CPHA = 0 :无相位延时
    CPHA = 1 :1/2个周期的相位延时

下表为SPI的四种工作模式选择

工作模式CPOL = 0CPOL = 1
CPHA = 0上升沿发送数据,下降沿接收数据下降沿发送数据,上升沿接收数据
CPHA = 1下降沿发送数据,上升沿接收数据上升沿发送数据,下降沿接收数据

下图为四种工作模式的时序图

?

2 I2C

2.1 I2C的简介

??I2C(Inter Integrated Circuit):内部集成电路。I2C是一种低速的,半双工的,同步的通信总线。IIC 数据传输速率有标准模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4 Mbps)。

2.2 I2C接口的引脚

  • SDA:数据线
  • SCL:时钟线

2.3 I2C的工作原理

  • 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据
  • 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据

    在这里插入图片描述

  • 数据传输:SCL为高电平时,若SDA保持稳定,那么SDA传输一位数据
  • 数据改变:SCL为低电平时,SDA线改变想要传输的一位数据
  • 应答信号:接收数据的IC在接收到数据后,向发送数据的IC发出特定的低电平脉冲,表示已经收到数据;发送数据的IC在发送数据后,等待接收数据的IC发出应答信号,根据实际情况做出是否继续传递信号的判断(注意:只有应答信号是从设备发送,其他信号都是主设备发送)

    在这里插入图片描述

2.4 I2C的通信过程

  • Master发送START
  • Master发送数据,等待ACK
  • Slave发送ACK
  • Master发送STOP

?

3 UART

3.1 UART的简介

??UART(Universal Asynchronous Receiver/Transmitter):通用异步收发传输器。UART是一种低速的,全双工的,异步的通信总线。UART的数据传输速率有9600bps,115200bps等等。

3.2 UART接口的引脚

  • VCC:供电端,若两设备独立供电,则不需要连接
  • TX:发送数据端,要接对面设备的RX
  • RX:接收数据端,要接对面设备的TX
  • GND:保证两设备共地(必须要接)

3.3 UART的传输格式

  1. 空闲位:当总线处于空闲状态时信号线的状态为高电平
  2. 起始位:发送一个低电平信号,表示开始传输数据
  3. 数据位:可以是5~8位的数据,一般都是8位。先发送最低位,最后发送最高位。(I2C和SPI先发送最高位,最后发送最低位)
  4. 奇偶校验位:数据位传送完成后,要进行奇偶校验。分为无校验,奇校验,偶校验
    ?- 无校验(no parity)
    ?- 奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’
    ?- 偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
  5. 停止位:数据的结束标志。可以是1位、1.5位、2位的高电平。

下图为UART数据传输格式

在这里插入图片描述

4 SPI、I2C、UART的区别与联系

SPI、I2C、UART都是常见的通信协议,目前主流的芯片都内置了这些通讯协议的控制器。同样,各种传感器、蓝牙模块、WIFI模块也都兼容这三种通信方式的一种或几种。我们可以根据外设拥有的通信方式和几种通信方式的特点选择合适的通信方式。

4.1 使用场景

  • I2C,SPI主要是CPU与其他芯片(如Flash等)的通信方式
  • UART主要是CPU与CPU之间的通信方式

4.2 传输速度

  • 同步:低速情况下,使用I2C合适,如果速度快一些,则一般都要使用SPI
  • 异步:使用UART传统的传输速度一般在115200bps或以下

4.3 硬件开销

  • SPI有4根线,可以挂多个从设备,但是在挂多个从设备时,主设备端还需要做一个n选1的译码器,用于选择将要访问的从设备,因此,主设备上的管脚需求比较多;SPI总线在只有一个从设备时,只要用到SCK,SDO,SDI这三根线,此时选择SPI比I2C总线占优
  • I2C有2根线,可以挂多个从设备,对从设备的选择直接依靠协议完成,无需增加物理连线
  • 一般情况下,当一块电路板上有多个从设备时,往往选用I2C而非SPI,因为SPI增加了额外硬件开销以及电路板走线

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

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

相关文章

P0级事故频发后,这家公司终于醒悟了!

近期,国内的互联网大厂接连爆发P0级事件,阿里云崩完滴滴崩,企业在追求效益的前提是业务的连续和稳定。如果发生故障不能快速恢复,引发业务中断,给企业带来的损失是巨大的,换言之,企业需要一套清…

C++ 学习笔记——C++纯虚函数和抽象类

C纯虚函数 什么是纯虚函数 1,纯虚函数只有函数名、参数、返回值类型。 2,纯虚函数的定义是在函数句首使用 virtual 关键字修饰,并且在句末增加 “ 0”。 virtual void funtion() 0;3,纯虚函数只有声明,基类可以存…

新开普掌上校园服务管理平台service.action RCE漏洞复现 [附POC]

文章目录 新开普掌上校园服务管理平台service.action RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 新开普掌上校园服务管理平台service.action RCE漏洞复现 [附POC] 0x01 前言 免责声明:请勿…

(学习笔记)Xposed模块编写(一)

前提:需要已经安装Xposed Installer 1. 新建一个AS项目 并把MainActvity和layout_activiyt.xml这两个文件删掉,然后在AndriodManifest.xml中去掉这个Activity的声明 2. 在settings.gralde文件中加上阿里云的仓库地址,否则Xposed依赖无法下载 …

学习笔记三十五:Ingress-controller高可用

Ingress-controller高可用 Ingress-controller高可用特别注意: 通过keepalivednginx实现ingress-nginx-controller高可用安装nginx主备:修改nginx配置文件。主备一样keepalive配置主keepalived备keepalivek8snode1和k8snode2启动服务测试vip是否绑定成功…

Hive:从HDFS回收站恢复被删的表

场景 一张手工维护的内部表,本来排查没有使用,然后删掉了,发现又需要使用,只能恢复这张表了。 1.确认HDFS是否开启回收站功能 2.查看回收站中的数据 被删除的数据会放在删除数据时使用的用户目录下,如:使…

【C语言期末不挂科——指针进阶篇】【上】

C语言进阶篇【上】 文章目录 C语言进阶篇【上】字符指针数组指针数组传参和指针传参  数组传参  一级指针传参  二级指针传参 前言: 我们在指针初阶篇学习了: 1、指针就是个变量,用来存放地址,地址唯一标识一块空间。 2、指…

Android自动化测试中使用ADB进行网络状态管理!

技术分享:使用ADB进行Android网络状态管理 Android自动化测试中的网络状态切换是提高测试覆盖率、捕获潜在问题的关键步骤之一,本文将介绍 如何使用ADB检测和管理Android设备的网络状态。 自动化测试中的网络状态切换变得尤为重要。 网络状态查询 adb s…

esp32-s3部署yolox_nano进行目标检测

ESP32-S3部署yolox_nano进行目标检测 一、生成模型部署项目01 环境02 配置TVM包03 模型量化3.1预处理3.2 量化 04 生成项目 二、烧录程序 手上的是ESP32-S3-WROOM-1 N8R8芯片,整个链路跑通了,但是识别速度太慢了,20秒一张图,所以暂…

C语言线性表的链式存储(详解)

线性表的链式存储 线性表的顺序存储:用一块连续的内存空间 线性表的链式存储:不连续的内存空间 链表是由一系列的节点组成,每个节点包含两个域,一个是数据域,一个是指针域 链表的插入和删除原理 单项链表框架的搭建 …

深度学习毕设项目 医学大数据分析 - 心血管疾病分析

# 1 前言 🚩 基于大数据的心血管疾病分析 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 1 课题背景 本项目的任务是利用患者的检查结果预测心血管疾病(CVD)的存在与否。 2 数据…

老师怎么分配学生座位

学生座位分配是教育过程中的一个重要环节,对于学生的学习效果、课堂氛围以及师生互动都有一定的影响。那么,老师应该如何分配学生的座位呢? 了解每个学生的个性特点和学习习惯。不同的学生有不同的性格和特点,老师需要充分了解每个…

MAMP Pro v6.8.1(PHP/MySQL开发环境)

MAMP Pro是一款专为Mac用户设计的全功能本地服务器软件,可以将电脑变成一个完整的Web开发环境。无论个人开发者、网站管理员还是团队协作,MAMP Pro都提供了强大的工具和便捷的管理方式,能够更加高效地构建和测试网站。 MAMP Pro的基本功能包括…

Appium+Pytest实现app并发测试

前言 这个功能已经写完很长时间了,一直没有发出来,今天先把代码发出来吧,有一些代码是参考网上写的,具体的代码说明今天暂时先不发了,代码解释的太详细还得我花点时间^_^, 毕竟想让每个人都能看明白也不容易&#xff…

uniapp 使用web-view外接三方

来源 前阵子有个需求是需要在原有的项目上加入一个电子签名的功能,为了兼容性和复用性后面解决方法是将这个电子签名写在一个新的项目中,然后原有的项目使用web-view接入这个电子签名项目; 最近又有一个需求,是需要接入第三方的…

LeetCode(43)快乐数【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 快乐数 1.题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也…

干销售找不到客户怎么办?

干销售找不到客户怎么办? 销售找不到客户?别担心,我们有解决方案! 当你面临销售找不到客户的困境时,不要轻易放弃。相反,你可以采取一些策略来帮助你找到潜在的客户。以下是一些建议,它们将有…

什么是API? (应用程序编程接口)

我们经常听到 API 这个专业名称。那么什么是 API 呢? 定义 API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软…

47、Flink 的指标报告介绍(graphite、influxdb、prometheus、statsd和datalog)及示例(jmx和slf4j示例)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

C/C++ Zlib库封装MyZip压缩类

Zlib是一个开源的数据压缩库,提供了一种通用的数据压缩和解压缩算法。它最初由Jean-Loup Gailly和Mark Adler开发,旨在成为一个高效、轻量级的压缩库,其被广泛应用于许多领域,包括网络通信、文件压缩、数据库系统等。其压缩算法是…