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
    +关注

    关注

    2189

    文章

    10022

    浏览量

    344927
  • I2C总线
    +关注

    关注

    7

    文章

    324

    浏览量

    60043
  • 寄生电感
    +关注

    关注

    1

    文章

    104

    浏览量

    14387
  • FPGA芯片
    +关注

    关注

    2

    文章

    204

    浏览量

    39339
  • LQFP封装
    +关注

    关注

    0

    文章

    8

    浏览量

    7291
收藏 人收藏

    评论

    相关推荐

    i2c总线ppt(I2C总线器件应用)

    I2C总线器件应用第一节 I2C总线器件应用概述I2C总线工作原理I2C总线系统结构I2C总线系统结构如图7-1所示。其中,SCL是时钟线,SDA是数据线。总线上的各器件都采用漏
    发表于 08-13 17:34 115次下载

    STM32硬件I2C例程

    STM32硬件I2C例程,感兴趣的小伙伴们可以看看。
    发表于 07-26 10:26 86次下载

    STM32F2—通信接口I2C

    STM32F2—通信接口
    发表于 09-03 11:24 31次下载
    <b>STM32F2</b>—通信接口<b>I2C</b>

    I2C LCD 器件通过驱动带有 I2C 接口的 2 线式 16 字符 LCD

    I2C LCD 器件通过驱动带有 I2C 接口的 2 线式 16 字符 LCD
    发表于 10-10 08:22 13次下载
    <b>I2C</b> LCD 器件通过驱动带有 <b>I2C</b> 接口的 <b>2</b> <b>线</b>式 16 字符 LCD

    详细说明了I2C库文件的使用,对于理解I2C有帮助

    I2C库文件的使用,对于理解I2C有帮助
    发表于 10-13 10:02 28次下载

    STM32 通用GPIO模拟I2C实现

    STM32 模拟I2C实现#通用GPIO模拟I2C通信实现样例1 GPIO初始化``#ifdef HW_I2C1 //硬件I2C初始化//PA8-
    发表于 11-29 15:21 28次下载
    <b>STM32</b> 通用GPIO模拟<b>I2C</b>实现

    STM32学习之I2C协议(读写EEPROM)

    STM32学习分享第七章 I2C协议(读写EEPROM)文章目录关于STM32学习分享前言二、代码1.i2c.c2.i2c.h3.main.c总结前言开始!开始!单片机的I2C协议(读写
    发表于 11-30 15:21 31次下载
    <b>STM32</b>学习之<b>I2C</b>协议(读写EEPROM)

    STM32的硬件I2C有BUG吗?

    STM32的硬件I2C设计有BUG,最好不要用,用软件I2C比较靠谱。长久以来,为了不必要的麻烦,我也一直没有用过硬件I2C,主要是软件I2C也比较...
    发表于 12-04 14:51 12次下载
    <b>STM32</b>的硬件<b>I2C</b>有BUG吗?

    I2C接口配置ES7243录音芯片,MCU(STM32)收不到I2C ACK的问题

    I2C接口配置ES7243录音芯片,MCU(STM32)收不到I2C ACK的问题
    发表于 12-08 16:36 8次下载
    <b>I2C</b>接口配置ES7243录音芯片,MCU(<b>STM32</b>)收不到<b>I2C</b> ACK的问题

    STM32F103硬件I2C Slave

    STM32F103IDE:STM32CubeIDEHAL库硬件I2C当作Slave,模拟EEPROM行为测试工具:树莓派为I2C主机,使用I2C-tools进行测试配置I2C:从机地址可直接
    发表于 12-20 19:38 49次下载
    <b>STM32</b>F103硬件<b>I2C</b> Slave

    STM32 I2C存取实验资料

    STM32 I2C存取实验资料
    发表于 12-30 10:36 16次下载

    硬件I2C与模拟I2C

    I2C是没有寄存器这个概念的。 软件I2C一般是使用GPIO管脚,用软件控制SCL,SDA线输出高低电平,模拟i2c协议的时序。例如下面这段I2C的开始和结束信号,我们使用GPIOB模拟:I2C接线 GPIO引脚 模拟I2C引脚 GPIOB1
    发表于 12-28 19:14 74次下载
    硬件<b>I2C</b>与模拟<b>I2C</b>

    STM32F 单片机硬件I2C Busy标志导致的I2C卡死的处理办法

    STM32F 单片机硬件I2C Busy标志导致的I2C卡死的处理办法在调试多用户表的时候,发现如果人为短接I2C的SDA或SLK脚后,I2C的SR2的Busy标志将会置1,并且试了很多种办法也无
    发表于 12-28 19:24 18次下载
    <b>STM32</b>F 单片机硬件<b>I2C</b> Busy标志导致的<b>I2C</b>卡死的处理办法

    I2C上拉电阻如何选择合适的阻值?

    I2C总线是微电子通信控制领域中常用的一种总线标准,具备接线少,控制简单,速率高等优点。在I2C电路中常见的上拉电阻有1k、1.5k、2.2k、4.7k、5.1k、10k等等,但是应该如何根据开发要求选择合适的阻值?下图为I2C内部结构
    的头像 发表于 05-10 16:17 816次阅读
    <b>I2C</b>上拉电阻如何选择<b>合适</b>的阻值?

    i2c采样是上升沿吗?

    i2c采样是上升沿吗?  I2C采样是指在I2C总线上对数据进行采样。在I2C总线上,数据的传输是通过2线传递。一条是时钟线(SCL),另一条是数据线(SDA)。采样的目的是为了准确地读取或写入
    的头像 发表于 09-19 17:16 92次阅读