嵌入式常见的几种接口
嵌入式开发中,常见的外设通信接口/协议有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 = 0 | CPOL = 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的传输格式
- 空闲位:当总线处于空闲状态时信号线的状态为高电平
- 起始位:发送一个低电平信号,表示开始传输数据
- 数据位:可以是5~8位的数据,一般都是8位。先发送最低位,最后发送最高位。(I2C和SPI先发送最高位,最后发送最低位)
- 奇偶校验位:数据位传送完成后,要进行奇偶校验。分为无校验,奇校验,偶校验
?- 无校验(no parity)
?- 奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’
?- 偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。 - 停止位:数据的结束标志。可以是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增加了额外硬件开销以及电路板走线
相关文章:
嵌入式常见的几种接口
嵌入式开发中,常见的外设通信接口/协议有SPI,I2C,UART三种,本文先分三个部分对SPI,I2C,UART进行介绍,最后对这三种协议进行比较。 1 SPI 1.1 SPI的简介 SPI(Serial Peripheral …...
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(七)
分页查询、删除和修改菜品 1. 菜品分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 设计VO类1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.3.2 前后端联调测试 2. 删除菜品2.1 需求分析…...
Grafana采用Nginx反向代理,部分功能报错‘Origin not allowed’ behind proxy
只有部分功能会有这个提示,比如修改密码啥的,网上找了下,官方找到了答案:https://community.grafana.com/t/after-update-to-8-3-5-origin-not-allowed-behind-proxy/60598 有个回复是这样的: tl:dr: try adding prox…...
请大数据把奥威BI分析工具推给每一个财务!
这个财务指标怎么算?那些数据什么时候能拿到?看完报表,发现某部门上个月的支出涨幅过大,想了解原因怎么办?……财务人,你是不是每个月都把时间消耗在这些事情上了?那你可得快接住这个BI大数据分…...
知乎禁止转载的回答怎么复制做笔记?
问题 对于“禁止转载”的回答,右键复制是不行的,ctrl-c也不行,粘贴之后都是当前回答的标题。稍微看了代码,应该是对copy事件进行了处理。不过这样真的有用吗,真是防君子不防小人,只是给收集资料增加了许多…...
pta找鞍点—C语言
7-13 找鞍点 分数 300 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入格式: 输入第一行给出一个正整数n(1…...
编程零基础算法 | 四、循环和选择结构——1572. 矩阵对角线元素的和
一、题目链接 1572. 矩阵对角线元素的和 二、题目简介 给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] start 2*i(下标从 0 开始)且 n nums.length 。 请返回 nums 中所有元素按位异或(XOR)后…...
ubantu配置网卡ip
1.ifconfig查看网卡 2. vi /etc/network/interfaces auto ens33 # 网卡名 iface ens33 inet static # 注意网卡名 address 192.168.43.10 # 配置ip地址 netmask 255.255.255.0 # 掩码 gateway 192.168.43.1 # 网关 3.重启网卡 ifconfig ens33 down ifco…...
增加F110 付款方式的乱记录
随便记录一下,基本上有这些信息可以了 为了保持PRD与测试机一致的银行代码,需要先在DEV,QAS 改成4 外部给号 主要都是在FBZP 开户行维护-FI12_HBANK/FI12 S4hana 里面有的没有办法在FI12 维护只能去NWBC NWBC:维护银行账户并关联…...
软件系统安全漏洞检测应该怎么做?靠谱的软件安全检测公司推荐
软件系统安全漏洞检测是指通过对软件系统进行全面的、系统化的评估,发现和解决其中可能存在的安全漏洞和隐患。这些安全漏洞可能会被不法分子利用,引发数据泄露、系统瘫痪、信息被篡改等安全问题,给企业造成严重的经济和声誉损失。那么软件系…...
单片机学习12——电容
电容的作用: 1)降压作用: 容抗: Xc 1/2fc 串联分压原理。2100Ω的容量,50Hz的频率,可以得到1.5uF。断电之后,需要串联一个1MΩ的电阻放电。 那是不是可以使用2100欧姆的电阻来代替电容呢&am…...
淘宝平台商品详情平台订单接入说明
一 文档说明 本文档面向对象为电商平台商品详情数据和订单进行管理的第三方开发者或自研商家 二 支持范围 目前API已经支持订单的接单、取消、退单处理等操作。如果您的订单管理需求现有API不能满足,可以联系我们提出API需求。 参数说明 通用参数说明 参数不要乱…...
Linux文件截断命令(truncate head tail dd)
目录 一、truncate功能概述实例(可用于删除文件末尾指定大小的内容) 二、head功能概述实例(可用于删除文件末尾指定大小的内容) 三、tail功能概述:实例(可用于删除文件开头指定大小的内容) 四、…...
Armbian安装python环境和pip国内源
文章目录 安装python环境配置pip为国内源 安装python环境 更新软件包列表: sudo apt update安装 Python 3(通常是最新版本): sudo apt install python3验证 Python 安装是否成功: python3 --version运行上述命令后&…...
宿主Linux——KVM安装Windows7系统
KVM虚拟技术 KVM(Kernel-based Virtual Machine) 是基于Linux内核的开源虚拟化技术,在一台物理机上可同时运行多个虚拟系统。KVM使用硬件虚拟化扩展,例如Intel的VT和AMD的AMD-V,在性能方面更加高效,可提供更好的计算能力和响应速…...
Mysql更新Blob存储的Josn数据
Mysql更新blob存储的Josn数据 记录一次mysql操作blob格式存储的json字符串数据 1、检查版本 -- 版本5.7以上才可以能执行json操作 select version(); 2、创建测试数据 -- 创建测试表及测试数据 CREATE TABLE test_json_table AS SELECT UUID(), {"test1": {"…...
C语言——指针(三)
📝前言: 上篇文章C语言——指针(二)中对:指针的运算和指针变量类型对指针使用的影响开展了进一步的探讨,这篇文章我们继续学习一下指针与一维数组之间的关系: 1,对数组名的理解 2&am…...
VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h
前言 续接上一篇,本本篇接着介绍VIR-SLAM中estimator.cpp/.h文件的函数,尤其是和UWB相关的相比于VINS改动过的函数,仍然以具体功能情况代码注释的形式进行介绍。 重点函数介绍 优化函数,代码是先优化,后边缘化。 …...
大模型的RPA应用 | 代理流程自动化(APA),开启智能自动化新纪元
随着技术创新的持续推进,自动化技术已经变得至关重要,成为驱动企业和社会向前发展的核心动力。在自动化的里程碑中,机器人流程自动化(RPA)已经有效地将简单、重复且规则性的任务自动化。可是随着对处理更为复杂、多变且…...
爬虫学习 异步爬虫(五)
多线程 多进程 协程 进程 运行中的程序 线程 被CPU调度的执行过程,操作系统 运算调度的min单位 在进程之中,进程中实际运作单位 from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(target …...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
