0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對于STM32的I2C Layout走線多長合適呢?

冬至子 ? 來源:ecircuitlab ? 作者:ecircuitlab ? 2023-09-27 15:31 ? 次閱讀

今天來討論一個I2C走線問題,過程是通過用ST提供的IBIS模型,從SI的角度出發(fā),做SI仿真來評估STM32的I2C信號和確定Layout走線到底能走多長。

這里我選擇了STM32F765XX-LQFP144封裝的IBIS模式來實驗,在Hyperlynx上把Layout模型電路畫好如下圖所示,U1使用STM32的PF0腳作為發(fā)送端,這個腳可以復(fù)用為SDA信號,U2使用STM32的PF0作為接收端,TL1、TL2分別為10in(25.4厘米)和1in(2.54厘米)的微帶線走線,R1為上拉電阻。

圖片

圖1. 使用STM32F765系列LQFP144封裝的IBIS模型搭建的電路

搭建好Layout電路后,打開Model Selector給U1和U2賦予對應(yīng)的IBIS模型,可以看到,ST提供的STM32 IO有四種速度等級,和帶或不帶上下拉電阻幾種,如下。

圖片

圖2. IO有4中速度等級模型,每種又分帶或不帶上下拉電阻

上圖中可以看到,IO內(nèi)置的上拉電阻比較大,實際使用中一般不用內(nèi)置電阻,都是外掛上拉電阻,所以我們 先選擇最低速度SPEED0不帶上下拉的模型驗證 。

設(shè)置好模型后運(yùn)行仿真,設(shè)置仿真條件為Oscillator模式,速率400K,IC modeling為Fast-Strong模式,模擬I2C以400K時鐘速率運(yùn)行,查看接收端波形如下圖所示,可以看到波形很好,沒有什么比較嚴(yán)重的過沖啥的,沒啥問題。

圖片

圖3. 速度等級為SPEED0,Layout走線11in(29.29厘米),400K速率運(yùn)行波形正常

現(xiàn)在對標(biāo)我們平時的產(chǎn)品設(shè)計,有時I2C會繞板子不止28.29厘米這么長,那我們試試把長度拉大到50厘米,設(shè)置TL1為20in(長度50厘米多),然后再運(yùn)行仿真得到如下圖結(jié)果。

圖片

圖3. 速度等級為SPEED0,Layout走線21in(53.34厘米),400K速率運(yùn)行波形有過沖

可以看到這時對于接收端接收到的波形,過沖有點(diǎn)嚴(yán)重了,因為STM32的IO可以兼容5V電平,所以這里高電平的過沖還沒超過5V,我們就先不管。但是低電平時的下沖有318.7mV了。那到底要不要管呢?首先我們?nèi)シ?a target="_blank">規(guī)格書,在規(guī)格書中找到電壓特性表如下所示。

可以看到對于輸入下沖信號,最小電壓值是VSS-0.3V,即所選STM32的IO能接受的下沖最大為-0.3V,不能超過-0.3V。現(xiàn)在再看上面仿真的下沖電壓,顯然已經(jīng)越過這個值。

芯片如果長時間在這樣的條件下工作,可能一段時間后,IO就損壞失效,這也是我們很多產(chǎn)品在客戶現(xiàn)場使用,一段時間后芯片的某個IO損壞的原因之一,就是Layout處理不好,有過沖、下沖超過IO極限值導(dǎo)致。當(dāng)然,也有可能是其他原因?qū)е?,比?a target="_blank">ESD之類的。

圖片

圖4. STM32規(guī)格書中的IO輸入電壓極限值

那對于STM32的I2C Layout走線多長適合呢? 這里我嘗試了不同長度仿真分析,總結(jié)為,對于STM32F7系列的芯片來說,IO速度等級為慢速,I2C Layout走線不建議超過45厘米 。其他系列的可以參考這個信息輕微浮動,如果可以的話,盡可能使用IBIS模型仿真評估。

那是不是得到這樣的結(jié)論后我們就可以結(jié)束了呢?不,其實還有一大堆坑。上面我特別的去強(qiáng)調(diào)我使用的IO的速度等級是SPEED0,慢速等級。圖2中我們看到還有3種速度等級可以選用,實際中我們也可以代碼配置為另外的3種速度等級,那如果我們更改下速度等級會不會有影響呢?這里我馬上做了嘗試,保持Layout走線長度為上面結(jié)論的45厘米長,把輸出IO的速度等級換為SPEED1,運(yùn)行仿真得到結(jié)果如下。從結(jié)果可以看到,速度等級升高后,上面的結(jié)論就不成立了,此時高電平的過沖仍然還在可接受范圍內(nèi),但下沖就不是那么友善了,都-905.4mV了,這樣搞,芯片不壞都天理難容。

圖片

圖5. 把IO速度等級換為SPEED1,Layout走線長度保存45厘米,仿真有嚴(yán)重過沖

從上面這個步驟來看,速度等級增加后,會使過沖變得嚴(yán)重,那這樣的話,我們就不嘗試SPEED2了,直接看SPEED3,看看最高速度等級到底會糟糕成什么樣。同樣保持Layout走線長度為45厘米不變,IO速度等級調(diào)整為SPEED3,運(yùn)行仿真得到結(jié)果如下。嗯,看起來還好,沒有糟糕到可以炸板,相對SPEED1來說,高電平過沖也還在可接受范圍,下沖多了幾個mV。

圖片

圖6. 把IO速度等級換為SPEED3,Layout走線長度保存45厘米,過沖情況跟SPEED1差不多

實驗到這里我突然好奇,現(xiàn)在ST主推用CubeMX來自動生成配置代碼,用戶在使用I2C時,它的IO會默認(rèn)配置為什么樣的速度等級?于是我馬上打開CubeMX做了個嘗試,很快就得到了答案,不過看完我傻眼了,默認(rèn)配置為SPEED3,如下圖所示。

根據(jù)上面仿真情況,我想了想,要是哪天哪位冤種用這配置代碼放在一個主控到I2C從機(jī)設(shè)備線纜比較長的產(chǎn)品中,要是出問題了,估計加班排查好久都不一定查出來。

圖片

圖7. CubeMX對于I2C的IO速度等級默認(rèn)配置為SPEED3

說到上面的大冤種情形,想起2年前做的一個產(chǎn)品,產(chǎn)品也是主板上通過線纜把I2C信號拉到子板上配置子板的芯片,線纜有50厘米長。當(dāng)時I2C主機(jī)總會莫名其妙的把子板芯片搞掛,最后發(fā)數(shù)據(jù)沒ACK,需要重新給子板上電后才能恢復(fù)正常,但過一會又不行,當(dāng)時搞得也是頭疼。當(dāng)時使用的主控是AlteraFPGA,排查無果后我倒回去重新看FPGA的規(guī)格書,在IO特性里發(fā)現(xiàn)IO的上升下降沿都比較陡,當(dāng)時就覺得是遇到SI的問題了,然后就馬上調(diào)了FPGA的IBIS模型搭模型電路仿真,結(jié)果跟猜測一樣。

理論、仿真分析確認(rèn)問題點(diǎn)后,因為FPGA的IO特性就那樣,沒辦法去改變,想了想后就找了顆上升、下降沿沒那么陡的電平轉(zhuǎn)換芯片,放在FPGA IO和子板芯片IO之間做緩沖,最后問題解決。

嘮嗑完大冤種后,我們再來看看使用SPEED3時,留給Layout的走線長度裕量還有多少。經(jīng)過反復(fù)嘗試,最終定下來對于我使用的STM32F765XX-LQFP144這顆芯片,使用I2C外設(shè),如果IO速度等級配置為SPEED3模式的話,保險Layout走線長度建議控制在0.6in(1.524厘米)內(nèi),下圖為控制長度為0.6in的仿真結(jié)果,長了就下沖厲害。

圖片

圖8. IO速度等級為SPEED3時,控制Layout走線在0.6in時的仿真結(jié)果

驚訝吧!1.524厘米長,把這個約束給Layout工程師估計會被打死,所以對于STM32的I2C Layout要求,硬件設(shè)計時可以使用前面建議的45厘米長度約****束,但必須注意要求軟件把IO速度等級配正確 ,不然大家都得加班查Bug。

原理講解

現(xiàn)在我們經(jīng)過一波仿真實操驗證后,知道了STM32的I2C Layout最大走線長度的參考,那究竟是什么原因?qū)е挛覀兊腖ayout走線沒法再增長呢?下面我簡單解釋下。

首先對于我們看到的Layout走線,細(xì)化去看的話,可以等效為下圖所示的電路模型,由寄生電感和寄生電容構(gòu)成。信號在上面?zhèn)鬏敃r,如果電平翻轉(zhuǎn)的上升、下降沿比較陡,那么在接收端接收到的電壓不再等于輸出端的電壓,而是V=L*di/dt。

從這個公式可以看到,影響電壓V的就是寄生電感L和IO的上升、下降沿dt,所以解決V不過度變化大的方法就是要么讓L盡可能小,要么就是讓上升、下降沿增大。L變小就是走線盡可能短,IO上升、下降沿增大一般就是找電平轉(zhuǎn)換芯片來做做緩沖改善。

圖片

圖9. Layout走線的寄生電路模型

如果對于上面的理論還是難以理解,那沒問題,我們直接來搭一個電路仿真看看也可以。參考上面電路模型我們搭一個電路和仿真如下,電路設(shè)置輸出周期15ns,50%占空比的波形,上升沿、下降沿設(shè)置為3ns,可以看到,輸出波形震蕩過沖和下沖還是比較大。

圖片

圖10. 搭建Layout走線電路模型,設(shè)置上升、下降沿為3ns仿真波形

我們再把上升、下降沿時間縮小到1ns看看,仿真結(jié)果如下,可以看到過沖、下沖更大,所以這也驗證了上面的理論解釋。

圖片

圖11. 搭建Layout走線電路模型,設(shè)置上升、下降沿為1ns仿真波形

同樣為了論證減小L帶來的改善,在上圖11的基礎(chǔ)上,把寄生電感縮小為0.1nH,運(yùn)行仿真,從仿真結(jié)果來看,已幾乎不再有過沖、下沖,也符合我們理論解釋情況。

圖片

圖11. 搭建Layout走線電路模型,設(shè)置寄生電感為0.1nH的仿真波形

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10901

    瀏覽量

    356230
  • I2C總線
    +關(guān)注

    關(guān)注

    8

    文章

    391

    瀏覽量

    60955
  • 寄生電感
    +關(guān)注

    關(guān)注

    1

    文章

    156

    瀏覽量

    14604
  • FPGA芯片
    +關(guān)注

    關(guān)注

    3

    文章

    246

    瀏覽量

    39801
  • LQFP封裝
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7393
收藏 人收藏

    評論

    相關(guān)推薦

    i2c總線ppt(I2C總線器件應(yīng)用)

    I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理I2C總線系統(tǒng)結(jié)構(gòu)I2C總線系統(tǒng)結(jié)構(gòu)如圖7-1所示。其中,SCL是時鐘
    發(fā)表于 08-13 17:34 ?0次下載

    STM32硬件I2C例程

    STM32硬件I2C例程,感興趣的小伙伴們可以看看。
    發(fā)表于 07-26 10:26 ?93次下載

    STM32F2—通信接口I2C

    STM32F2—通信接口I2C
    發(fā)表于 09-03 11:24 ?31次下載
    <b class='flag-5'>STM32F2</b>—通信接口<b class='flag-5'>I2C</b>

    I2C LCD 器件通過驅(qū)動帶有 I2C 接口的 2 式 16 字符 LCD

    I2C LCD 器件通過驅(qū)動帶有 I2C 接口的 2 式 16 字符 LCD
    發(fā)表于 10-10 08:22 ?13次下載
    <b class='flag-5'>I2C</b> LCD 器件通過驅(qū)動帶有 <b class='flag-5'>I2C</b> 接口的 <b class='flag-5'>2</b> <b class='flag-5'>線</b>式 16 字符 LCD

    詳細(xì)說明了I2C庫文件的使用,對于理解I2C有幫助

    詳細(xì)說明了I2C庫文件的使用,對于理解I2C有幫助
    發(fā)表于 10-13 10:02 ?28次下載

    STM32 I2C硬件的結(jié)構(gòu)

    我們可以看見STM32的硬件I2C有兩個和數(shù)據(jù)有關(guān)的寄存器“數(shù)據(jù)寄存器(Data register)”(DR)和“數(shù)據(jù)移位寄存器(Data shift register)”(DSR),我們的軟件寫入的是DR, DSR用于I2C數(shù)
    的頭像 發(fā)表于 04-30 15:00 ?7340次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>I2C</b>硬件的結(jié)構(gòu)

    STM32 通用GPIO模擬I2C實現(xiàn)

    STM32 模擬I2C實現(xiàn)#通用GPIO模擬I2C通信實現(xiàn)樣例1 GPIO初始化``#ifdef HW_I2C1 //硬件I2C初始化//P
    發(fā)表于 11-29 15:21 ?29次下載
    <b class='flag-5'>STM32</b> 通用GPIO模擬<b class='flag-5'>I2C</b>實現(xiàn)

    STM32學(xué)習(xí)之I2C協(xié)議(讀寫EEPROM)

    關(guān)于STM32學(xué)習(xí)分享第七章 I2C協(xié)議(讀寫EEPROM)文章目錄關(guān)于STM32學(xué)習(xí)分享前言二、代碼1.i2c.c2.i2c.h3.main.c總結(jié)前言開始!開始!單片機(jī)的
    發(fā)表于 11-30 15:21 ?32次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)之<b class='flag-5'>I2C</b>協(xié)議(讀寫EEPROM)

    STM32的硬件I2C有BUG嗎?

    坊間一直流傳著一個傳說~STM32的硬件I2C設(shè)計有BUG,最好不要用,用軟件I2C比較靠譜。長久以來,為了不必要的麻煩,我也一直沒有用過硬件I2C,主要是軟件
    發(fā)表于 12-04 14:51 ?26次下載
    <b class='flag-5'>STM32</b>的硬件<b class='flag-5'>I2C</b>有BUG嗎?

    I2C接口配置ES7243錄音芯片,MCU(STM32)收不到I2C ACK的問題

    I2C接口配置ES7243錄音芯片,MCU(STM32)收不到I2C ACK的問題
    發(fā)表于 12-08 16:36 ?10次下載
    <b class='flag-5'>I2C</b>接口配置ES7243錄音芯片,MCU(<b class='flag-5'>STM32</b>)收不到<b class='flag-5'>I2C</b> ACK的問題

    STM32F103硬件I2C Slave

    MCU:STM32F103IDE:STM32CubeIDEHAL庫硬件I2C當(dāng)作Slave,模擬EEPROM行為測試工具:樹莓派為I2C主機(jī),使用I
    發(fā)表于 12-20 19:38 ?52次下載
    <b class='flag-5'>STM32</b>F103硬件<b class='flag-5'>I2C</b> Slave

    STM32 I2C存取實驗資料

    STM32 I2C存取實驗資料
    發(fā)表于 12-30 10:36 ?17次下載

    硬件I2C與模擬I2C

    配置;而軟件I2C是沒有寄存器這個概念的。 軟件I2C一般是使用GPIO管腳,用軟件控制SCL,SDA輸出高低電平,模擬i2c協(xié)議的時序。例如下面這段
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    STM32F 單片機(jī)硬件I2C Busy標(biāo)志導(dǎo)致的I2C卡死的處理辦法

    STM32F 單片機(jī)硬件I2C Busy標(biāo)志導(dǎo)致的I2C卡死的處理辦法在調(diào)試多用戶表的時候,發(fā)現(xiàn)如果人為短接I2C的SDA或SLK腳后,I2C
    發(fā)表于 12-28 19:24 ?24次下載
    <b class='flag-5'>STM32</b>F 單片機(jī)硬件<b class='flag-5'>I2C</b> Busy標(biāo)志導(dǎo)致的<b class='flag-5'>I2C</b>卡死的處理辦法

    I2C上拉電阻如何選擇合適的阻值?

    I2C總線是微電子通信控制領(lǐng)域中常用的一種總線標(biāo)準(zhǔn),具備接線少,控制簡單,速率高等優(yōu)點(diǎn)。在I2C電路中常見的上拉電阻有1k、1.5k、2.2k、4.7k、5.1k、10k等等,但是應(yīng)該如何根據(jù)開發(fā)要求選擇合適的阻值
    的頭像 發(fā)表于 05-10 16:17 ?7073次閱讀
    <b class='flag-5'>I2C</b>上拉電阻如何選擇<b class='flag-5'>合適</b>的阻值?