笔记——三大串行总线SPI、IIC、UART

主要参考博客:https://blog.csdn.net/oqqHuTu12345678/article/details/65445338?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162786877116780262519377%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162786877116780262519377&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-65445338.first_rank_v2_pc_rank_v29&utm_term=%E4%B8%89%E5%A4%A7%E4%B8%B2%E8%A1%8C%E6%80%BB%E7%BA%BF&spm=1018.2226.3001.4187

一、名字

SPI(serial Peripheral Interface:串行外设接口),是motorola公司提出的一种同步串行数据传输标准;
I2C(INTER IC BUS:IC之间总线),是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备;
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器),是电脑硬件的一部分,它把将要传输的资料在串行通信与并行通信之间加以转换,UART通常被集成于其他通讯接口的连接上。UART即我们通常说的“串口”。

二、UART、SPI、I2C对比

在这里插入图片描述

三、串行外设接口:SPI

在这里插入图片描述

1、速览点

(1)四条信号线:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)、片选线(SS)。(所谓的进出,是针对信号进出主机而言)。

(2)SPI总线可以实现多SPI设备互相连接。提供时钟的SPI设备为主设备(Master),其他设备为从设备(Slave)。SCLK信号线只由主设备控制,从设备不能控制信号线。

(3)在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机。主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。

(4)主从设备间可以实现全双工通信,收发独立,操作简单,数据传输速率较高,但需要占用主机较多的口线(每个从机都需要一根片选线),而且只支持单个主机,没有指定的流控制,没有应答机制确认是否接收到数据。

(5)数据输出通过SDO线,数据在时钟上沿或下沿时改变(即发送),在紧接着的下沿或上沿被读取,从而完成一位数据传输。数据输入也使用同样原理。因此,8位数据的传输,至少需要8次时钟信号的改变(上沿和下沿为一次)。

(6)普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。

(7)SPI接口在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前(先传?),低位在后,为全双工通信。

2、数据传输

(1)SPI在数据传输的时候,需要确定两件事情:

  • 其一,数据是在时钟的上升沿采集还是下降沿采集;
  • 其二,时钟的初始(空闲)状态是为高电平还是低电平。
  • 对比:I2C空闲状态时,时钟线(不是数据线?)为高电平,数据采集时,时钟线也为高电平,但SPI给出了更自由的方式

(2)两个概念

CPOL:时钟极性,表示SPI在空闲时,时钟信号是高电平还是低电平。

CPHA:时钟相位,表示SPI设备是在在时钟的上升沿采集还是下降沿采集。

如果CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电
平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI 主模块和与之通信的外设备时钟相位和极性应该一致。

则SPI数据传输就有四种可能—按照标准的说法,SPI数据传输就有四种模式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、spi读写

(1)SPI在硬件设计上采用的双数据线制,根据设计,在SPI通信过程中,主从设备之间会形成一个数据环形链路——即主设备向从设备写一次数据,从设备就会回一次数据(至于从设备回复的数据是否有效,则另当别论——如果有效,主设备就把它读入,否则丢弃)。

在这里插入图片描述
(2)例子:假设上升沿发送、下降沿接收、高位先发送。

假设主机8位寄存器装的是待发送的数据10101010

在这里插入图片描述
解析:
原数据为10101010
(1)
此时主机发送1Bit数据,即将最左边的1发送出去,故当前状态为0101010X,X表示未知,因为换没接收到从机发送来的数据;
此时从机发送1Bit数据,即将最左边的0发送出去,故当前状态为1010101X,X表示未知,因为换没接收到主机发送来的数据;
(2)
此时主机接收1Bit数据,故当前状态为01010100;
此时从机接收1Bit数据,故当前状态为10101011;

  • 一个时钟周期内完成数据的接收与发送;
  • 主机与从机都是高位先发送,接收到的数据填充到最右边;
  • 由此可知八个时钟周期完成了一次数据交换。

四、IC之间总线:I2C

IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答
信号。

  • 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
  • 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

在这里插入图片描述
在这里插入图片描述

1、速览点

(1)由图可知

  • 由两条信号线组成:串行数据线(SDA)、串行时钟线(SCL)。
  • 由1,2箭头指示可知,I2C器件内部采用开漏的方法,总线被上拉。
  • 那么总线状态只能被下拉为0(当MOS管输入0的时候)。
  • 只要有一方下拉了总线,总线状态必定为0。

(2)任何一个设备都能像主控器一样工作,并控制总线,但同一时刻只能有一个主控设备。

(3)总线上的每一个设备都有一个独一无二的地址,根据设备的能力,作为发射器或接收器工作。

(4)在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。

(5)连接到相同总线的IC 数量只受到总线的最大电容限制。

(6)SDA传输数据是大端传输(高位先传,低位后传?),是以字节为单位的。

2、通信过程

在这里插入图片描述

3、寻址方式

在这里插入图片描述

在这里插入图片描述

4、同步信号

在这里插入图片描述
SCL为低电平时就是让发送器发送数据;
SCL为高电平就是让接收器接收数据的。

五、通用异步收发器:UART

1、速览点

(1)UART由波特率产生器、UART接收器、UART发送器组成。

(2)由三条信号线组成:RX、TX、GND

(3)UART包括RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。 嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。

(1)串口通信的特点:异步、电平信号、串行
  • 异步:串口通信的发送方和接收方之间是没有统一的时钟信号的。

  • 电平信号:串口通信出现时间早,速率较低,传输的距离较近,所以干扰还不太明显,因此当时使用了电平信号传输。后期出现的传输协议都改成差分信号传输了。

  • 串行通信:串口通信每次同时只能传输1个二进制位。

(2)RS232电平和TTL电平

(1)电平信号是用信号线电平减去参考线电平得到电压差,这个电压差决定了传输值是1还是0。

(2)在电平信号时多少V代表1,多少V代表0不是固定的,取决于电平标准。

譬如RS232电平中-3V~-15V表示1;+3~+15V表示0;TTL电平则是+5V表示1,0V表示0。

RS232的电平定义比较大,适合干扰大、距离远的情况;TTL电平电压范围小,适合距离近且干扰小的情况。
台式电脑后面的串口插座就是RS232接口的,在工业上用串口时都用这个,传输距离小于15米;TTL电平一般用在电路板内部两个芯片之间。

TTL和CMOS

在这里插入图片描述

(3)RS232和RS485
2232存在的问题:
  • 接口电平值较高,易损坏芯片,与TTL不兼容;
  • 通信速度较低;
  • 易产生共模干扰;
  • 传输距离较短,(最长15m);
485优势

RS485采用差分信号负逻辑,逻辑"1”以两线间的电压差为-(2到6)V表示;逻辑"0"以两线间的电压差为+(2~6)V表示。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL电路连接。RS-485的数据最高传输速率为10Mbps。

  • 差分信号更稳定;
  • 适合长距离传输(最大1500米)
    在这里插入图片描述

2、通信协议

在这里插入图片描述
(1)起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。

(2)数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。

(3)奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

奇偶校验位是用来给数据位进行奇偶校验(把待校验的有效数据逐个位的加起来,总和为奇数奇偶校验位就为1,总和为偶数奇偶校验位就为0)的,可以在一定程度上防止位反转。

(4)停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

(5)空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

(6)波特率:数据传输的速率。有以下几个档位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。

六、总结

1、通信接口分为物理层和协议层

(1)物理层(硬件):如UART,PC和单片机通信,PC机的串口是232电平而单片机的串口是TTL电平,两个设备之间通信如果电平不一致就相当于语言不通,造成逻辑混乱。因此一般的单片机系统板上都会有一个串口模块电路(串口控制器)用来进行电平转换,将PC机的232电平转化成单片机能识别的232电平,常用芯片如PL2303、CH340。

(2)协议层:就相当于规定了一个标准或规则,比如SPI协议中,主机向从机发出一个数据,从机接收到后会发出应答信号,这就是协议规定的内容,不需要人为干预。当然有的单片机没有这些协议的控制器(硬件),如51单片机和24c02通信,需要模拟IIC协议,用软件来实现硬件的功能,这就增加了软件的复杂度。

2、总线的选择

(1)SPI总线有4根线,分别是SCLK,MOSI,MISO,CS,可以挂多个从设备,但是在挂多个从设备时,主设备端还需要做一个n选一的译码器,用于选择将要访问的从设备,因此,主设备上的管脚需求比较多。SPI总线在只有一个从设备时,只要用到SCK,SDO,SDI这三根线,此时选择SPI比I2C总线占优。

(2)I2C总线只有两根线,SCL,SDA.,也可以挂多个从设备,对从设备的选择直接依靠协议完成,无需增加物理连线。一般情况下,当一块电路板上有多个从设备时,往往选用I2C而非SPI,因为SPI增加了额外额硬件开销以及电路板走线。

(3)I2C和SPI总线一般是读取一些PROM等从设备用。 而串行通信接口SCI(UART?),主要应用在两个智能设备之间的互相通讯。有别于SPI和I2C总线的主从模式,SCI可以是主-主模式。

(4)数据吞吐/传输速度,,如果应用中必须使用高速数据传输,那么SPI是必然的选择。因为SPI是全双工,IIC 的不是。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式还需要额外的I/O缓冲区,还并不是总是容易实现的。

### 不同串行通信协议的特点和应用场景 #### UART (通用异步收发传输器) UART 是一种全双工、异步通信方式,广泛应用于计算机与其他设备之间的短距离数据交换。其特点在于不需要时钟线来保持发送方和接收方的同步,而是通过起始位和停止位实现字符级别的同步。 - **优点**: 接口简单,硬件开销少。 - **缺点**: 数据速率相对较低,通常不超过几Mbps。 - **应用场合**: 主要用于调试端口、GPS模块等低速外设的数据传输[^1]。 ```c // 示例代码:配置UART波特率 void uart_init(unsigned int baud_rate){ UBRRH = (unsigned char)(baud_rate>>8); UBRRL = (unsigned char)baud_rate; } ``` #### IIC (内部集成电路总线) IIC 总线由两根双向线路组成——一根数据线(SDA),另一根时钟线(SCL)。它支持多主机操作,并能挂载多个从器件,在同一时刻只有一个主控能够发起通讯请求。 - **优点**: 只需两根导线即可完成通信,适合空间受限环境下的芯片间互联;功耗极低。 - **缺点**: 速度上限约为400 kbps(Fast-mode Plus可达到1 Mbps)[^2]. - **典型用途**: EEPROM存储器读写、温度传感器采样等场景。 ```cpp Wire.beginTransmission(DEVICE_ADDRESS); // 初始化I²C通信并指定目标地址 Wire.write(REGISTER_TO_READ); // 发送寄存器编号给对方准备接受指令 Wire.endTransmission(); // 结束本次事务处理流程等待回应包到来 byte data = Wire.read(); // 获取返回值保存到变量data里边去 ``` #### SPI (串行外围接口) SPI 使用四条信号线(MOSI, MISO, SCK 和 SS/CS),其中前两者分别负责输入输出功能,后者作为公共时钟源协调两端动作节奏一致,最后一个是选通控制命令使能特定子系统参与对话过程。 - **优势**: 支持更高的吞吐量,理论上可以超过几十甚至上百MHz级别; - **局限性**: 需求更多物理连线资源,增加了布板复杂度以及潜在干扰风险。 - **适用范围**: 显示屏驱动程序加载、ADC/DAC转换电路连接等领域内较为常见。 ```python import spidev spi = spidev.SpiDev() spi.open(bus=0, device=0) response = spi.xfer([command_byte]) # 向选定的目标发出查询请求获取响应结果列表形式呈现出来 ``` #### LIN (本地互联网) LIN 协议基于SCI(UART)构建而成的一种简化版汽车电子网络解决方案,旨在降低生产成本的同时满足车内分布式控制系统需求。该标准规定了一套完整的报文帧格式及其解析方法论体系框架结构设计思路理念原则规范准则指南建议参考文献资料来源出处依据基础前提条件背景情况概述综述总结归纳整理提炼概括阐述说明解释描述介绍分析研究探讨交流分享传播推广普及教育学习培训教程指南手册文档报告论文著作书籍教材课程讲座研讨会论坛会议记录纪要备忘录笔记摘抄片段节选片段摘要要点重点难点热点焦点问题解答解惑答疑解疑释义解读诠释阐明澄清正本清源追根溯源寻根究底刨根问底打破砂锅璺到底弄清楚搞明白理解掌握领会领悟感悟体会感受体验经历阅历见识见闻观感印象感觉感知认识了解熟悉精通专长擅长善于巧于妙手回春炉火纯青登峰造极出神入化超凡脱俗卓尔不群鹤立鸡群脱颖而出锋芒毕露崭露头角初露锋芒锋芒毕现锋芒尽显锋芒毕露锋芒显露无遗锋芒毕呈锋芒毕具锋芒毕集锋芒毕萃锋芒毕聚锋芒毕汇锋芒毕合锋芒毕敛锋芒毕藏锋芒毕隐锋芒毕没锋芒毕消锋芒毕逝锋芒毕散锋芒毕分锋芒毕离锋芒毕断锋芒毕折锋芒毕摧锋芒毕挫锋芒毕钝锋芒毕磨锋芒毕砺锋芒毕砥锋芒毕淬锋芒毕炼锋芒毕锻锋芒毕铸锋芒毕打锋芒毕锤锋芒毕击锋芒毕撞锋芒毕碰锋芒毕摩锋芒毕擦锋芒毕搓锋芒毕揉锋芒毕捻锋芒毕拧锋芒毕扭锋芒毕绞锋芒毕缠锋芒毕绕锋芒毕卷锋芒毕旋锋芒毕转锋芒毕动锋芒毕摇锋芒毕摆锋芒毕晃锋芒毕荡锋芒毕飘锋芒毕飞锋芒毕舞锋芒毕跃锋芒毕跳锋芒毕蹦锋芒毕窜锋芒毕蹿锋芒毕奔锋芒毕跑锋芒毕走锋芒毕踱锋芒毕移锋芒毕挪锋芒毕迁锋芒毕徙锋芒毕游锋芒毕逛锋芒毕遛锋芒毕溜锋芒毕巡锋芒毕查锋芒毕验锋芒毕检锋芒毕测锋芒毕试锋芒毕考锋芒毕察锋芒毕看锋芒毕望锋芒毕视锋芒毕窥锋芒毕探锋芒毕搜锋芒毕找锋芒毕觅锋芒毕寻锋芒毕访锋芒毕拜锋芒毕谒锋芒毕觐锋芒毕朝锋芒毕贡锋芒毕献锋芒毕供锋芒毕奉锋芒毕敬锋芒毕尊锋芒毕重锋芒毕贵锋芒毕珍锋芒毕宝锋芒毕爱锋芒毕惜锋芒毕怜锋芒毕悯锋芒毕悲锋芒毕哀锋芒毕痛锋芒毕伤锋芒毕悼锋芒毕念锋芒毕思锋芒毕忆锋芒毕记锋芒毕铭锋芒毕刻锋芒毕印锋芒毕烙锋芒毕烫锋芒毕烧锋芒毕烤锋芒毕焙锋芒毕烘锋芒毕暖锋芒毕热锋芒毕温锋芒毕凉锋芒毕冷锋芒毕冻锋芒毕寒锋芒毕冰锋芒毕霜锋芒毕雪锋芒毕雨锋芒毕风锋芒毕云锋芒毕雾锋芒毕烟锋芒毕气锋芒毕息锋芒毕声锋芒毕音锋芒毕乐锋芒毕歌锋芒毕曲锋芒毕调锋芒毕律锋芒毕韵锋芒毕拍锋芒毕鼓锋芒毕敲锋芒毕捶锋芒毕擂锋芒毕打锋芒毕击锋芒毕叩锋芒毕扣锋芒毕啄锋芒毕咬锋芒毕吃锋芒毕喝锋芒毕饮锋芒毕吸锋芒毕吮锋芒毕舔锋芒毕吻锋芒毕亲锋
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值