0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C与SPI与UART:如何布局这些通用总线

要长高 来源:韬放科技 2023-11-08 17:33 次阅读

如果您要为项目构建开发板或使用通用MCU,则会发现许多用于通信其他活动组件的协议。USB以太网之类的标准已内置在大多数控制器中,用于与计算机外围设备一起使用。尽管如此,仍使用I2C,SPI,UART等协议与下游MCU或可编程IC进行接口。I2C总线,SPI总线和UART总线之间的区别很简单,任何使用MCU的设计人员都应该知道如何为这些协议设置路由和布局。

这些协议是速度较慢的信令标准,因此,如果您使用这些协议,几乎不必担心诸如阻抗控制或传输线行为之类的问题。但是,在确保在接收器上正确读取总线信号时,必须考虑一些重要的设计要点。解决问题也很重要,但是特定的产品和您的代码可以解决这一点。现在,让我们看一下如何在您的PCB布局中使用这三种通用协议,以及一些保持信号完整性的要点。

I2C与SPI与UART之间的差异

从8位到32位的所有MCU都将至少使用这些协议中的一种以及GPIO,以实现可编程性并将信号发送到简单的外设。这三个串行协议是总线协议。I2C和UART使用寻址方案,而SPI是无地址的。尽管SPI是无地址的,但它是一种总线协议,仍可用于选择下游设备以接收数据。

I2C协议

I2C(发音为I平方的C,有时也称为集成电路间的IIC)使用两条线(标准,快速和快速加法模式)来控制其他设备;一条线是时钟线(SCL),另一条线是数据线(SDA)。它具有三种模式,下表总结了这些模式。请注意,上升/下降时间值假定在I / O上安装了典型的串联电阻

wKgZomVLVVOAR0PSAABlQHfP81M908.png

*假设VDD / VCC = 5.5V。如果VDD / VCC较低,则按线性比例缩小

**将时钟线的这些值除以2

请注意,超快速模式是唯一将通信仅用于下游写入操作的模式。此模式也很重要,因为它可以帮助我们了解何时需要匹配总线阻抗,而实际上这几乎是绝不可以匹配的。如果我们对临界线长度采取非常保守的10%限制,我们会发现这些线的临界长度为0.32 m,这比使用I2C的大多数电路板的尺寸要长得多。如果我们将拐点频率用于最短的上升/下降时间,并且将临界长度限制为10%,则得出的值会更长,为0.92 m。对于超快模式,我们应该将保守的数字设置为0.32 m。任何小于此值的I2C线都不会充当传输线,我们只需要担心端接方案。

端接的重点是选择合适的上拉电阻和串联电阻。上拉电阻器和VDD / VCC线路总线的电容形成放电和充电RC电路,当驱动器切换时,该电路为接收器提供信号。信号线和时钟线的上拉电阻值(Rp)必须遵守以下不等式:

wKgZomVLVWGAIgLsAAD0rQmmkkw998.png

总线电容是使用VCC总线阻抗的标准公式确定的,该公式使用与传输线(微带或带状线)相同的公式计算得出。然后,您可以使用线路的阻抗和传播延迟来解决总线电容。在I2C标准下,串联电阻是可选的,但可以包括在内以保护器件免受电压尖峰的影响并减慢上升/下降时间。确定与您的上拉电阻值配对的正确串联电阻值。

SPI协议

SPI协议类似于I2C。该总线上总共使用了4条线,并且可以两种可能的方式排列组件。如果使用单个控制器设备来触发单个下游设备,则拓扑就是点对点的。触发多个设备取决于驱动器提供的芯片选择输出的数量(标准模式)。第二种模式使用菊花链,其中单个设备选择输出连续触发菊花链中的每个设备。

与I2C不同,SPI中的各种信令参数都是高度可配置的。除非您运行的接口非常快,否则您可以将互连线上的信号电平近似为DC,因为它将低于传输线行为的临界长度。然后,您可以使用一个串联电阻器来终止驱动器的低阻抗输出,并确保最大的功率传输。上面显示的具有跟踪电容的RC放电方法可以控制接口的输出电流和上升/下降时间。

UART协议

通用异步收发器(UART)与I2C相似。这些接口的最大数据速率约为5 Mbps。UART设备也很容易使用,因为设备之间没有时钟发送。一切都是异步的。注意,每个UART设备的内部(系统)时钟必须以波特率的几倍运行(即,每个位被采样N次)。单个控制器设备和单个下游设备之间仅使用两条电线进行通信。

注意,UART器件的数据格式,信号电平和波特率可通过外部驱动器电路进行配置。不幸的是,这也意味着对于UART器件的布线和布局几乎没有硬性规定。遵循标准的高速设计指南,通过查看传输线行为的转变来确定何时需要终止。减少过冲的典型端接方法是串联端接。请注意,UART可能在高电平或低电平下处于空闲状态,并且可能需要上拉电阻来设置所需的空闲水平;在添加上拉电阻之前,请务必检查您的组件规格

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89602
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1346

    浏览量

    120830
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99968
收藏 人收藏

    评论

    相关推荐

    在Sense Tuner中并没有找到相关的I2C设置,请问真么设置才能将UART变为I2C

    在Sense Tuner中并没有找到相关的I2C设置,请问真么设置才能将UART变为I2C
    发表于 02-02 08:59

    请问哪些PSoC 4000设备支持I2CSPIUART

    哪些 PSoC 4 设备支持 I2CSPIUART? 使用 PSoC Creator 中的设备选择器会显示所有 PSoC 4000 设备都有通信块。设备选择器并未说明这些通信块
    发表于 01-31 07:31

    蓝牙串口通讯总线——I2C/SPI/UART

    嵌入式工程师在做串口通信调试工作的时候,会经常用到I2CSPIUART这3条总线I2CSPI
    的头像 发表于 01-22 09:41 394次阅读
    蓝牙串口通讯<b class='flag-5'>总线</b>——<b class='flag-5'>I2C</b>/<b class='flag-5'>SPI</b>/<b class='flag-5'>UART</b>

    最简单的总线通讯!I2C通讯总线的原理原来这么好懂

    通讯I2C
    安泰仪器维修
    发布于 :2024年01月02日 11:16:31

    UARTSPII2C比较 串口通信介绍

    UARTSPII2C比较 I2C线更少,比UARTSPI更为强大,但是技术上也更加麻烦些,
    的头像 发表于 11-09 18:06 749次阅读
    <b class='flag-5'>UART</b>、<b class='flag-5'>SPI</b>、<b class='flag-5'>I2C</b>比较 串口通信介绍

    twi和i2c总线有什么区别?

    twi和i2c总线有什么区别,他们谁是不是兼容谁
    发表于 11-08 07:45

    AT32F423 I2C使用指南

    AT32 的 I2C 总线接口用于处理微控制器和串行 I2C 总线之间的通信,支持主机和从机模式,支持唤醒深睡眠模式,最大通信速度为 1Mbit/s(增强快速模式 fast mode
    发表于 10-26 06:33

    终于搞清了:SPIUARTI2C通信的区别与应用!

    电子设备之间的通信就像人类之间的交流,双方都需要说相同的语言。在电子产品中,这些语言称为通信协议。 之前有单独地分享了SPIUARTI2C通信的文章,这篇对它们做一些对比。 串行
    发表于 10-07 17:01

    i2c总线最多可以接多少设备?

    请问i2c总线最多可以接多少设备
    发表于 09-26 06:38

    I2C总线的使用与编程

    I2C总线是飞利浦公司在20世纪80年代初由S定义的一种二线制总线系统。I2C总线是一种双向的,专为简单但高效的控制应用而设计。 它广泛应用
    发表于 09-04 07:23

    全面掌握面试必考题I2C协议 - 第12节

    I2C协议
    充八万
    发布于 :2023年09月01日 19:07:43

    80 第23.1讲 I2C实验-I2C协议和6U的I2C控制器详解 - 第2

    程序代码I2C协议
    充八万
    发布于 :2023年08月17日 10:03:33

    基于 FPGA 的模拟 I2C协议系统设计

    控制总线暂停。 2总线上的时序信号I2C 总线为同步传输总线
    发表于 08-14 18:21

    LPC55xx为I2C总线配置非“真正的开漏”引脚,还需要考虑什么?

    。 ”,请参见第 15.2 节。 对于第二个 I2C 总线接口,我使用 Flexcomm4 和引脚 PIO0_18 和 PIO0_19。这些是标准端口引脚。 这就产生了以下问题: 我是否应该将标准
    发表于 05-16 07:21