板级通信接口:UART 、I2C 、SPI


在这里插入图片描述


1. 关于通信的一些概念

1.1 通信接口

通信接口分为内部通信接口外部通信接口两大类。

内部通信接口主要用于板级信号传输,常见于设备内部组件间的通信,通常具备速度快、距离短的特性,有UART(通用异步收发器)I2C(双线总线)SPI(串行外设接口)

外部通信接口主要用于设备级信号传输,实现设备之间的通信,多采用差分传输(抗干扰强),通常速度相对较慢但传输距离远,有RS - 232RS - 485CAN(控制器局域网)

1.2 通信方式

单工:信号只能单方向传输,发送端与接收端角色固定,无法反向通信。例如:广播电台与收音机之间的通信,电台持续发送节目信号,收音机仅接收,无反向传输。

半双工:信号可双向传输,但同一时刻只能有一个方向的传输。通信双方需分时切换发送和接收角色;例如:I2C,RS - 485,CAN等通信接口。

全双工:信号可同时双向传输,通信双方在同一时刻既能发送又能接收。例如:UARTSPIRS - 232

1.3 数据传输方式

同步传输:通过专门的同步时钟信号来协调数据传输,发送端与接收端依据时钟信号进行数据的发送与采样,确保双方操作的同步性。例如:I2C–借助 SCL(时钟线) 实现同步,SPI–依靠 SCLK(时钟线) 同步。

异步传输:无专门的同步时钟,通信双方预先约定传输速率(波特率),通过起始位停止位来界定数据帧的边界,实现数据传输的同步。例如:UART:以约定的波特率(如 9600bps、115200bps) 传输数据。发送端在数据前添加起始位(低电平),数据后添加停止位(高电平)

1.4 通信网络

一对一传输(不能构成总线网络):通信仅在两个设备之间进行,无法实现多个设备共享同一总线进行数据交互。例如:UART–通过 TX(发送)和 RX(接收)两根线实现两个设备间的通信,RS - 232–早期用于计算机与外设(如打印机、调制解调器)的通信,采用固定的点对点连接方式。

一对多传输(可构成总线网络,通过地址或片选识别):一个主设备可与多个从设备通信,多个设备共享同一总线,通过地址(软件层面)或片选(硬件层面)来区分不同从设备。例如:I2C–通过 7 位或 10 位设备地址识别从机,SPI–利用 片选信号(SS/NSS) 识别从机,RS - 485–总线上可连接多个设备,通过上层协议(如 Modbus - RTU)定义设备地址CAN–支持多主架构,每个节点有唯一标识符

2. UART

UART(通用异步收发传输器)是一种通用串行数据总线,用于异步通信,支持双向全双工传输(发送和接收可同时进行)。

UART 作为异步串口通信协议,其工作原理是将传输数据的每个字符按位依次传输,无需同步时钟,依靠通信双方约定的波特率(传输速率)保持同步。

协议:
在这里插入图片描述
起始位:先发出一个逻辑 “0” 的信号,作为传输字符开始的标志,告知接收方即将开始数据传输。

数据位:紧随起始位之后,个数可为 4、5、6、7、8 位,构成一个字符。传输时从最低位(LSB)开始发送,例如 8 位数据会按低位到高位的顺序依次传送。

奇偶校验位:用于校验数据传输的正确性。若为偶校验,数据位与校验位中 “1” 的总数为偶数;若为奇校验,“1” 的总数为奇数。通过这种方式,可检测传输中是否出现单比特错误。

停止位:表示一个字符数据传输的结束,电平为高,位数可以是 1 位、1.5 位或 2 位。除了标志结束,它还为通信双方提供时钟同步校正的机会。停止位越多,对时钟不同步的容忍程度越大,但会降低数据传输速率。

空闲位:当线路上没有数据传送时,处于逻辑 “1” 状态,表明当前线路空闲。

波特率:衡量数据传送速率的指标,指每秒钟传送的比特位数。例如,波特率为 9600 时,表示每秒传输 9600 位数据。

3. I2C

I2C(Inter - Integrated Circuit,集成电路总线)通信协议由 Philips 公司开发,凭借引脚少、硬件实现简单、可扩展性强等优势,广泛应用于系统内多个集成电路间的通信。

I2C 是一种双线制串行通信协议,通过时钟线(SCL)和数据线(SDA)实现设备间短距离通信,支持主从架构(一个主设备与一个或多个从设备)。主设备掌控通信流程,如发起起始 / 停止信号、生成时钟脉冲;从设备通过唯一地址(7 位或 10 位)被主设备选中后进行数据交互。

3.1 物理层:

在这里插入图片描述
I2C 通信协议的物理层具有以下特点,这些特点共同构成了其独特的硬件通信基础:

  1. 多设备总线支持:I2C 是一种支持多设备的总线结构,允许多个通信主机和从机共用信号线。例如,一个微控制器作为主机,可同时连接多个传感器(从机)。
  2. 双线制简洁设计:仅通过两条线路实现通信,即双向串行数据线(SDA)和串行时钟线(SCL)。SDA 负责数据传输,SCL 用于同步数据的收发节奏。
  3. 设备独立编址:每个连接到总线的设备都有唯一地址,主机通过地址访问特定设备。
  4. 上拉电阻与高阻态特性:总线通过上拉电阻连接电源,设备空闲时输出高阻态。当所有设备空闲时,上拉电阻将总线拉至高电平。这种设计使得设备在不通信时不干扰总线,仅在需要时通过拉低 SDA/SCL 参与通信。
  5. 多主机仲裁机制:当多个主机同时尝试使用总线时,仲裁机制通过比较数据位,确保只有一个主机成功占用总线,避免数据冲突,保证通信的可靠性。
  6. 多传输模式适配:具备标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)三种传输速率。尽管目前多数设备不支持高速模式,但前两种模式已能满足常见低速场景(如传感器数据读取)的需求。
  7. 总线电容限制:连接到同一总线的 IC 数量受限于总线最大电容(400pF)。电容过大会影响信号的上升沿和下降沿,导致通信异常,因此实际应用中需根据电容限制合理规划设备数量,确保信号质量。

3.2 协议层

  1. 起始和停止信号:
    在这里插入图片描述
    I2C 通信中,当 SCL(时钟线)保持高电平时,SDA(数据线)由高电平转为低电平表示起始信号,由低电平转为高电平表示停止信号,这两种信号均由主机生成以控制通信的开始与结束。

  2. 数据有效性:
    在这里插入图片描述
    I2C 通信中,当 SCL(时钟线)为高电平时,SDA(数据线)的电平状态有效(高电平表示 “1”、低电平表示 “0”);当 SCL 为低电平时,SDA 数据无效,此时可切换电平以便为下一次数据传输做好准备。

  3. 设备地址(7位)及数据传输方向:
    在这里插入图片描述
    I2C 设备地址为 7 位或 10 位,其后紧跟 1 位数据方向位(7 位地址对应第 8 位、10 位地址对应第 11 位),该位为 “0” 时主机向从机写数据(主机控制 SDA),为 “1” 时主机从从机读数据(从机控制 SDA)。

  4. 应答与非应答信号:
    在这里插入图片描述
    I2C 传输数据或地址后,接收端需通过应答信号(ACK/NACK)反馈是否继续接收:接收到字节后若发低电平 ACK(第 9 个时钟周期由接收端控制 SDA 为低),发送端继续传输;若发高电平 NACK(SDA 为高),发送端结束传输并产生停止信号。

4. SPI

SPI(Serial Peripheral Interface)协议,由摩托罗拉公司开发,也称作串行外围设备接口,是一种具备高速全双工特性的通信总线。该协议在 ADC、LCD 等设备与 MCU 的交互中应用广泛,尤其契合对通信速率有较高要求的场景。

4.1 物理层

在这里插入图片描述
SPI通信使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为SS:

  1. NSS(从设备选择信号线):也叫片选线,用于寻址从设备。与 I2C 靠地址寻址不同,SPI 中每个从设备有独立的 NSS 线连主机。当主机拉低某个从设备的 NSS 线(片选有效),才开始与该从设备通信,以 NSS 置低为开始,拉高为结束。
  2. SCK(时钟信号线):由主机产生,用于同步通信数据,决定通信速率。但通信速率受限于主从设备中支持的低速一方,比如 STM32 的 SPI 时钟最高为 fpclk/2,若从设备速率低,就按低速运行。
  3. MOSI(主出从入引脚):数据从主机经此线输出,从机由此读入主机发送的数据,数据流向固定为主机到从机。
  4. MISO(主入从出引脚):从机数据经此线输出,主机由此读入从机的数据,数据流向是从机到主机。

4.2 协议层

SPI通信时序:
在这里插入图片描述
主机控制 NSS(低电平时 MOSI/MISO 有效)、SCK 和 MOSI,从机通过 MISO 发送数据,双方在 SCK 每个周期同步传输一位数据。

  1. 起始和停止信号:
    NSS 信号线由高变低(①处)是 SPI 通信起始,主机借此选中对应从机(各从机独占独立 NSS 线),由低变高(⑥处)则是停止信号,取消从机选中状态。

  2. 数据有效性:
    SPI 通过 SCK 同步,在每个时钟周期经 MOSI 和 MISO 同时双向传输一位数据,数据传输顺序需在 MSB 或 LSB 先行上保持设备一致(通常用 MSB 先行)。

    SPI 中 MOSI 和 MISO 数据在 SCK 上升沿变化、下降沿采样,下降沿时数据有效(高电平 1、低电平 0),传输单位可为 8 位或 16 位且次数不限。

  3. CPOL/CPHA及通信模式:
    SPI 有 4 种通信模式,区别在于总线空闲时 SCK 的电平状态(时钟极性 CPOL,CPOL=0 为低电平空闲、CPOL=1 为高电平空闲)和数据采样时刻(时钟相位 CPHA,CPHA=0 在 SCK 的奇数边沿采样、CPHA=1 在偶数边沿采样),两者共同决定了数据在 SCK 的哪个边沿被采样及空闲时 SCK 的初始状态。

    3.1 CPHA=0时的SPI通信模式:
    在这里插入图片描述
    3.2 CPHA=1时的SPI通信模式:
    在这里插入图片描述
    SPI 中 CPHA=0 时数据在 SCK 奇数边沿采样,此时若 CPOL=0(SCK 空闲低电平)奇数边沿为上升沿,若 CPOL=1(SCK 空闲高电平)奇数边沿为下降沿,即采样边沿的具体类型(上升或下降)由 CPOL 决定。

    SPI 中 MOSI 和 MISO 数据在 SCK 的奇数边沿(CPHA=0 时)或偶数边沿(CPHA=1 时)保持稳定并被采样,非采样时刻数据才会切换状态,其中 CPHA 决定采样对应 SCK 的奇偶边沿,与 CPOL 无关。

  4. SPI的4种模式:
    在这里插入图片描述
    SPI 通过时钟极性 CPOL(空闲时 SCK 电平)和时钟相位 CPHA(采样边沿奇偶)的 0/1 组合形成 4 种通信模式(CPOL=0/1 与 CPHA=0/1 两两组合),主机与从机必须工作在相同模式下才能正常通信,实际中模式 0(CPOL=0、CPHA=0)和模式 3(CPOL=1、CPHA=1)应用较多。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡卡君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值