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

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

3天内不再提示

对于STM32的I2C Layout走线多长合适呢?

冬至子 来源:ecircuitlab 作者:ecircuitlab 2023-09-27 15:31 次阅读

今天来讨论一个I2C走线问题,过程是通过用ST提供的IBIS模型,从SI的角度出发,做SI仿真来评估STM32的I2C信号和确定Layout走线到底能走多长。

这里我选择了STM32F765XX-LQFP144封装的IBIS模式来实验,在Hyperlynx上把Layout模型电路画好如下图所示,U1使用STM32的PF0脚作为发送端,这个脚可以复用为SDA信号,U2使用STM32的PF0作为接收端,TL1、TL2分别为10in(25.4厘米)和1in(2.54厘米)的微带线走线,R1为上拉电阻

图片

图1. 使用STM32F765系列LQFP144封装的IBIS模型搭建的电路

搭建好Layout电路后,打开Model Selector给U1和U2赋予对应的IBIS模型,可以看到,ST提供的STM32 IO有四种速度等级,和带或不带上下拉电阻几种,如下。

图片

图2. IO有4中速度等级模型,每种又分带或不带上下拉电阻

上图中可以看到,IO内置的上拉电阻比较大,实际使用中一般不用内置电阻,都是外挂上拉电阻,所以我们 先选择最低速度SPEED0不带上下拉的模型验证

设置好模型后运行仿真,设置仿真条件为Oscillator模式,速率400K,IC modeling为Fast-Strong模式,模拟I2C以400K时钟速率运行,查看接收端波形如下图所示,可以看到波形很好,没有什么比较严重的过冲啥的,没啥问题。

图片

图3. 速度等级为SPEED0,Layout走线11in(29.29厘米),400K速率运行波形正常

现在对标我们平时的产品设计,有时I2C会绕板子不止28.29厘米这么长,那我们试试把长度拉大到50厘米,设置TL1为20in(长度50厘米多),然后再运行仿真得到如下图结果。

图片

图3. 速度等级为SPEED0,Layout走线21in(53.34厘米),400K速率运行波形有过冲

可以看到这时对于接收端接收到的波形,过冲有点严重了,因为STM32的IO可以兼容5V电平,所以这里高电平的过冲还没超过5V,我们就先不管。但是低电平时的下冲有318.7mV了。那到底要不要管呢?首先我们去翻下规格书,在规格书中找到电压特性表如下所示。

可以看到对于输入下冲信号,最小电压值是VSS-0.3V,即所选STM32的IO能接受的下冲最大为-0.3V,不能超过-0.3V。现在再看上面仿真的下冲电压,显然已经越过这个值。

芯片如果长时间在这样的条件下工作,可能一段时间后,IO就损坏失效,这也是我们很多产品在客户现场使用,一段时间后芯片的某个IO损坏的原因之一,就是Layout处理不好,有过冲、下冲超过IO极限值导致。当然,也有可能是其他原因导致,比如ESD之类的。

图片

图4. STM32规格书中的IO输入电压极限值

那对于STM32的I2C Layout走线多长适合呢? 这里我尝试了不同长度仿真分析,总结为,对于STM32F7系列的芯片来说,IO速度等级为慢速,I2C Layout走线不建议超过45厘米 。其他系列的可以参考这个信息轻微浮动,如果可以的话,尽可能使用IBIS模型仿真评估。

那是不是得到这样的结论后我们就可以结束了呢?不,其实还有一大堆坑。上面我特别的去强调我使用的IO的速度等级是SPEED0,慢速等级。图2中我们看到还有3种速度等级可以选用,实际中我们也可以代码配置为另外的3种速度等级,那如果我们更改下速度等级会不会有影响呢?这里我马上做了尝试,保持Layout走线长度为上面结论的45厘米长,把输出IO的速度等级换为SPEED1,运行仿真得到结果如下。从结果可以看到,速度等级升高后,上面的结论就不成立了,此时高电平的过冲仍然还在可接受范围内,但下冲就不是那么友善了,都-905.4mV了,这样搞,芯片不坏都天理难容。

图片

图5. 把IO速度等级换为SPEED1,Layout走线长度保存45厘米,仿真有严重过冲

从上面这个步骤来看,速度等级增加后,会使过冲变得严重,那这样的话,我们就不尝试SPEED2了,直接看SPEED3,看看最高速度等级到底会糟糕成什么样。同样保持Layout走线长度为45厘米不变,IO速度等级调整为SPEED3,运行仿真得到结果如下。嗯,看起来还好,没有糟糕到可以炸板,相对SPEED1来说,高电平过冲也还在可接受范围,下冲多了几个mV。

图片

图6. 把IO速度等级换为SPEED3,Layout走线长度保存45厘米,过冲情况跟SPEED1差不多

实验到这里我突然好奇,现在ST主推用CubeMX来自动生成配置代码,用户在使用I2C时,它的IO会默认配置为什么样的速度等级?于是我马上打开CubeMX做了个尝试,很快就得到了答案,不过看完我傻眼了,默认配置为SPEED3,如下图所示。

根据上面仿真情况,我想了想,要是哪天哪位冤种用这配置代码放在一个主控到I2C从机设备线缆比较长的产品中,要是出问题了,估计加班排查好久都不一定查出来。

图片

图7. CubeMX对于I2C的IO速度等级默认配置为SPEED3

说到上面的大冤种情形,想起2年前做的一个产品,产品也是主板上通过线缆把I2C信号拉到子板上配置子板的芯片,线缆有50厘米长。当时I2C主机总会莫名其妙的把子板芯片搞挂,最后发数据没ACK,需要重新给子板上电后才能恢复正常,但过一会又不行,当时搞得也是头疼。当时使用的主控是AlteraFPGA,排查无果后我倒回去重新看FPGA的规格书,在IO特性里发现IO的上升下降沿都比较陡,当时就觉得是遇到SI的问题了,然后就马上调了FPGA的IBIS模型搭模型电路仿真,结果跟猜测一样。

理论、仿真分析确认问题点后,因为FPGA的IO特性就那样,没办法去改变,想了想后就找了颗上升、下降沿没那么陡的电平转换芯片,放在FPGA IO和子板芯片IO之间做缓冲,最后问题解决。

唠嗑完大冤种后,我们再来看看使用SPEED3时,留给Layout的走线长度裕量还有多少。经过反复尝试,最终定下来对于我使用的STM32F765XX-LQFP144这颗芯片,使用I2C外设,如果IO速度等级配置为SPEED3模式的话,保险Layout走线长度建议控制在0.6in(1.524厘米)内,下图为控制长度为0.6in的仿真结果,长了就下冲厉害。

图片

图8. IO速度等级为SPEED3时,控制Layout走线在0.6in时的仿真结果

惊讶吧!1.524厘米长,把这个约束给Layout工程师估计会被打死,所以对于STM32的I2C Layout要求,硬件设计时可以使用前面建议的45厘米长度约****束,但必须注意要求软件把IO速度等级配正确 ,不然大家都得加班查Bug。

原理讲解

现在我们经过一波仿真实操验证后,知道了STM32的I2C Layout最大走线长度的参考,那究竟是什么原因导致我们的Layout走线没法再增长呢?下面我简单解释下。

首先对于我们看到的Layout走线,细化去看的话,可以等效为下图所示的电路模型,由寄生电感和寄生电容构成。信号在上面传输时,如果电平翻转的上升、下降沿比较陡,那么在接收端接收到的电压不再等于输出端的电压,而是V=L*di/dt。

从这个公式可以看到,影响电压V的就是寄生电感L和IO的上升、下降沿dt,所以解决V不过度变化大的方法就是要么让L尽可能小,要么就是让上升、下降沿增大。L变小就是走线尽可能短,IO上升、下降沿增大一般就是找电平转换芯片来做做缓冲改善。

图片

图9. Layout走线的寄生电路模型

如果对于上面的理论还是难以理解,那没问题,我们直接来搭一个电路仿真看看也可以。参考上面电路模型我们搭一个电路和仿真如下,电路设置输出周期15ns,50%占空比的波形,上升沿、下降沿设置为3ns,可以看到,输出波形震荡过冲和下冲还是比较大。

图片

图10. 搭建Layout走线电路模型,设置上升、下降沿为3ns仿真波形

我们再把上升、下降沿时间缩小到1ns看看,仿真结果如下,可以看到过冲、下冲更大,所以这也验证了上面的理论解释。

图片

图11. 搭建Layout走线电路模型,设置上升、下降沿为1ns仿真波形

同样为了论证减小L带来的改善,在上图11的基础上,把寄生电感缩小为0.1nH,运行仿真,从仿真结果来看,已几乎不再有过冲、下冲,也符合我们理论解释情况。

图片

图11. 搭建Layout走线电路模型,设置寄生电感为0.1nH的仿真波形

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

    关注

    2240

    文章

    10675

    浏览量

    348869
  • I2C总线
    +关注

    关注

    8

    文章

    357

    浏览量

    60413
  • 寄生电感
    +关注

    关注

    1

    文章

    147

    浏览量

    14462
  • FPGA芯片
    +关注

    关注

    3

    文章

    241

    浏览量

    39557
  • LQFP封装
    +关注

    关注

    0

    文章

    10

    浏览量

    7343
收藏 人收藏

    评论

    相关推荐

    【问题汇总】关于STM32I2C问题

    。有没有相关的参考设计?答:这个是可以的!我用了wm8974!用两个i2s口实现!stm32f4是全双工的!只用一个就行了!很好用有问题可以liufeng5@sohu.com咨询4、I2C上电过程故障
    发表于 03-14 09:45

    I2C应用问题

    I2C具体是怎么用的,就知道是单片机与02cm这芯片之间连一根时钟线和一根数据线,但是把数据发送到这个小芯片又有什么用,比如我想发一个控制一个4位数码管,怎么运用这个
    发表于 03-19 19:37

    PCB Layout线秘籍

    会造成信号的反射;三是直角尖端产生的EMI。传输线的直角带来的寄生电容可以由下面这个经验公式来计算:C=61W(Er)1/2/Z0 在上式中,C就是指拐角的等效电容(单位:pF),W指
    发表于 07-07 11:45

    STM32 I2C从机模式

    小弟正在做个项目,用I2C协议实现一块STM32控制另外一块STM32上面的LED的显示,现在采取的是硬件I2C。目前是这样做的,用第一块STM32
    发表于 08-14 10:10

    到底什么是I2C

    )。TI的用于构建I2C树状图的产品组合可以分为三个功能,如图1所示:缓冲转换器、I / O扩展器和I2C开关。 图1:具有各种I2C功能设备的电子系统 当您的设计在集成电路(IC)之
    发表于 07-23 04:45

    stm32f401re i2c使用

    最近在用stm32f401re做一款热成像设备需要用到I2C,这里总结一下遇到的坑。一开始调试我用的是开发板飞线接传感器,SCL SDA加4.7k上拉电阻。使用硬件I2C时读写大量数据
    发表于 03-05 19:02

    I2C不迷茫--系列文章讲透I2C

    用于确定上拉电阻器尺寸并确定电路线最大长度的数学计算。让我们从讨论2 C实际上是什么开始。5、如何在示波器上读取I2C总线精通示波器的第二
    发表于 09-22 09:31

    PCB LAYOUT的怎么线

    下面从直角线、差分走线、蛇形线三个方面来阐述PCB LAYOUT
    发表于 03-17 07:25

    【原创分享】STM32学习笔记|I2C详解

    地址查找从机I2C通常用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。很多外围器件采用I2C通讯接口访问。STM32I2C基础内容1、STM32
    发表于 06-18 09:27

    I2C简介

    线(SDL)组成。I2C 总线上可以接多个 I2C 设备,每个器件都有一个唯一的地址识别。同一时间只能有一个主设备,其他为从设备。通常 MCU 作为主设备控制,外设作为从设备。STM32
    发表于 08-10 06:28

    stm32的硬件I2C

    对于stm32的硬件I2C确实有不尽人意的地方。但是还是可以实现的,毕竟使用stm32的硬件I2C确实比使用IO口来模拟简单的多。下面的程序
    发表于 08-11 07:53

    串口与I2C有什么区别

    主模式:我们今天来讲I2C通信。那I2C通信的特点是什么能。我们一般使用的串口 (半双工异步串行通信)与I2C 有什么区别。串口(半双工异步串行通信):就是好像朋友在对话。我可以主动
    发表于 11-24 07:53

    I2C协议简介

    I2C协议简介协议 (计算机学科概念)对于通讯协议,我们以分层的方式来理解,分为物理层和协议层。简单来说物理层规定我们用嘴巴还是用肢体来交流,协议层则规定我们用中文还是英文来交流。物理层规定通讯系统
    发表于 01-12 07:25

    如何去实现一种I2C上拉电阻的设计

    I2C上拉电阻 在一些PCB的layout中,大家往往会看到在I2C通信的接口处,往往会接入一个4.7K的电阻,有的datasheet上面明确有要求,需要接入,有的则没有要求。 I2C
    发表于 01-14 07:22

    STM32I2C特性是什么?

    I2C通信协议具有哪些特点?常见的I2C通信系统有哪些?STM32I2C特性是什么?
    发表于 01-18 07:44